mirror of
https://github.com/seaweedfs/seaweedfs.git
synced 2025-09-18 19:07:55 +08:00
add raft shell cmds
This commit is contained in:
51
weed/shell/command_raft_cluster_ps.go
Normal file
51
weed/shell/command_raft_cluster_ps.go
Normal file
@@ -0,0 +1,51 @@
|
||||
package shell
|
||||
|
||||
import (
|
||||
"context"
|
||||
"flag"
|
||||
"fmt"
|
||||
"github.com/chrislusf/seaweedfs/weed/pb/master_pb"
|
||||
"io"
|
||||
)
|
||||
|
||||
func init() {
|
||||
Commands = append(Commands, &commandRaftClusterPs{})
|
||||
}
|
||||
|
||||
type commandRaftClusterPs struct {
|
||||
}
|
||||
|
||||
func (c *commandRaftClusterPs) Name() string {
|
||||
return "raft.cluster.ps"
|
||||
}
|
||||
|
||||
func (c *commandRaftClusterPs) Help() string {
|
||||
return `check current raft cluster status
|
||||
|
||||
raft.cluster.ps
|
||||
`
|
||||
}
|
||||
|
||||
func (c *commandRaftClusterPs) Do(args []string, commandEnv *CommandEnv, writer io.Writer) (err error) {
|
||||
|
||||
raftClusterPsCommand := flag.NewFlagSet(c.Name(), flag.ContinueOnError)
|
||||
if err = raftClusterPsCommand.Parse(args); err != nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
err = commandEnv.MasterClient.WithClient(false, func(client master_pb.SeaweedClient) error {
|
||||
resp, err := client.RaftListClusterServers(context.Background(), &master_pb.RaftListClusterServersRequest{})
|
||||
if err != nil {
|
||||
return fmt.Errorf("raft list cluster: %v", err)
|
||||
}
|
||||
fmt.Fprintf(writer, "the raft cluster has %d servers\n", len(resp.ClusterServers))
|
||||
for _, server := range resp.ClusterServers {
|
||||
fmt.Fprintf(writer, " * %s %s (%s)\n", server.Id, server.Address, server.Suffrage)
|
||||
}
|
||||
|
||||
return nil
|
||||
})
|
||||
|
||||
return err
|
||||
|
||||
}
|
59
weed/shell/command_raft_server_add.go
Normal file
59
weed/shell/command_raft_server_add.go
Normal file
@@ -0,0 +1,59 @@
|
||||
package shell
|
||||
|
||||
import (
|
||||
"context"
|
||||
"flag"
|
||||
"fmt"
|
||||
"github.com/chrislusf/seaweedfs/weed/pb/master_pb"
|
||||
"io"
|
||||
)
|
||||
|
||||
func init() {
|
||||
Commands = append(Commands, &commandRaftServerAdd{})
|
||||
}
|
||||
|
||||
type commandRaftServerAdd struct {
|
||||
}
|
||||
|
||||
func (c *commandRaftServerAdd) Name() string {
|
||||
return "raft.server.add"
|
||||
}
|
||||
|
||||
func (c *commandRaftServerAdd) Help() string {
|
||||
return `add a server to the raft cluster
|
||||
|
||||
Example:
|
||||
raft.server.add -id <server_name> -address <server_host:port> -voter
|
||||
`
|
||||
}
|
||||
|
||||
func (c *commandRaftServerAdd) Do(args []string, commandEnv *CommandEnv, writer io.Writer) (err error) {
|
||||
|
||||
raftServerAddCommand := flag.NewFlagSet(c.Name(), flag.ContinueOnError)
|
||||
serverId := raftServerAddCommand.String("id", "", "server id")
|
||||
serverAddress := raftServerAddCommand.String("address", "", "server grpc address")
|
||||
serverVoter := raftServerAddCommand.Bool("voter", true, "assign it a vote")
|
||||
if err = raftServerAddCommand.Parse(args); err != nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
if *serverId == "" || *serverAddress == "" {
|
||||
return fmt.Errorf("empty server id or address")
|
||||
}
|
||||
|
||||
err = commandEnv.MasterClient.WithClient(false, func(client master_pb.SeaweedClient) error {
|
||||
_, err := client.RaftAddServer(context.Background(), &master_pb.RaftAddServerRequest{
|
||||
Id: *serverId,
|
||||
Address: *serverAddress,
|
||||
Voter: *serverVoter,
|
||||
})
|
||||
if err != nil {
|
||||
return fmt.Errorf("raft add server: %v", err)
|
||||
}
|
||||
println("added server", *serverId)
|
||||
return nil
|
||||
})
|
||||
|
||||
return err
|
||||
|
||||
}
|
55
weed/shell/command_raft_server_remove.go
Normal file
55
weed/shell/command_raft_server_remove.go
Normal file
@@ -0,0 +1,55 @@
|
||||
package shell
|
||||
|
||||
import (
|
||||
"context"
|
||||
"flag"
|
||||
"fmt"
|
||||
"github.com/chrislusf/seaweedfs/weed/pb/master_pb"
|
||||
"io"
|
||||
)
|
||||
|
||||
func init() {
|
||||
Commands = append(Commands, &commandRaftServerRemove{})
|
||||
}
|
||||
|
||||
type commandRaftServerRemove struct {
|
||||
}
|
||||
|
||||
func (c *commandRaftServerRemove) Name() string {
|
||||
return "raft.server.remove"
|
||||
}
|
||||
|
||||
func (c *commandRaftServerRemove) Help() string {
|
||||
return `remove a server from the raft cluster
|
||||
|
||||
Example:
|
||||
raft.server.remove -id <server_name>
|
||||
`
|
||||
}
|
||||
|
||||
func (c *commandRaftServerRemove) Do(args []string, commandEnv *CommandEnv, writer io.Writer) (err error) {
|
||||
|
||||
raftServerAddCommand := flag.NewFlagSet(c.Name(), flag.ContinueOnError)
|
||||
serverId := raftServerAddCommand.String("id", "", "server id")
|
||||
if err = raftServerAddCommand.Parse(args); err != nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
if *serverId == "" {
|
||||
return fmt.Errorf("empty server id")
|
||||
}
|
||||
|
||||
err = commandEnv.MasterClient.WithClient(false, func(client master_pb.SeaweedClient) error {
|
||||
_, err := client.RaftRemoveServer(context.Background(), &master_pb.RaftRemoveServerRequest{
|
||||
Id: *serverId,
|
||||
})
|
||||
if err != nil {
|
||||
return fmt.Errorf("raft remove server: %v", err)
|
||||
}
|
||||
println("removed server", *serverId)
|
||||
return nil
|
||||
})
|
||||
|
||||
return err
|
||||
|
||||
}
|
Reference in New Issue
Block a user