aboutsummaryrefslogtreecommitdiff
path: root/weed/server/master_grpc_server_raft.go
diff options
context:
space:
mode:
authorKonstantin Lebedev <9497591+kmlebedev@users.noreply.github.com>2022-04-06 15:23:53 +0500
committerKonstantin Lebedev <9497591+kmlebedev@users.noreply.github.com>2022-04-06 15:23:53 +0500
commit357aa818fe6b8165c2af7bbccbbb7ffa1cd22f3c (patch)
treefc36b68166b6dffc27914b03fb4befd5cfde200b /weed/server/master_grpc_server_raft.go
parentc1aeded2dd871239b63eb271b56b3a3f5a5b4c5c (diff)
downloadseaweedfs-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.go48
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
+}