aboutsummaryrefslogtreecommitdiff
path: root/weed/server/master_grpc_server_raft.go
diff options
context:
space:
mode:
Diffstat (limited to 'weed/server/master_grpc_server_raft.go')
-rw-r--r--weed/server/master_grpc_server_raft.go11
1 files changed, 11 insertions, 0 deletions
diff --git a/weed/server/master_grpc_server_raft.go b/weed/server/master_grpc_server_raft.go
index 45a6c7a7e..7f8ad70df 100644
--- a/weed/server/master_grpc_server_raft.go
+++ b/weed/server/master_grpc_server_raft.go
@@ -3,7 +3,9 @@ package weed_server
import (
"context"
"fmt"
+
"github.com/hashicorp/raft"
+
"github.com/seaweedfs/seaweedfs/weed/cluster"
"github.com/seaweedfs/seaweedfs/weed/pb/master_pb"
)
@@ -11,11 +13,14 @@ import (
func (ms *MasterServer) RaftListClusterServers(ctx context.Context, req *master_pb.RaftListClusterServersRequest) (*master_pb.RaftListClusterServersResponse, error) {
resp := &master_pb.RaftListClusterServersResponse{}
+ ms.Topo.RaftServerAccessLock.RLock()
if ms.Topo.HashicorpRaft == nil {
+ ms.Topo.RaftServerAccessLock.RUnlock()
return resp, nil
}
servers := ms.Topo.HashicorpRaft.GetConfiguration().Configuration().Servers
+ ms.Topo.RaftServerAccessLock.RUnlock()
for _, server := range servers {
resp.ClusterServers = append(resp.ClusterServers, &master_pb.RaftListClusterServersResponse_ClusterServers{
@@ -30,6 +35,9 @@ func (ms *MasterServer) RaftListClusterServers(ctx context.Context, req *master_
func (ms *MasterServer) RaftAddServer(ctx context.Context, req *master_pb.RaftAddServerRequest) (*master_pb.RaftAddServerResponse, error) {
resp := &master_pb.RaftAddServerResponse{}
+ ms.Topo.RaftServerAccessLock.RLock()
+ defer ms.Topo.RaftServerAccessLock.RUnlock()
+
if ms.Topo.HashicorpRaft == nil {
return resp, nil
}
@@ -54,6 +62,9 @@ func (ms *MasterServer) RaftAddServer(ctx context.Context, req *master_pb.RaftAd
func (ms *MasterServer) RaftRemoveServer(ctx context.Context, req *master_pb.RaftRemoveServerRequest) (*master_pb.RaftRemoveServerResponse, error) {
resp := &master_pb.RaftRemoveServerResponse{}
+ ms.Topo.RaftServerAccessLock.RLock()
+ defer ms.Topo.RaftServerAccessLock.RUnlock()
+
if ms.Topo.HashicorpRaft == nil {
return resp, nil
}