79 lines
2.0 KiB
Go
79 lines
2.0 KiB
Go
package controller
|
|
|
|
import (
|
|
"context"
|
|
"time"
|
|
|
|
"github.com/hashicorp/boundary/internal/servers"
|
|
"github.com/hashicorp/boundary/internal/types/resource"
|
|
)
|
|
|
|
// In the future we could make this configurable
|
|
const (
|
|
statusInterval = 10 * time.Second
|
|
)
|
|
|
|
// This is exported so it can be tweaked in tests
|
|
var RecoveryNonceCleanupInterval = 2 * time.Minute
|
|
|
|
func (c *Controller) startStatusTicking(cancelCtx context.Context) {
|
|
go func() {
|
|
timer := time.NewTimer(0)
|
|
for {
|
|
select {
|
|
case <-cancelCtx.Done():
|
|
c.logger.Info("status ticking shutting down")
|
|
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.clusterAddress,
|
|
}
|
|
repo, err := c.ServersRepoFn()
|
|
if err != nil {
|
|
c.logger.Error("error fetching repository for status update", "error", err)
|
|
} else {
|
|
_, _, err = repo.UpsertServer(cancelCtx, server)
|
|
if err != nil {
|
|
c.logger.Error("error performing status update", "error", err)
|
|
} else {
|
|
c.logger.Trace("controller status successfully saved")
|
|
}
|
|
}
|
|
timer.Reset(statusInterval)
|
|
}
|
|
}
|
|
}()
|
|
}
|
|
|
|
func (c *Controller) startRecoveryNonceCleanupTicking(cancelCtx context.Context) {
|
|
go func() {
|
|
timer := time.NewTimer(0)
|
|
for {
|
|
select {
|
|
case <-cancelCtx.Done():
|
|
c.logger.Info("recovery nonce ticking shutting down")
|
|
return
|
|
|
|
case <-timer.C:
|
|
repo, err := c.ServersRepoFn()
|
|
if err != nil {
|
|
c.logger.Error("error fetching repository for recovery nonce cleanup", "error", err)
|
|
} else {
|
|
nonceCount, err := repo.CleanupNonces(cancelCtx)
|
|
if err != nil {
|
|
c.logger.Error("error performing recovery nonce cleanup", "error", err)
|
|
} else if nonceCount > 0 {
|
|
c.logger.Info("recovery nonce cleanup successful", "nonces_cleaned", nonceCount)
|
|
}
|
|
}
|
|
timer.Reset(RecoveryNonceCleanupInterval)
|
|
}
|
|
}
|
|
}()
|
|
}
|