Add minimum active size and promote delay.

This commit is contained in:
Ben Johnson
2014-03-10 14:44:04 -06:00
parent c91688315a
commit c0a59b3a27
4 changed files with 19 additions and 13 deletions

View File

@@ -8,8 +8,14 @@ const (
// DefaultActiveSize is the default number of active followers allowed.
DefaultActiveSize = 9
// MinActiveSize is the minimum active size allowed.
MinActiveSize = 3
// DefaultPromoteDelay is the default elapsed time before promotion.
DefaultPromoteDelay = int((30 * time.Minute) / time.Second)
// MinPromoteDelay is the minimum promote delay allowed.
MinPromoteDelay = int((2 * time.Second) / time.Second)
)
// ClusterConfig represents cluster-wide configuration settings.

View File

@@ -158,17 +158,16 @@ func (s *PeerServer) ClusterConfig() *ClusterConfig {
// SetClusterConfig updates the current cluster configuration.
// Adjusting the active size will cause the PeerServer to demote peers or
// promote proxies to match the new size.
func (s *PeerServer) SetClusterConfig(c *ClusterConfig) error {
// Validate configuration.
if c.ActiveSize < 1 {
return etcdErr.NewError(etcdErr.EcodeInvalidActiveSize, "Post", 0)
} else if c.PromoteDelay < 0 {
return etcdErr.NewError(etcdErr.EcodeInvalidPromoteDelay, "Post", 0)
func (s *PeerServer) SetClusterConfig(c *ClusterConfig) {
// Set minimums.
if c.ActiveSize < MinActiveSize {
c.ActiveSize = MinActiveSize
}
if c.PromoteDelay < MinPromoteDelay {
c.PromoteDelay = MinPromoteDelay
}
s.clusterConfig = c
return nil
}
// Helper function to do discovery and return results in expected format

View File

@@ -21,5 +21,6 @@ func (c *SetClusterConfigCommand) CommandName() string {
// Apply updates the cluster configuration.
func (c *SetClusterConfigCommand) Apply(context raft.Context) (interface{}, error) {
ps, _ := context.Server().Context().(*PeerServer)
return nil, ps.SetClusterConfig(c.Config)
ps.SetClusterConfig(c.Config)
return nil, nil
}