Skip to content

Commit

Permalink
Fix issue where nats controller fails to connect on the first try. (#34)
Browse files Browse the repository at this point in the history
* Fix issue where nats controller fails to connect on the first try.

* - Change info to warn
- Exponential back off for sleep
  • Loading branch information
jakeschuurmans authored Nov 7, 2024
1 parent 2b3deeb commit 088799c
Showing 1 changed file with 25 additions and 16 deletions.
41 changes: 25 additions & 16 deletions internal/bioscfg/bioscfg.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package bioscfg

import (
"context"
"time"

"github.com/metal-toolbox/bioscfg/internal/config"
"github.com/metal-toolbox/bioscfg/internal/store/fleetdb"
Expand All @@ -13,6 +14,7 @@ import (

var (
pkgName = "internal/bioscfg"
retries = 5
)

// BiosCfg BiosCfg Controller Struct
Expand Down Expand Up @@ -73,26 +75,33 @@ func (bc *BiosCfg) initDependences(ctx context.Context) error {
}

func (bc *BiosCfg) initNats(ctx context.Context) error {
bc.nc = ctrl.NewNatsController(
string(rctypes.BiosControl),
bc.cfg.FacilityCode,
string(rctypes.BiosControl),
bc.cfg.Endpoints.Nats.URL,
bc.cfg.Endpoints.Nats.CredsFile,
rctypes.BiosControl,
ctrl.WithConcurrency(bc.cfg.Concurrency),
ctrl.WithKVReplicas(bc.cfg.Endpoints.Nats.KVReplicationFactor),
ctrl.WithLogger(bc.logger.Logger),
ctrl.WithConnectionTimeout(bc.cfg.Endpoints.Nats.ConnectTimeout),
)
var err error

for i := range retries {
bc.nc = ctrl.NewNatsController(
string(rctypes.BiosControl),
bc.cfg.FacilityCode,
string(rctypes.BiosControl),
bc.cfg.Endpoints.Nats.URL,
bc.cfg.Endpoints.Nats.CredsFile,
rctypes.BiosControl,
ctrl.WithConcurrency(bc.cfg.Concurrency),
ctrl.WithKVReplicas(bc.cfg.Endpoints.Nats.KVReplicationFactor),
ctrl.WithLogger(bc.logger.Logger),
ctrl.WithConnectionTimeout(bc.cfg.Endpoints.Nats.ConnectTimeout),
)

err = bc.nc.Connect(ctx)
if err == nil {
return nil
}

err := bc.nc.Connect(ctx)
if err != nil {
bc.logger.Error(err)
return err
bc.logger.Warnf("Attempt %d of %d failed. Trying again . . .", i, retries)
time.Sleep(time.Duration(i) * time.Second)
}

return nil
return err
}

func (bc *BiosCfg) initFleetDB(ctx context.Context) error {
Expand Down

0 comments on commit 088799c

Please sign in to comment.