diff --git a/command/server.go b/command/server.go index 440c68f2a5..bed6194e8d 100644 --- a/command/server.go +++ b/command/server.go @@ -2304,6 +2304,15 @@ func (c *ServerCommand) Reload(lock *sync.RWMutex, reloadFuncs *map[string][]rel } } } + + case strings.HasPrefix(k, "observations|"): + for _, relFunc := range relFuncs { + if relFunc != nil { + if err := relFunc(); err != nil { + reloadErrors = multierror.Append(reloadErrors, fmt.Errorf("error encountered reloading observation system with ledger at path %q: %w", strings.TrimPrefix(k, "observations|"), err)) + } + } + } } } diff --git a/vault/core.go b/vault/core.go index 7aa6a18800..5917607730 100644 --- a/vault/core.go +++ b/vault/core.go @@ -1394,12 +1394,10 @@ func NewCore(conf *CoreConfig) (*Core, error) { LocalNodeId: nodeID, Logger: observationsLogger, } - observations, err := observations.NewObservationSystem(config) + err = c.AddObservationSystemToCore(config) if err != nil { return nil, err } - c.observations = observations - c.observations.Start() } } @@ -1407,6 +1405,30 @@ func NewCore(conf *CoreConfig) (*Core, error) { return c, nil } +func (c *Core) AddObservationSystemToCore(config *observations.NewObservationSystemConfig) error { + observations, err := observations.NewObservationSystem(config) + if err != nil { + return err + } + c.observations = observations + + c.reloadFuncsLock.Lock() + + // While it's only possible to configure one observation system now, making the key + // include the path future-proofs us going forward. + key := "observations|" + config.LedgerPath + c.reloadFuncs[key] = append(c.reloadFuncs[key], func() error { + config.Logger.Info("reloading observation system", "path", config.LedgerPath) + return observations.Reload() + }) + + c.reloadFuncsLock.Unlock() + + c.observations.Start() + + return nil +} + // configureListeners configures the Core with the listeners from the CoreConfig. func (c *Core) configureListeners(conf *CoreConfig) error { c.clusterListener.Store((*cluster.Listener)(nil)) diff --git a/vault/observations/observations_ce.go b/vault/observations/observations_ce.go index 65164de00e..9ac8da5643 100644 --- a/vault/observations/observations_ce.go +++ b/vault/observations/observations_ce.go @@ -34,3 +34,7 @@ func (observations *ObservationSystem) RecordObservationToLedger(_ context.Conte func NewObservationSystem(_ *NewObservationSystemConfig) (*ObservationSystem, error) { return &ObservationSystem{}, nil } + +func (observations *ObservationSystem) Reload() error { + return nil +}