27 lines
721 B
Go
27 lines
721 B
Go
package autopilot
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/hashicorp/raft"
|
|
)
|
|
|
|
// PromoteStableServers is a basic autopilot promotion policy that promotes any
|
|
// server which has been healthy and stable for the duration specified in the
|
|
// given Autopilot config.
|
|
func PromoteStableServers(autopilotConfig *Config, health OperatorHealthReply, servers []raft.Server) []raft.Server {
|
|
// Find any non-voters eligible for promotion.
|
|
now := time.Now()
|
|
var promotions []raft.Server
|
|
for _, server := range servers {
|
|
if !IsPotentialVoter(server.Suffrage) {
|
|
health := health.ServerHealth(string(server.ID))
|
|
if health.IsStable(now, autopilotConfig) {
|
|
promotions = append(promotions, server)
|
|
}
|
|
}
|
|
}
|
|
|
|
return promotions
|
|
}
|