diff --git a/etcdserver/api/v3rpc/maintenance.go b/etcdserver/api/v3rpc/maintenance.go index 2f0a876f0..8f9f6e2d9 100644 --- a/etcdserver/api/v3rpc/maintenance.go +++ b/etcdserver/api/v3rpc/maintenance.go @@ -46,6 +46,10 @@ type Alarmer interface { Alarm(ctx context.Context, ar *pb.AlarmRequest) (*pb.AlarmResponse, error) } +type Downgrader interface { + Downgrade(ctx context.Context, dr *pb.DowngradeRequest) (*pb.DowngradeResponse, error) +} + type LeaderTransferrer interface { MoveLeader(ctx context.Context, lead, target uint64) error } @@ -68,10 +72,11 @@ type maintenanceServer struct { lt LeaderTransferrer hdr header cs ClusterStatusGetter + d Downgrader } 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), cs: s} + srv := &maintenanceServer{lg: s.Cfg.Logger, rg: s, kg: s, bg: s, a: s, lt: s, hdr: newHeader(s), cs: s, d: s} if srv.lg == nil { srv.lg = zap.NewNop() } @@ -201,6 +206,16 @@ func (ms *maintenanceServer) MoveLeader(ctx context.Context, tr *pb.MoveLeaderRe return &pb.MoveLeaderResponse{}, nil } +func (ms *maintenanceServer) Downgrade(ctx context.Context, r *pb.DowngradeRequest) (*pb.DowngradeResponse, error) { + resp, err := ms.d.Downgrade(ctx, r) + if err != nil { + return nil, togRPCError(err) + } + resp.Header = &pb.ResponseHeader{} + ms.hdr.fill(resp.Header) + return resp, nil +} + type authMaintenanceServer struct { *maintenanceServer ag AuthGetter @@ -253,3 +268,7 @@ func (ams *authMaintenanceServer) Status(ctx context.Context, ar *pb.StatusReque func (ams *authMaintenanceServer) MoveLeader(ctx context.Context, tr *pb.MoveLeaderRequest) (*pb.MoveLeaderResponse, error) { return ams.maintenanceServer.MoveLeader(ctx, tr) } + +func (ams *authMaintenanceServer) Downgrade(ctx context.Context, r *pb.DowngradeRequest) (*pb.DowngradeResponse, error) { + return ams.maintenanceServer.Downgrade(ctx, r) +} diff --git a/etcdserver/v3_server.go b/etcdserver/v3_server.go index 0ab87f7dd..b4f976578 100644 --- a/etcdserver/v3_server.go +++ b/etcdserver/v3_server.go @@ -790,5 +790,8 @@ func (s *EtcdServer) AuthInfoFromCtx(ctx context.Context) (*auth.AuthInfo, error } authInfo = s.AuthStore().AuthInfoFromTLS(ctx) return authInfo, nil - +} + +func (s *EtcdServer) Downgrade(ctx context.Context, r *pb.DowngradeRequest) (*pb.DowngradeResponse, error) { + return nil, nil }