aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorchrislu <chris.lu@gmail.com>2022-01-12 01:11:25 -0800
committerchrislu <chris.lu@gmail.com>2022-01-12 01:11:25 -0800
commit826a7b307e37299528d7b3b2aa8f374800bd28b6 (patch)
tree351e5654880bc15c96a8a63ab45ec85d68094c92
parentcd1ad88f30419f330af22333e1621b92d3a9b695 (diff)
downloadseaweedfs-826a7b307e37299528d7b3b2aa8f374800bd28b6.tar.xz
seaweedfs-826a7b307e37299528d7b3b2aa8f374800bd28b6.zip
master: remove hard coded filer settings in master.toml
fix https://github.com/chrislusf/seaweedfs/issues/2529
-rw-r--r--weed/command/scaffold/master.toml3
-rw-r--r--weed/server/master_grpc_server_cluster.go23
-rw-r--r--weed/server/master_server.go15
-rw-r--r--weed/shell/commands.go4
4 files changed, 28 insertions, 17 deletions
diff --git a/weed/command/scaffold/master.toml b/weed/command/scaffold/master.toml
index 78a5a6b7c..ff0d90d1d 100644
--- a/weed/command/scaffold/master.toml
+++ b/weed/command/scaffold/master.toml
@@ -19,9 +19,6 @@ scripts = """
"""
sleep_minutes = 17 # sleep minutes between each script execution
-[master.filer]
-default = "localhost:8888" # used by maintenance scripts if the scripts needs to use fs related commands
-
[master.sequencer]
type = "raft" # Choose [raft|snowflake] type for storing the file id sequence
diff --git a/weed/server/master_grpc_server_cluster.go b/weed/server/master_grpc_server_cluster.go
index 4a61d2e29..a5c82627a 100644
--- a/weed/server/master_grpc_server_cluster.go
+++ b/weed/server/master_grpc_server_cluster.go
@@ -2,7 +2,10 @@ package weed_server
import (
"context"
+ "github.com/chrislusf/seaweedfs/weed/cluster"
+ "github.com/chrislusf/seaweedfs/weed/pb"
"github.com/chrislusf/seaweedfs/weed/pb/master_pb"
+ "math/rand"
)
func (ms *MasterServer) ListClusterNodes(ctx context.Context, req *master_pb.ListClusterNodesRequest) (*master_pb.ListClusterNodesResponse, error) {
@@ -12,10 +15,26 @@ func (ms *MasterServer) ListClusterNodes(ctx context.Context, req *master_pb.Lis
for _, node := range clusterNodes {
resp.ClusterNodes = append(resp.ClusterNodes, &master_pb.ListClusterNodesResponse_ClusterNode{
- Address: string(node.Address),
- Version: node.Version,
+ Address: string(node.Address),
+ Version: node.Version,
IsLeader: ms.Cluster.IsOneLeader(node.Address),
})
}
return resp, nil
}
+
+func (ms *MasterServer) GetOneFiler() pb.ServerAddress {
+
+ clusterNodes := ms.Cluster.ListClusterNode(cluster.FilerType)
+
+ var filers []pb.ServerAddress
+ for _, node := range clusterNodes {
+ if ms.Cluster.IsOneLeader(node.Address) {
+ filers = append(filers, node.Address)
+ }
+ }
+ if len(filers) > 0 {
+ return filers[rand.Intn(len(filers))]
+ }
+ return "localhost:8888"
+}
diff --git a/weed/server/master_server.go b/weed/server/master_server.go
index cbc0aa337..3851c4d2a 100644
--- a/weed/server/master_server.go
+++ b/weed/server/master_server.go
@@ -208,7 +208,6 @@ func (ms *MasterServer) proxyToLeader(f http.HandlerFunc) http.HandlerFunc {
}
func (ms *MasterServer) startAdminScripts() {
- var err error
v := util.GetViper()
adminScripts := v.GetString("master.maintenance.scripts")
@@ -220,9 +219,6 @@ func (ms *MasterServer) startAdminScripts() {
v.SetDefault("master.maintenance.sleep_minutes", 17)
sleepMinutes := v.GetInt("master.maintenance.sleep_minutes")
- v.SetDefault("master.filer.default", "localhost:8888")
- filerHostPort := v.GetString("master.filer.default")
-
scriptLines := strings.Split(adminScripts, "\n")
if !strings.Contains(adminScripts, "lock") {
scriptLines = append(append([]string{}, "lock"), scriptLines...)
@@ -235,14 +231,9 @@ func (ms *MasterServer) startAdminScripts() {
shellOptions.GrpcDialOption = security.LoadClientTLS(v, "grpc.master")
shellOptions.Masters = &masterAddress
- shellOptions.FilerAddress = pb.ServerAddress(filerHostPort)
shellOptions.Directory = "/"
- if err != nil {
- glog.V(0).Infof("failed to parse master.filer.default = %s : %v\n", filerHostPort, err)
- return
- }
- commandEnv := shell.NewCommandEnv(shellOptions)
+ commandEnv := shell.NewCommandEnv(&shellOptions)
reg, _ := regexp.Compile(`'.*?'|".*?"|\S+`)
@@ -254,6 +245,10 @@ func (ms *MasterServer) startAdminScripts() {
for {
time.Sleep(time.Duration(sleepMinutes) * time.Minute)
if ms.Topo.IsLeader() {
+ shellOptions.FilerAddress = ms.GetOneFiler()
+ if shellOptions.FilerAddress == "" {
+ continue
+ }
for _, line := range scriptLines {
for _, c := range strings.Split(line, ";") {
processEachCmd(reg, c, commandEnv)
diff --git a/weed/shell/commands.go b/weed/shell/commands.go
index 985f6423b..ec71edee0 100644
--- a/weed/shell/commands.go
+++ b/weed/shell/commands.go
@@ -29,7 +29,7 @@ type ShellOptions struct {
type CommandEnv struct {
env map[string]string
MasterClient *wdclient.MasterClient
- option ShellOptions
+ option *ShellOptions
locker *exclusive_locks.ExclusiveLocker
}
@@ -43,7 +43,7 @@ var (
Commands = []command{}
)
-func NewCommandEnv(options ShellOptions) *CommandEnv {
+func NewCommandEnv(options *ShellOptions) *CommandEnv {
ce := &CommandEnv{
env: make(map[string]string),
MasterClient: wdclient.NewMasterClient(options.GrpcDialOption, pb.AdminShellClient, "", "", pb.ServerAddresses(*options.Masters).ToAddresses()),