Add raft server access mutex to avoid races (#3503)
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user