You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

48 lines
1.6 KiB

  1. package weed_server
  2. import (
  3. "context"
  4. "github.com/chrislusf/seaweedfs/weed/pb/master_pb"
  5. "github.com/hashicorp/raft"
  6. )
  7. func (ms *MasterServer) RaftListClusterServers(ctx context.Context, req *master_pb.RaftListClusterServersRequest) (*master_pb.RaftListClusterServersResponse, error) {
  8. resp := &master_pb.RaftListClusterServersResponse{}
  9. servers := ms.Topo.HashicorpRaft.GetConfiguration().Configuration().Servers
  10. for _, server := range servers {
  11. resp.ClusterServers = append(resp.ClusterServers, &master_pb.RaftListClusterServersResponse_ClusterServers{
  12. Id: string(server.ID),
  13. Address: string(server.Address),
  14. Suffrage: server.Suffrage.String(),
  15. })
  16. }
  17. return resp, nil
  18. }
  19. func (ms *MasterServer) RaftAddServer(ctx context.Context, req *master_pb.RaftAddServerRequest) (*master_pb.RaftAddServerResponse, error) {
  20. resp := &master_pb.RaftAddServerResponse{}
  21. var idxFuture raft.IndexFuture
  22. if req.Voter {
  23. idxFuture = ms.Topo.HashicorpRaft.AddVoter(raft.ServerID(req.Id), raft.ServerAddress(req.Address), 0, 0)
  24. } else {
  25. idxFuture = ms.Topo.HashicorpRaft.AddNonvoter(raft.ServerID(req.Id), raft.ServerAddress(req.Address), 0, 0)
  26. }
  27. if err := idxFuture.Error(); err != nil {
  28. return nil, err
  29. }
  30. return resp, nil
  31. }
  32. func (ms *MasterServer) RaftRemoveServer(ctx context.Context, req *master_pb.RaftRemoveServerRequest) (*master_pb.RaftRemoveServerResponse, error) {
  33. resp := &master_pb.RaftRemoveServerResponse{}
  34. idxFuture := ms.Topo.HashicorpRaft.RemoveServer(raft.ServerID(req.Id), 0, 0)
  35. if err := idxFuture.Error(); err != nil {
  36. return nil, err
  37. }
  38. return resp, nil
  39. }