diff options
| author | Chris Lu <chris.lu@gmail.com> | 2014-03-15 23:03:49 -0700 |
|---|---|---|
| committer | Chris Lu <chris.lu@gmail.com> | 2014-03-15 23:03:49 -0700 |
| commit | 41143b3b78a1021111edc28a27f76ae2529f99a8 (patch) | |
| tree | 5508f149f59363f5bdab3c16a23c02d57d4e310d /go/weed/server.go | |
| parent | fb75fe852c5282cef436329bb0700d4d0e09f511 (diff) | |
| download | seaweedfs-41143b3b78a1021111edc28a27f76ae2529f99a8.tar.xz seaweedfs-41143b3b78a1021111edc28a27f76ae2529f99a8.zip | |
toughen weedfs clustering, adding synchronizing max volume id among
peers in order to avoid the same volume id being assigned twice
1. moving raft.Server to topology
2. adding max volume id command for raft
Diffstat (limited to 'go/weed/server.go')
| -rw-r--r-- | go/weed/server.go | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/go/weed/server.go b/go/weed/server.go index 8b67275e5..6047030df 100644 --- a/go/weed/server.go +++ b/go/weed/server.go @@ -10,6 +10,7 @@ import ( "runtime" "strconv" "strings" + "sync" "time" ) @@ -51,7 +52,7 @@ var ( volumePublicUrl = cmdServer.Flag.String("publicUrl", "", "Publicly accessible <ip|server_name>:<port>") volumeDataFolders = cmdServer.Flag.String("dir", os.TempDir(), "directories to store data files. dir[,dir]...") volumeMaxDataVolumeCounts = cmdServer.Flag.String("max", "7", "maximum numbers of volumes, count[,count]...") - volumePulse = cmdServer.Flag.Int("pulseSeconds", 5, "number of seconds between heartbeats, must be smaller than the master's setting") + volumePulse = cmdServer.Flag.Int("pulseSeconds", 5, "number of seconds between heartbeats") serverWhiteList []string ) @@ -95,6 +96,12 @@ func runServer(cmd *Command, args []string) bool { serverWhiteList = strings.Split(*serverWhiteListOption, ",") } + var raftWaitForMaster sync.WaitGroup + var volumeWait sync.WaitGroup + + raftWaitForMaster.Add(1) + volumeWait.Add(1) + go func() { r := mux.NewRouter() ms := weed_server.NewMasterServer(r, VERSION, *masterPort, *masterMetaFolder, @@ -109,21 +116,25 @@ func runServer(cmd *Command, args []string) bool { } go func() { + raftWaitForMaster.Wait() time.Sleep(100 * time.Millisecond) var peers []string if *serverPeers != "" { peers = strings.Split(*serverPeers, ",") } - raftServer := weed_server.NewRaftServer(r, VERSION, peers, *serverIp+":"+strconv.Itoa(*masterPort), *masterMetaFolder) + raftServer := weed_server.NewRaftServer(r, VERSION, peers, *serverIp+":"+strconv.Itoa(*masterPort), *masterMetaFolder, ms.Topo, *volumePulse) ms.SetRaftServer(raftServer) + volumeWait.Done() }() + raftWaitForMaster.Done() e := masterServer.ListenAndServe() if e != nil { glog.Fatalf("Fail to start master:%s", e) } }() + volumeWait.Wait() time.Sleep(100 * time.Millisecond) r := http.NewServeMux() weed_server.NewVolumeServer(r, VERSION, *serverIp, *volumePort, *volumePublicUrl, folders, maxCounts, |
