diff options
| author | Konstantin Lebedev <9497591+kmlebedev@users.noreply.github.com> | 2022-04-06 15:23:53 +0500 |
|---|---|---|
| committer | Konstantin Lebedev <9497591+kmlebedev@users.noreply.github.com> | 2022-04-06 15:23:53 +0500 |
| commit | 357aa818fe6b8165c2af7bbccbbb7ffa1cd22f3c (patch) | |
| tree | fc36b68166b6dffc27914b03fb4befd5cfde200b /weed/server/master_grpc_server_raft.go | |
| parent | c1aeded2dd871239b63eb271b56b3a3f5a5b4c5c (diff) | |
| download | seaweedfs-357aa818fe6b8165c2af7bbccbbb7ffa1cd22f3c.tar.xz seaweedfs-357aa818fe6b8165c2af7bbccbbb7ffa1cd22f3c.zip | |
add raft shell cmds
Diffstat (limited to 'weed/server/master_grpc_server_raft.go')
| -rw-r--r-- | weed/server/master_grpc_server_raft.go | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/weed/server/master_grpc_server_raft.go b/weed/server/master_grpc_server_raft.go new file mode 100644 index 000000000..71ab6a1da --- /dev/null +++ b/weed/server/master_grpc_server_raft.go @@ -0,0 +1,48 @@ +package weed_server + +import ( + "context" + "github.com/chrislusf/seaweedfs/weed/pb/master_pb" + "github.com/hashicorp/raft" +) + +func (ms *MasterServer) RaftListClusterServers(ctx context.Context, req *master_pb.RaftListClusterServersRequest) (*master_pb.RaftListClusterServersResponse, error) { + resp := &master_pb.RaftListClusterServersResponse{} + + servers := ms.Topo.HashicorpRaft.GetConfiguration().Configuration().Servers + + for _, server := range servers { + resp.ClusterServers = append(resp.ClusterServers, &master_pb.RaftListClusterServersResponse_ClusterServers{ + Id: string(server.ID), + Address: string(server.Address), + Suffrage: server.Suffrage.String(), + }) + } + return resp, nil +} + +func (ms *MasterServer) RaftAddServer(ctx context.Context, req *master_pb.RaftAddServerRequest) (*master_pb.RaftAddServerResponse, error) { + resp := &master_pb.RaftAddServerResponse{} + + var idxFuture raft.IndexFuture + if req.Voter { + idxFuture = ms.Topo.HashicorpRaft.AddVoter(raft.ServerID(req.Id), raft.ServerAddress(req.Address), 0, 0) + } else { + idxFuture = ms.Topo.HashicorpRaft.AddNonvoter(raft.ServerID(req.Id), raft.ServerAddress(req.Address), 0, 0) + } + + if err := idxFuture.Error(); err != nil { + return nil, err + } + return resp, nil +} + +func (ms *MasterServer) RaftRemoveServer(ctx context.Context, req *master_pb.RaftRemoveServerRequest) (*master_pb.RaftRemoveServerResponse, error) { + resp := &master_pb.RaftRemoveServerResponse{} + + idxFuture := ms.Topo.HashicorpRaft.RemoveServer(raft.ServerID(req.Id), 0, 0) + if err := idxFuture.Error(); err != nil { + return nil, err + } + return resp, nil +} |
