From 8a8cbe47b9ce3b7b14c3c6b3c83d3f555b40be97 Mon Sep 17 00:00:00 2001 From: jholdstock Date: Fri, 15 Sep 2023 09:41:14 +0100 Subject: [PATCH] webapi: Create server when all components ready. It's generally good practice to first create everything that can fail and then create the final instance at once with the results versus doing it piecemeal. Piecemeal creation is typically more error prone and, while not a huge concern here, it also ends up needlessly creating objects that are just thrown away in the event of a later error. --- internal/webapi/webapi.go | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/internal/webapi/webapi.go b/internal/webapi/webapi.go index d80dbf5..89bc450 100644 --- a/internal/webapi/webapi.go +++ b/internal/webapi/webapi.go @@ -79,24 +79,16 @@ func Start(ctx context.Context, requestShutdown func(), shutdownWg *sync.WaitGro vdb *database.VspDatabase, log slog.Logger, dcrd rpc.DcrdConnect, wallets rpc.WalletConnect, cfg Config) error { - s := &server{ - cfg: cfg, - db: vdb, - log: log, - } - - var err error - // Get keys for signing API responses from the database. - s.signPrivKey, s.signPubKey, err = vdb.KeyPair() + signPrivKey, signPubKey, err := vdb.KeyPair() if err != nil { return fmt.Errorf("db.Keypair error: %w", err) } // Populate cached VSP stats before starting webserver. - encodedPubKey := base64.StdEncoding.EncodeToString(s.signPubKey) - s.cache = newCache(encodedPubKey, log, vdb, dcrd, wallets) - err = s.cache.update() + encodedPubKey := base64.StdEncoding.EncodeToString(signPubKey) + cache := newCache(encodedPubKey, log, vdb, dcrd, wallets) + err = cache.update() if err != nil { log.Errorf("Could not initialize VSP stats cache: %v", err) } @@ -111,7 +103,7 @@ func Start(ctx context.Context, requestShutdown func(), shutdownWg *sync.WaitGro if err != nil { return fmt.Errorf("db.GetFeeXPub error: %w", err) } - s.addrGen, err = newAddressGenerator(feeXPub, cfg.Network.Params, idx, log) + addrGen, err := newAddressGenerator(feeXPub, cfg.Network.Params, idx, log) if err != nil { return fmt.Errorf("failed to initialize fee address generator: %w", err) } @@ -122,6 +114,16 @@ func Start(ctx context.Context, requestShutdown func(), shutdownWg *sync.WaitGro return fmt.Errorf("db.GetCookieSecret error: %w", err) } + s := &server{ + cfg: cfg, + db: vdb, + log: log, + addrGen: addrGen, + cache: cache, + signPrivKey: signPrivKey, + signPubKey: signPubKey, + } + // Create TCP listener. var listenConfig net.ListenConfig listener, err := listenConfig.Listen(ctx, "tcp", cfg.Listen)