From ee722b2f26835e83e094b28c68eb21dd60d741e3 Mon Sep 17 00:00:00 2001
From: sunty <1172534965@qq.com>
Date: 星期三, 15 四月 2020 11:45:29 +0800
Subject: [PATCH] fix start server

---
 controllers/swfsControllers.go |  122 ++++++++++++++++++++++++++--------------
 1 files changed, 79 insertions(+), 43 deletions(-)

diff --git a/controllers/swfsControllers.go b/controllers/swfsControllers.go
index 95d1a8c..b87376d 100644
--- a/controllers/swfsControllers.go
+++ b/controllers/swfsControllers.go
@@ -3,6 +3,7 @@
 import (
 	"fmt"
 	"github.com/gin-gonic/gin"
+	"io/ioutil"
 	"net/http"
 	"strconv"
 	"strings"
@@ -14,10 +15,19 @@
 )
 
 const (
-	StartServerScript   = "seaweedfs_start.sh"
-	StopServerScript    = "seaweedfs_stop.sh"
-	StartScriptAsVolume = "option=1"
-	StartScriptAsMaster = "option=2"
+	StartServerScript = "seaweedfs_start.sh"
+	StopServerScript  = "seaweedfs_stop.sh"
+	//浣滀负 volume 鍚姩
+	StartScriptAsVolume = "1"
+	//浣滀负 master 鍚姩
+	StartScriptAsMaster = "2"
+	//浣滀负 master + volume 鍚姩
+	StartScriptAsMaVo = "3"
+	//鍚姩椤瑰弬鏁板ご
+	Option = "option="
+	//master鍒楄〃椤瑰弬鏁板ご
+	Peer = "peers="
+	//StartScriptAsFiler	= "option=4"
 )
 
 type SeaweedfsController struct{}
@@ -27,9 +37,8 @@
 }
 
 func (sc *SeaweedfsController) UpdateSWFSServiceController(c *gin.Context) {
-	oldPeers := GetOldPeers(config.Server.ScriptPath, StartServerScript)
-	newPeers := GetNewPeers()
-	UpdatePeers(config.Server.ScriptPath, StartServerScript, oldPeers, newPeers)
+	ReplaceLineContentBySearch(GetNewPeers(), Peer, config.Server.ScriptPath, StartServerScript)
+	util.ResponseFormat(c, code.Success, config.Server.EsServerIp+"鏇存柊鎴愬姛")
 }
 
 // @Security ApiKeyAuth
@@ -59,6 +68,9 @@
 			util.ResponseFormat(c, code.AddClusterInfoErr, "褰撳墠杩樻病鏈変富鑺傜偣")
 			return
 		}
+	} else if role == "master+volume" {
+		AsMaVo()
+		util.ResponseFormat(c, code.AddSuccess, "鍔犲叆鑺傜偣鎴愬姛")
 	} else {
 		util.ResponseFormat(c, code.RequestParamError, "閫夋嫨鑺傜偣绫诲瀷閿欒")
 		return
@@ -66,15 +78,22 @@
 
 }
 
-func (sc *SeaweedfsController) RoleOfVolumeToMasterController(c *gin.Context) {
+func AsMaVo() {
 	AsMaster()
-	ReplaceLineContentBySearch(StartScriptAsMaster, config.Server.ScriptPath, StartServerScript)
+	ReplaceLineContentBySearch(StartScriptAsMaVo, Option, config.Server.ScriptPath, StartServerScript)
 }
 
-func (sc *SeaweedfsController) RestartMasterController(c *gin.Context) {
+func (sc *SeaweedfsController) RoleOfVolumeToMasterController(c *gin.Context) {
+	AsMaster()
+	ReplaceLineContentBySearch(StartScriptAsMaVo, Option, config.Server.ScriptPath, StartServerScript)
+}
+
+func (sc *SeaweedfsController) RestartServerController(c *gin.Context) {
 	StopServer(config.Server.ScriptPath)
 	time.Sleep(time.Second * 1)
 	StartServer(config.Server.ScriptPath)
+	result := strings.Split("=", GetLocalStartupItem(config.Server.ScriptPath, StartServerScript))[1]
+	util.ResponseFormat(c, code.Success, result)
 }
 
 //鍚姩鏈嶅姟
@@ -88,9 +107,9 @@
 }
 
 //鏍规嵁鎼滅储鍐呭鏇挎崲鏁磋鍐呭
-func ReplaceLineContentBySearch(replaceContent string, scriptPath string, scriptFile string) {
-	resContent := GetNowLineContent(scriptPath+"/"+scriptFile, "option=")
-	replaceStr := "sed -ie 's/" + resContent + "/" + replaceContent + "/g' " + scriptPath + "/" + scriptFile
+func ReplaceLineContentBySearch(replaceContent string, searchContent string, scriptPath string, scriptFile string) {
+	resSearchContent := GetNowLineContent(scriptPath+"/"+scriptFile, searchContent)
+	replaceStr := "sed -ie 's/" + resSearchContent + "/" + replaceContent + "/g' " + scriptPath + "/" + scriptFile
 	util.RunScript(replaceStr)
 }
 
@@ -110,23 +129,52 @@
 	RestartAllServer(nowPeers, coreBaseUnit)
 }
 
-//閲嶅惎鍏朵粬鑺傜偣鏈嶅姟骞堕獙璇�
-func RestartServer(ip string, timeOut int) {
-	url := "http://" + ip + ":7020/node/api-v/swfs/restartMaster"
-	http.Get(url)
+//閲嶅惎鎵�鏈夎妭鐐规湇鍔″苟楠岃瘉
+func Restart(ip string, timeOut int) {
+	url := "http://" + ip + ":7020/node/api-v/swfs/restartServer"
+	httpRes, _ := http.Get(url)
+	defer httpRes.Body.Close()
+	body, _ := ioutil.ReadAll(httpRes.Body)
+	startupItem := ""
+	if httpRes.StatusCode == 200 {
+		startupItem = string(body)
+	}
 	tick := time.Tick(1 * time.Second)
 	for countdown := timeOut; countdown > 0; countdown-- {
-		verificationMasterUrl := "http://" + ip + ":6333"
-		verificationVolume1Url := "http://" + ip + ":6700"
-		verificationVolume2Url := "http://" + ip + ":6701"
-		_, masterErr := http.Get(verificationMasterUrl)
-		_, volume1Err := http.Get(verificationVolume1Url)
-		_, volume2Err := http.Get(verificationVolume2Url)
-		if masterErr == nil && volume1Err == nil && volume2Err == nil {
-			break
-		}
+		Verification(startupItem, ip)
 		<-tick
 	}
+}
+
+func Verification(startupItem string, ip string) {
+	switch startupItem {
+	case StartScriptAsVolume:
+		verificationVolumeUrl := "http://" + ip + ":6700"
+		_, volume1Err := http.Get(verificationVolumeUrl)
+		if volume1Err == nil {
+			break
+		}
+	case StartScriptAsMaster:
+		verificationMasterUrl := "http://" + ip + ":6333"
+		_, masterErr := http.Get(verificationMasterUrl)
+		if masterErr == nil {
+			break
+		}
+	case StartScriptAsMaVo:
+		verificationMasterUrl := "http://" + ip + ":6333"
+		verificationVolumeUrl := "http://" + ip + ":6700"
+		_, masterErr := http.Get(verificationMasterUrl)
+		_, volume1Err := http.Get(verificationVolumeUrl)
+		if masterErr == nil && volume1Err == nil {
+			break
+		}
+	}
+}
+
+//鑾峰彇鏈湴鍚姩椤�
+func GetLocalStartupItem(scriptPath string, scriptFile string) string {
+	startupItem := GetNowLineContent(scriptPath+"/"+scriptFile, Option)
+	return startupItem
 }
 
 //鏋勫缓閲嶅惎娴佺▼
@@ -140,7 +188,7 @@
 		if (i+1)%coreThread == 0 {
 			masterIp = append(masterIp, strings.Split(ip, ":")[0])
 			for i := 0; i < len(masterIp); i++ {
-				go RestartServer(masterIp[i], timeOut)
+				go Restart(masterIp[i], timeOut)
 				waitGroup.Add(1) //姣忓垱寤轰竴涓猤oroutine锛屽氨鎶婁换鍔¢槦鍒椾腑浠诲姟鐨勬暟閲�+1
 			}
 			waitGroup.Wait() //.Wait()杩欓噷浼氬彂鐢熼樆濉烇紝鐩村埌闃熷垪涓墍鏈夌殑浠诲姟缁撴潫灏变細瑙i櫎闃诲
@@ -150,7 +198,7 @@
 			if len(nowPeers) == i+1 {
 				var waitGroup sync.WaitGroup
 				for i := 0; i < len(masterIp); i++ {
-					go RestartServer(masterIp[i], timeOut)
+					go Restart(masterIp[i], timeOut)
 					waitGroup.Add(1) //姣忓垱寤轰竴涓猤oroutine锛屽氨鎶婁换鍔¢槦鍒椾腑浠诲姟鐨勬暟閲�+1
 				}
 				waitGroup.Wait() //.Wait()杩欓噷浼氬彂鐢熼樆濉烇紝鐩村埌闃熷垪涓墍鏈夌殑浠诲姟缁撴潫灏变細瑙i櫎闃诲
@@ -160,11 +208,6 @@
 		}
 		continue
 	}
-}
-
-//鑾峰彇鏈湴浠ヤ娇鐢ㄩ泦缇よ〃鍗�
-func GetOldPeers(scriptPath string, scriptFile string) string {
-	return GetNowLineContent(scriptPath+"/"+scriptFile, "peers=")
 }
 
 //鑾峰彇鏌ユ壘鍐呭褰撳墠琛屽唴瀹�
@@ -179,9 +222,8 @@
 	if nowPeers == nil || len(nowPeers) == 0 {
 		return false
 	}
-	UpdatePeers(config.Server.ScriptPath, StartServerScript, GetNewPeers(), GetNewPeers())
-	ReplaceLineContentBySearch(StartScriptAsVolume, config.Server.ScriptPath, StartServerScript)
-	ReplaceLineContentBySearch("peers=", config.Server.ScriptPath, StartServerScript)
+	ReplaceLineContentBySearch(StartScriptAsVolume, Option, config.Server.ScriptPath, StartServerScript)
+	ReplaceLineContentBySearch(GetNewPeers(), Peer, config.Server.ScriptPath, StartServerScript)
 	StartServer(config.Server.ScriptPath)
 	return true
 }
@@ -221,14 +263,8 @@
 //鑾峰彇褰撳墠闆嗙兢鍒楄〃鏍煎紡鍖栦俊鎭�
 func GetNewPeers() string {
 	peers := GetNowPeersList()
-	p := "peers=" + strings.Replace(strings.Trim(fmt.Sprint(peers), "[]"), " ", ",", -1)
+	p := Peer + strings.Replace(strings.Trim(fmt.Sprint(peers), "[]"), " ", ",", -1)
 	return p
-}
-
-//鏇存柊鏈湴闆嗙兢鍒楄〃
-func UpdatePeers(scriptPath string, scriptFile string, oldPeers string, newPeers string) {
-	str := "sed -ie 's/" + oldPeers + "/" + newPeers + "/g' " + scriptPath + "/" + scriptFile
-	util.RunScript(str)
 }
 
 //鍚戦泦缇ゅ姞鍏ユ柊鐨刴aster

--
Gitblit v1.8.0