From be47c999ca64637df350bbf7eee25860f4ee3a54 Mon Sep 17 00:00:00 2001 From: lash Date: Sun, 19 Jan 2025 09:46:37 +0000 Subject: [PATCH] Integrate tx enabled vise db --- cmd/africastalking/main.go | 7 ++++--- cmd/async/main.go | 8 ++++---- cmd/http/main.go | 7 ++++--- cmd/main.go | 14 ++++++++++++++ cmd/ssh/main.go | 2 +- cmd/ssh/sshkey/main.go | 2 +- devtools/store/dump/main.go | 2 +- go.mod | 6 +++--- go.sum | 12 ++++++------ handlers/application/menuhandler_test.go | 2 +- ssh/keystore.go | 4 ++-- ssh/ssh.go | 4 ++-- store/vouchers_test.go | 2 +- testutil/engine.go | 4 ++-- 14 files changed, 46 insertions(+), 30 deletions(-) diff --git a/cmd/africastalking/main.go b/cmd/africastalking/main.go index fe24975..483cb19 100644 --- a/cmd/africastalking/main.go +++ b/cmd/africastalking/main.go @@ -101,7 +101,6 @@ func main() { fmt.Fprintf(os.Stderr, "userdatadb: %v\n", err) os.Exit(1) } - defer userdataStore.Close() dbResource, ok := rs.(*resource.DbResource) if !ok { @@ -133,7 +132,6 @@ func main() { fmt.Fprintf(os.Stderr, "getstatestore: %v\n", err) os.Exit(1) } - defer stateStore.Close() rp := &at.ATRequestParser{} bsh := request.NewBaseRequestHandler(cfg, rs, stateStore, userdataStore, rp, hl) @@ -146,7 +144,10 @@ func main() { Addr: fmt.Sprintf("%s:%s", host, strconv.Itoa(int(port))), Handler: mux, } - s.RegisterOnShutdown(sh.Shutdown) + shutdownFunc := func() { + sh.Shutdown(ctx) + } + s.RegisterOnShutdown(shutdownFunc) cint := make(chan os.Signal) cterm := make(chan os.Signal) diff --git a/cmd/async/main.go b/cmd/async/main.go index e68efe8..b092fba 100644 --- a/cmd/async/main.go +++ b/cmd/async/main.go @@ -116,7 +116,7 @@ func main() { fmt.Fprintf(os.Stderr, err.Error()) os.Exit(1) } - defer userdataStore.Close() + //defer userdataStore.Close(ctx) dbResource, ok := rs.(*resource.DbResource) if !ok { @@ -139,7 +139,7 @@ func main() { fmt.Fprintf(os.Stderr, err.Error()) os.Exit(1) } - defer stateStore.Close() + //defer stateStore.Close(ctx) rp := &asyncRequestParser{ sessionId: sessionId, @@ -161,7 +161,7 @@ func main() { case _ = <-cint: case _ = <-cterm: } - sh.Shutdown() + sh.Shutdown(ctx) }() for true { @@ -177,7 +177,7 @@ func main() { fmt.Errorf("error in output: %v", err) os.Exit(1) } - rqs, err = sh.Reset(rqs) + rqs, err = sh.Reset(ctx, rqs) if err != nil { logg.ErrorCtxf(ctx, "error in reset: %v", "err", err) fmt.Errorf("error in reset: %v", err) diff --git a/cmd/http/main.go b/cmd/http/main.go index 10f0874..a024808 100644 --- a/cmd/http/main.go +++ b/cmd/http/main.go @@ -101,7 +101,6 @@ func main() { fmt.Fprintf(os.Stderr, err.Error()) os.Exit(1) } - defer userdataStore.Close() dbResource, ok := rs.(*resource.DbResource) if !ok { @@ -129,7 +128,6 @@ func main() { fmt.Fprintf(os.Stderr, err.Error()) os.Exit(1) } - defer stateStore.Close() //accountService := services.New(ctx, menuStorageService, connData) @@ -140,7 +138,10 @@ func main() { Addr: fmt.Sprintf("%s:%s", host, strconv.Itoa(int(port))), Handler: sh, } - s.RegisterOnShutdown(sh.Shutdown) + shutdownFunc := func() { + sh.Shutdown(ctx) + } + s.RegisterOnShutdown(shutdownFunc) cint := make(chan os.Signal) cterm := make(chan os.Signal) diff --git a/cmd/main.go b/cmd/main.go index 81aad6f..a6351b4 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -5,7 +5,9 @@ import ( "flag" "fmt" "os" + "os/signal" "path" + "syscall" "git.defalsify.org/vise.git/engine" "git.defalsify.org/vise.git/logging" @@ -135,6 +137,18 @@ func main() { en = en.WithDebug(nil) } + cint := make(chan os.Signal) + cterm := make(chan os.Signal) + signal.Notify(cint, os.Interrupt, syscall.SIGINT) + signal.Notify(cterm, os.Interrupt, syscall.SIGTERM) + go func() { + select { + case _ = <-cint: + case _ = <-cterm: + } + menuStorageService.Close(ctx) + }() + err = engine.Loop(ctx, en, os.Stdin, os.Stdout, nil) if err != nil { fmt.Fprintf(os.Stderr, "loop exited with error: %v\n", err) diff --git a/cmd/ssh/main.go b/cmd/ssh/main.go index c04252b..5119a88 100644 --- a/cmd/ssh/main.go +++ b/cmd/ssh/main.go @@ -102,7 +102,7 @@ func main() { } defer func() { logg.TraceCtxf(ctx, "shutdown auth key store reached") - err = authKeyStore.Close() + err = authKeyStore.Close(ctx) if err != nil { logg.ErrorCtxf(ctx, "keystore close error", "err", err) } diff --git a/cmd/ssh/sshkey/main.go b/cmd/ssh/sshkey/main.go index 3aac78c..b05fe06 100644 --- a/cmd/ssh/sshkey/main.go +++ b/cmd/ssh/sshkey/main.go @@ -34,7 +34,7 @@ func main() { fmt.Fprintf(os.Stderr, "%v\n", err) os.Exit(1) } - defer store.Close() + defer store.Close(ctx) err = store.AddFromFile(ctx, sshKeyFile, sessionId) if err != nil { diff --git a/devtools/store/dump/main.go b/devtools/store/dump/main.go index c1879bf..34e4400 100644 --- a/devtools/store/dump/main.go +++ b/devtools/store/dump/main.go @@ -93,7 +93,7 @@ func main() { fmt.Printf(r) } - err = store.Close() + err = store.Close(ctx) if err != nil { fmt.Fprintf(os.Stderr, err.Error()) os.Exit(1) diff --git a/go.mod b/go.mod index 187953f..b6ca4b6 100644 --- a/go.mod +++ b/go.mod @@ -3,11 +3,11 @@ module git.grassecon.net/grassrootseconomics/sarafu-vise go 1.23.4 require ( - git.defalsify.org/vise.git v0.2.3-0.20250118155735-c1256156ed8b + git.defalsify.org/vise.git v0.2.3-0.20250119084238-8ad1d92d2127 git.grassecon.net/grassrootseconomics/common v0.0.0-20250113174703-6afccefd1f05 git.grassecon.net/grassrootseconomics/sarafu-api v0.0.0-20250115072214-bca7c5de969f - git.grassecon.net/grassrootseconomics/visedriver v0.8.0-beta.10.0.20250115003256-c0534ede1b63 - git.grassecon.net/grassrootseconomics/visedriver-africastalking v0.0.0-20250113103030-f0b2056fd87d + git.grassecon.net/grassrootseconomics/visedriver v0.8.0-beta.10.0.20250119094010-c9b92191f3ad + git.grassecon.net/grassrootseconomics/visedriver-africastalking v0.0.0-20250119094241-c3a51127772d github.com/alecthomas/assert/v2 v2.2.2 github.com/gofrs/uuid v4.4.0+incompatible github.com/grassrootseconomics/ussd-data-service v1.2.0-beta diff --git a/go.sum b/go.sum index f45e963..be0c921 100644 --- a/go.sum +++ b/go.sum @@ -1,13 +1,13 @@ -git.defalsify.org/vise.git v0.2.3-0.20250118155735-c1256156ed8b h1:ac6OThj6nqQb3TUyXHqv/vQOQUQZ98XKpYTBHZFbxUI= -git.defalsify.org/vise.git v0.2.3-0.20250118155735-c1256156ed8b/go.mod h1:jyBMe1qTYUz3mmuoC9JQ/TvFeW0vTanCUcPu3H8p4Ck= +git.defalsify.org/vise.git v0.2.3-0.20250119084238-8ad1d92d2127 h1:4AZoazfzGAHGNMn3kAWsXZQGO3Sme4PYLV8gvMjIZ0A= +git.defalsify.org/vise.git v0.2.3-0.20250119084238-8ad1d92d2127/go.mod h1:jyBMe1qTYUz3mmuoC9JQ/TvFeW0vTanCUcPu3H8p4Ck= git.grassecon.net/grassrootseconomics/common v0.0.0-20250113174703-6afccefd1f05 h1:BenzGx6aDHKDwE23/mWIFD2InYIXyzHroZWV3MF5WUk= git.grassecon.net/grassrootseconomics/common v0.0.0-20250113174703-6afccefd1f05/go.mod h1:wgQJZGIS6QuNLHqDhcsvehsbn5PvgV7aziRebMnJi60= git.grassecon.net/grassrootseconomics/sarafu-api v0.0.0-20250115072214-bca7c5de969f h1:FgccQi8vipX6dUt+GRiRDYHMR3UqC+plz73vw7y3fyU= git.grassecon.net/grassrootseconomics/sarafu-api v0.0.0-20250115072214-bca7c5de969f/go.mod h1:tbA4whUGMUIDgQVdIW0sxWPuuXOvZRSny5zeku5hX4k= -git.grassecon.net/grassrootseconomics/visedriver v0.8.0-beta.10.0.20250115003256-c0534ede1b63 h1:bX7klKZpX+ZZu1LKbtOXDAhV/KK0YwExehiIi0jusAM= -git.grassecon.net/grassrootseconomics/visedriver v0.8.0-beta.10.0.20250115003256-c0534ede1b63/go.mod h1:Syw9TZyigPAM7t9FvicOm36iUnidt45f0SxzT2JniQ8= -git.grassecon.net/grassrootseconomics/visedriver-africastalking v0.0.0-20250113103030-f0b2056fd87d h1:q/NO1rEgK3pia32D/tCq5hXfEuJp84COZRwceFvy/MM= -git.grassecon.net/grassrootseconomics/visedriver-africastalking v0.0.0-20250113103030-f0b2056fd87d/go.mod h1:AH15xABcvaJr1TCGlih3oGSuwWC0E5IdbHQwuu+E1KI= +git.grassecon.net/grassrootseconomics/visedriver v0.8.0-beta.10.0.20250119094010-c9b92191f3ad h1:hZCsa0rHn2r0S1ToaPbPSN05W71dLSndyPYE9J/gv2Y= +git.grassecon.net/grassrootseconomics/visedriver v0.8.0-beta.10.0.20250119094010-c9b92191f3ad/go.mod h1:jukqi0wbhwsVKywcq8XUnjLnLak/iuxpkrUpAOoTJBE= +git.grassecon.net/grassrootseconomics/visedriver-africastalking v0.0.0-20250119094241-c3a51127772d h1:ikmaRBGMG0KMxZpcO0yC4tyCJkgWrbXkpisl3m1lKoY= +git.grassecon.net/grassrootseconomics/visedriver-africastalking v0.0.0-20250119094241-c3a51127772d/go.mod h1:2EBjn9MKNe3DUep+NljRU/AczgKmRoUwEb6yIO+Atx0= github.com/alecthomas/assert/v2 v2.2.2 h1:Z/iVC0xZfWTaFNE6bA3z07T86hd45Xe2eLt6WVy2bbk= github.com/alecthomas/assert/v2 v2.2.2/go.mod h1:pXcQ2Asjp247dahGEmsZ6ru0UVwnkhktn7S0bBDLxvQ= github.com/alecthomas/participle/v2 v2.0.0 h1:Fgrq+MbuSsJwIkw3fEj9h75vDP0Er5JzepJ0/HNHv0g= diff --git a/handlers/application/menuhandler_test.go b/handlers/application/menuhandler_test.go index 4c0fa7f..1ec3177 100644 --- a/handlers/application/menuhandler_test.go +++ b/handlers/application/menuhandler_test.go @@ -54,7 +54,7 @@ func InitializeTestStore(t *testing.T) (context.Context, *store.UserDataStore) { store := &store.UserDataStore{Db: db} t.Cleanup(func() { - db.Close() // Ensure the DB is closed after each test + db.Close(ctx) // Ensure the DB is closed after each test }) return ctx, store diff --git a/ssh/keystore.go b/ssh/keystore.go index 85c703f..1219e0d 100644 --- a/ssh/keystore.go +++ b/ssh/keystore.go @@ -63,6 +63,6 @@ func(s *SshKeyStore) Get(ctx context.Context, pubKey ssh.PublicKey) (string, err return string(v), nil } -func(s *SshKeyStore) Close() error { - return s.store.Close() +func(s *SshKeyStore) Close(ctx context.Context) error { + return s.store.Close(ctx) } diff --git a/ssh/ssh.go b/ssh/ssh.go index 18e930d..6408f76 100644 --- a/ssh/ssh.go +++ b/ssh/ssh.go @@ -194,7 +194,7 @@ func(s *SshRunner) GetEngine(sessionId string) (engine.Engine, func(), error) { } // TODO: this is getting very hacky! closer := func() { - err := menuStorageService.Close() + err := menuStorageService.Close(ctx) if err != nil { logg.ErrorCtxf(ctx, "menu storage service cleanup fail", "err", err) } @@ -268,7 +268,7 @@ func(s *SshRunner) Run(ctx context.Context, keyStore *SshKeyStore) { return } defer func() { - err := en.Finish() + err := en.Finish(ctx) if err != nil { logg.ErrorCtxf(ctx, "engine won't stop", "err", err) } diff --git a/store/vouchers_test.go b/store/vouchers_test.go index 5e3a99b..a98ffc3 100644 --- a/store/vouchers_test.go +++ b/store/vouchers_test.go @@ -27,7 +27,7 @@ func InitializeTestDb(t *testing.T) (context.Context, *UserDataStore) { store := &UserDataStore{Db: db} t.Cleanup(func() { - db.Close() // Ensure the DB is closed after each test + db.Close(ctx) // Ensure the DB is closed after each test }) return ctx, store diff --git a/testutil/engine.go b/testutil/engine.go index 6c37c87..8f3c2f7 100644 --- a/testutil/engine.go +++ b/testutil/engine.go @@ -195,12 +195,12 @@ func TestEngine(sessionId string) (engine.Engine, func(), chan bool) { en := lhs.GetEngine() en = en.WithFirst(hl.Init) cleanFn := func() { - err := en.Finish() + err := en.Finish(ctx) if err != nil { logg.Errorf(err.Error()) } - err = menuStorageService.Close() + err = menuStorageService.Close(ctx) if err != nil { logg.Errorf(err.Error()) }