github.phpd.cn/hashicorp/consul@v1.4.5/agent/consul/autopilot/promotion.go (about)

     1  package autopilot
     2  
     3  import (
     4  	"time"
     5  
     6  	"github.com/hashicorp/raft"
     7  )
     8  
     9  // PromoteStableServers is a basic autopilot promotion policy that promotes any
    10  // server which has been healthy and stable for the duration specified in the
    11  // given Autopilot config.
    12  func PromoteStableServers(autopilotConfig *Config, health OperatorHealthReply, servers []raft.Server) []raft.Server {
    13  	// Find any non-voters eligible for promotion.
    14  	now := time.Now()
    15  	var promotions []raft.Server
    16  	for _, server := range servers {
    17  		if !IsPotentialVoter(server.Suffrage) {
    18  			health := health.ServerHealth(string(server.ID))
    19  			if health.IsStable(now, autopilotConfig) {
    20  				promotions = append(promotions, server)
    21  			}
    22  		}
    23  	}
    24  
    25  	return promotions
    26  }