mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
*: add learner field in endpoint status
Added learner field to endpoint status API.
This commit is contained in:
parent
42acdfcea7
commit
355d0ab2a6
@ -60,7 +60,7 @@ func newEpStatusCommand() *cobra.Command {
|
||||
Use: "status",
|
||||
Short: "Prints out the status of endpoints specified in `--endpoints` flag",
|
||||
Long: `When --write-out is set to simple, this command prints out comma-separated status lists for each endpoint.
|
||||
The items in the lists are endpoint, ID, version, db size, is leader, raft term, raft index.
|
||||
The items in the lists are endpoint, ID, version, db size, is leader, is learner, raft term, raft index, raft applied index, errors.
|
||||
`,
|
||||
Run: epStatusCommandFunc,
|
||||
}
|
||||
|
@ -194,7 +194,8 @@ func makeEndpointHealthTable(healthList []epHealth) (hdr []string, rows [][]stri
|
||||
}
|
||||
|
||||
func makeEndpointStatusTable(statusList []epStatus) (hdr []string, rows [][]string) {
|
||||
hdr = []string{"endpoint", "ID", "version", "db size", "is leader", "raft term", "raft index", "raft applied index", "errors"}
|
||||
hdr = []string{"endpoint", "ID", "version", "db size", "is leader", "is learner", "raft term",
|
||||
"raft index", "raft applied index", "errors"}
|
||||
for _, status := range statusList {
|
||||
rows = append(rows, []string{
|
||||
status.Ep,
|
||||
@ -202,6 +203,7 @@ func makeEndpointStatusTable(statusList []epStatus) (hdr []string, rows [][]stri
|
||||
status.Resp.Version,
|
||||
humanize.Bytes(uint64(status.Resp.DbSize)),
|
||||
fmt.Sprint(status.Resp.Leader == status.Resp.Header.MemberId),
|
||||
fmt.Sprint(status.Resp.IsLearner),
|
||||
fmt.Sprint(status.Resp.RaftTerm),
|
||||
fmt.Sprint(status.Resp.RaftIndex),
|
||||
fmt.Sprint(status.Resp.RaftAppliedIndex),
|
||||
|
@ -158,6 +158,7 @@ func (p *fieldsPrinter) EndpointStatus(eps []epStatus) {
|
||||
fmt.Printf("\"Version\" : %q\n", ep.Resp.Version)
|
||||
fmt.Println(`"DBSize" :`, ep.Resp.DbSize)
|
||||
fmt.Println(`"Leader" :`, ep.Resp.Leader)
|
||||
fmt.Println(`"IsLearner" :`, ep.Resp.IsLearner)
|
||||
fmt.Println(`"RaftIndex" :`, ep.Resp.RaftIndex)
|
||||
fmt.Println(`"RaftTerm" :`, ep.Resp.RaftTerm)
|
||||
fmt.Println(`"RaftAppliedIndex" :`, ep.Resp.RaftAppliedIndex)
|
||||
|
@ -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
|
||||
}
|
||||
|
@ -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())
|
||||
|
@ -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()
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user