From 9b48dbc2fd4f9a9f0bda4ca68488590f681dbd9e Mon Sep 17 00:00:00 2001 From: Louis Ruch Date: Tue, 12 Apr 2022 08:17:14 -0700 Subject: [PATCH] fix(logs): Remove erroneous scheduler run logs at first run. (#1980) The Scheduler is dependant on the server being inserted into the database. Adding an upsert server call before starting scheduler and tickers removes the race that caused log spam due to a missing foreign key relationship. --- internal/servers/controller/controller.go | 5 +++ internal/servers/controller/tickers.go | 39 ++++++++++++++--------- 2 files changed, 29 insertions(+), 15 deletions(-) diff --git a/internal/servers/controller/controller.go b/internal/servers/controller/controller.go index 35144a5258..76e80816f7 100644 --- a/internal/servers/controller/controller.go +++ b/internal/servers/controller/controller.go @@ -315,6 +315,11 @@ func (c *Controller) Start() error { if err := c.startListeners(); err != nil { return fmt.Errorf("error starting controller listeners: %w", err) } + + // Upsert server before starting tickers and scheduler to ensure the server exists + if err := c.upsertServer(c.baseContext); err != nil { + return fmt.Errorf("error upserting server: %w", err) + } if err := c.scheduler.Start(c.baseContext, c.schedulerWg); err != nil { return fmt.Errorf("error starting scheduler: %w", err) } diff --git a/internal/servers/controller/tickers.go b/internal/servers/controller/tickers.go index 8b93b5e0d1..749195f50b 100644 --- a/internal/servers/controller/tickers.go +++ b/internal/servers/controller/tickers.go @@ -5,6 +5,7 @@ import ( "math/rand" "time" + "github.com/hashicorp/boundary/internal/errors" "github.com/hashicorp/boundary/internal/observability/event" "github.com/hashicorp/boundary/internal/servers" "github.com/hashicorp/boundary/internal/types/resource" @@ -29,28 +30,36 @@ func (c *Controller) startStatusTicking(cancelCtx context.Context) { return case <-timer.C: - server := &servers.Server{ - PrivateId: c.conf.RawConfig.Controller.Name, - Name: c.conf.RawConfig.Controller.Name, - Type: resource.Controller.String(), - Description: c.conf.RawConfig.Controller.Description, - Address: c.conf.RawConfig.Controller.PublicClusterAddr, - } - repo, err := c.ServersRepoFn() - if err != nil { + if err := c.upsertServer(cancelCtx); err != nil { event.WriteError(cancelCtx, op, err, event.WithInfoMsg("error fetching repository for status update")) - } else { - _, _, err = repo.UpsertServer(cancelCtx, server) - if err != nil { - event.WriteError(cancelCtx, op, err, event.WithInfoMsg("error performing status update")) - } else { - } } timer.Reset(statusInterval) } } } +func (c *Controller) upsertServer(ctx context.Context) error { + const op = "controller.(Controller).upsertServer" + server := &servers.Server{ + PrivateId: c.conf.RawConfig.Controller.Name, + Name: c.conf.RawConfig.Controller.Name, + Type: resource.Controller.String(), + Description: c.conf.RawConfig.Controller.Description, + Address: c.conf.RawConfig.Controller.PublicClusterAddr, + } + repo, err := c.ServersRepoFn() + if err != nil { + return errors.Wrap(ctx, err, op, errors.WithMsg("error fetching repository for status update")) + } + + _, _, err = repo.UpsertServer(ctx, server) + if err != nil { + return errors.Wrap(ctx, err, op, errors.WithMsg("error performing status update")) + } + + return nil +} + func (c *Controller) startNonceCleanupTicking(cancelCtx context.Context) { const op = "controller.(Controller).startNonceCleanupTicking" timer := time.NewTimer(0)