diff --git a/pkg/kv/kvpb/api.proto b/pkg/kv/kvpb/api.proto index 95c00da51300..e80289834272 100644 --- a/pkg/kv/kvpb/api.proto +++ b/pkg/kv/kvpb/api.proto @@ -3712,6 +3712,14 @@ service TenantSpanConfig { rpc SpanConfigConformance(SpanConfigConformanceRequest) returns (SpanConfigConformanceResponse) {} } +// Cluster service offers RPCs for inter-node communication essential for +// cluster bootstrapping and operation. +service Cluster { + // Join a bootstrapped cluster. If the target node is itself not part of a + // bootstrapped cluster, an appropriate error is returned. + rpc Join (JoinNodeRequest) returns (JoinNodeResponse) {} +} + // Batch and RangeFeed service implemented by nodes for KV API requests. service Internal { rpc Batch (BatchRequest) returns (BatchResponse) {} diff --git a/pkg/server/init.go b/pkg/server/init.go index cdd8fe0764f1..c1b84272a3de 100644 --- a/pkg/server/init.go +++ b/pkg/server/init.go @@ -466,7 +466,10 @@ func (s *initServer) attemptJoinTo( BinaryVersion: &latestVersion, } - initClient := kvpb.NewInternalClient(conn) + var initClient kvpb.RPCClusterClient + if !rpcbase.TODODRPC { + initClient = kvpb.NewGRPCInternalClientAdapter(conn) + } resp, err := initClient.Join(ctx, req) if err != nil { status, ok := grpcstatus.FromError(errors.UnwrapAll(err)) diff --git a/pkg/server/server.go b/pkg/server/server.go index 900cb8bb9d20..8f4701172d74 100644 --- a/pkg/server/server.go +++ b/pkg/server/server.go @@ -995,6 +995,9 @@ func NewServer(cfg Config, stopper *stop.Stopper) (serverctl.ServerStartupInterf if err := kvpb.DRPCRegisterTenantSpanConfig(drpcServer, node); err != nil { return nil, err } + if err := kvpb.DRPCRegisterCluster(drpcServer, node); err != nil { + return nil, err + } kvserver.RegisterPerReplicaServer(grpcServer.Server, node.perReplicaServer) if err := kvserver.DRPCRegisterPerReplica(drpcServer, node.perReplicaServer); err != nil { return nil, err