From 312e5b41fbec126247b13e7f36cc4a5c81d65370 Mon Sep 17 00:00:00 2001 From: Ryan Leung Date: Mon, 6 Mar 2023 10:59:10 +0800 Subject: [PATCH] *: fix member race problem (#6070) ref tikv/pd#5310, ref tikv/pd#6069 Signed-off-by: Ryan Leung Co-authored-by: Ti Chi Robot --- server/grpc_service.go | 12 +++++++++++- server/server.go | 3 +-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/server/grpc_service.go b/server/grpc_service.go index cb3edd4192c..1d34ea4dae2 100644 --- a/server/grpc_service.go +++ b/server/grpc_service.go @@ -99,7 +99,17 @@ func (s *GrpcServer) wrapErrorToHeader(errorType pdpb.ErrorType, message string) func (s *GrpcServer) GetMembers(context.Context, *pdpb.GetMembersRequest) (*pdpb.GetMembersResponse, error) { // Here we purposely do not check the cluster ID because the client does not know the correct cluster ID // at startup and needs to get the cluster ID with the first request (i.e. GetMembers). - members, err := s.Server.GetMembers() + if s.IsClosed() { + return &pdpb.GetMembersResponse{ + Header: &pdpb.ResponseHeader{ + Error: &pdpb.Error{ + Type: pdpb.ErrorType_UNKNOWN, + Message: errs.ErrServerNotStarted.FastGenByArgs().Error(), + }, + }, + }, nil + } + members, err := cluster.GetMembers(s.GetClient()) if err != nil { return &pdpb.GetMembersResponse{ Header: s.wrapErrorToHeader(pdpb.ErrorType_UNKNOWN, err.Error()), diff --git a/server/server.go b/server/server.go index 214fb7d3425..e2a584901de 100644 --- a/server/server.go +++ b/server/server.go @@ -809,8 +809,7 @@ func (s *Server) GetMembers() ([]*pdpb.Member, error) { if s.IsClosed() { return nil, errs.ErrServerNotStarted.FastGenByArgs() } - members, err := cluster.GetMembers(s.GetClient()) - return members, err + return cluster.GetMembers(s.GetClient()) } // GetServiceMiddlewareConfig gets the service middleware config information.