*: add learner field in endpoint status

Added learner field to endpoint status API.
This commit is contained in:
Jingyi Hu
2019-03-23 20:13:58 -07:00
parent 42acdfcea7
commit 355d0ab2a6
6 changed files with 36 additions and 3 deletions

View File

@@ -693,3 +693,22 @@ func mustDetectDowngrade(lg *zap.Logger, cv *semver.Version) {
}
}
}
// IsLearner returns if the local member is raft learner
func (c *RaftCluster) IsLearner() bool {
c.Lock()
defer c.Unlock()
localMember, ok := c.members[c.localID]
if !ok {
if c.lg != nil {
c.lg.Panic(
"failed to find local ID in cluster members",
zap.String("cluster-id", c.cid.String()),
zap.String("local-member-id", c.localID.String()),
)
} else {
plog.Panicf("failed to find local ID %s in cluster %s", c.localID.String(), c.cid.String())
}
}
return localMember.IsLearner
}

View File

@@ -55,6 +55,10 @@ type AuthGetter interface {
AuthStore() auth.AuthStore
}
type ClusterStatusGetter interface {
IsLearner() bool
}
type maintenanceServer struct {
lg *zap.Logger
rg etcdserver.RaftStatusGetter
@@ -63,10 +67,11 @@ type maintenanceServer struct {
a Alarmer
lt LeaderTransferrer
hdr header
cs ClusterStatusGetter
}
func NewMaintenanceServer(s *etcdserver.EtcdServer) pb.MaintenanceServer {
srv := &maintenanceServer{lg: s.Cfg.Logger, rg: s, kg: s, bg: s, a: s, lt: s, hdr: newHeader(s)}
srv := &maintenanceServer{lg: s.Cfg.Logger, rg: s, kg: s, bg: s, a: s, lt: s, hdr: newHeader(s), cs: s}
return &authMaintenanceServer{srv, s}
}
@@ -179,6 +184,7 @@ func (ms *maintenanceServer) Status(ctx context.Context, ar *pb.StatusRequest) (
RaftTerm: ms.rg.Term(),
DbSize: ms.bg.Backend().Size(),
DbSizeInUse: ms.bg.Backend().SizeInUse(),
IsLearner: ms.cs.IsLearner(),
}
if resp.Leader == raft.None {
resp.Errors = append(resp.Errors, etcdserver.ErrNoLeader.Error())

View File

@@ -2440,3 +2440,8 @@ func (s *EtcdServer) Alarms() []*pb.AlarmMember {
func (s *EtcdServer) Logger() *zap.Logger {
return s.lg
}
// IsLearner returns if the local member is raft learner
func (s *EtcdServer) IsLearner() bool {
return s.cluster.IsLearner()
}