From 0404c7fecdd982f1d3c54926daaaf719955db8aa Mon Sep 17 00:00:00 2001 From: sunty <1172534965@qq.com> Date: 星期四, 16 四月 2020 13:54:48 +0800 Subject: [PATCH] go restart unit test --- controllers/swfsControllers.go | 114 ++++++++++++++++++++++++++++++++++++++++----------------- 1 files changed, 80 insertions(+), 34 deletions(-) diff --git a/controllers/swfsControllers.go b/controllers/swfsControllers.go index 2c47473..8f29871 100644 --- a/controllers/swfsControllers.go +++ b/controllers/swfsControllers.go @@ -1,6 +1,7 @@ package controllers import ( + "encoding/json" "fmt" "github.com/gin-gonic/gin" "io/ioutil" @@ -56,7 +57,7 @@ c.BindJSON(&body) role := body.Role if role == "master" { - AsMaster() + AsMaster(role) util.ResponseFormat(c, code.AddSuccess, "鍔犲叆鑺傜偣鎴愬姛") return } else if role == "volume" { @@ -69,7 +70,7 @@ return } } else if role == "master+volume" { - AsMaVo() + AsMaVo(role) util.ResponseFormat(c, code.AddSuccess, "鍔犲叆鑺傜偣鎴愬姛") } else { util.ResponseFormat(c, code.RequestParamError, "閫夋嫨鑺傜偣绫诲瀷閿欒") @@ -78,21 +79,23 @@ } -func AsMaVo() { - AsMaster() - ReplaceLineContentBySearch(StartScriptAsMaVo, Option, config.Server.ScriptPath, StartServerScript) +func AsMaVo(role string) { + AsMaster(role) + ReplaceLineContentBySearch(Option+StartScriptAsMaVo, Option, config.Server.ScriptPath, StartServerScript) } func (sc *SeaweedfsController) RoleOfVolumeToMasterController(c *gin.Context) { - AsMaster() - ReplaceLineContentBySearch(StartScriptAsMaVo, Option, config.Server.ScriptPath, StartServerScript) + AsMaster("master") + ReplaceLineContentBySearch(Option+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] + //fmt.Println("GetLocalStartupItem: ", GetLocalStartupItem(config.Server.ScriptPath, StartServerScript)) + result := strings.Split(GetLocalStartupItem(config.Server.ScriptPath, StartServerScript), "=")[1] + fmt.Println("result: ", result) util.ResponseFormat(c, code.Success, result) } @@ -114,51 +117,83 @@ } //鏇存柊鎵�鏈夎妭鐐圭殑鑴氭湰鍙傛暟 -func UpdateAllNodesScriptArgument(nowPeers []interface{}) { - for _, val := range nowPeers { - ip := val.(string) +func UpdateAllNodesScriptArgument(peersIp []string) { + fmt.Println("寮�濮嬫洿鏂版湰鍦伴厤缃枃浠�") + for _, ip := range peersIp { + fmt.Println("ip: ", ip) url := "http://" + ip + ":7020/node/api-v/swfs/updateSWFSService" - http.Get(url) + fmt.Println("url", url) + resp, _ := http.Get(url) + fmt.Println("鏇存柊杩斿洖鐘舵�侊細", resp.StatusCode) + if resp.StatusCode == 200 { + fmt.Println("璇锋眰瀹屾瘯", resp.StatusCode) + } } } -//璇锋眰浣滀负涓昏妭鐐规搷浣滄祦绋� -func RequestMasterNodesOperation(nowPeers []interface{}) { +//璇锋眰浣滀负褰撳墠瑙掕壊鑺傜偣鎿嶄綔娴佺▼ +func RequestNodesOperation(nowPeers []interface{}, role string) { + peersIp := make([]string, 0) + for _, val := range nowPeers { + peersIp = append(peersIp, strings.Split(val.(string), ":")[0]) + } coreBaseUnit, _ := strconv.Atoi(config.Server.CoreBaseUnit) - UpdateAllNodesScriptArgument(nowPeers) - RestartAllServer(nowPeers, coreBaseUnit) + UpdateAllNodesScriptArgument(peersIp) + replaceContent := "" + if role == "master" { + replaceContent = Option + StartScriptAsMaster + } else if role == "master+volume" { + replaceContent = Option + StartScriptAsMaVo + } + ReplaceLineContentBySearch(replaceContent, Option, config.Server.ScriptPath, StartServerScript) + RestartAllServer(peersIp, coreBaseUnit) } //閲嶅惎鎵�鏈夎妭鐐规湇鍔″苟楠岃瘉 func Restart(ip string, timeOut int) { url := "http://" + ip + ":7020/node/api-v/swfs/restartServer" + var info interface{} httpRes, _ := http.Get(url) defer httpRes.Body.Close() body, _ := ioutil.ReadAll(httpRes.Body) - startupItem := "" + json.Unmarshal(body, &info) + res, ok := info.(map[string]interface{}) + if !ok { + fmt.Println("http response interface can not change map[string]interface{}") + } + startupItem := res["data"].(string) if httpRes.StatusCode == 200 { startupItem = string(body) } tick := time.Tick(1 * time.Second) + fmt.Println("鍑嗗寮�濮嬮獙璇佽妭鐐规湇鍔�") for countdown := timeOut; countdown > 0; countdown-- { - Verification(startupItem, ip) + fmt.Println("绗�", countdown, "娆¢獙璇�") + result := Verification(startupItem, ip) + fmt.Println("绗竴娆¢獙璇乺esult缁撴灉锛�", result) + if result == true { + break + } <-tick } + fmt.Println("楠岃瘉瀹屾瘯") } -func Verification(startupItem string, ip string) { +//楠岃瘉鏈嶅姟鐘舵�� +func Verification(startupItem string, ip string) bool { + resStatu := false switch startupItem { case StartScriptAsVolume: verificationVolumeUrl := "http://" + ip + ":6700" _, volume1Err := http.Get(verificationVolumeUrl) if volume1Err == nil { - break + resStatu = true } case StartScriptAsMaster: verificationMasterUrl := "http://" + ip + ":6333" _, masterErr := http.Get(verificationMasterUrl) if masterErr == nil { - break + resStatu = true } case StartScriptAsMaVo: verificationMasterUrl := "http://" + ip + ":6333" @@ -166,37 +201,45 @@ _, masterErr := http.Get(verificationMasterUrl) _, volume1Err := http.Get(verificationVolumeUrl) if masterErr == nil && volume1Err == nil { - break + resStatu = true } } + return resStatu } //鑾峰彇鏈湴鍚姩椤� func GetLocalStartupItem(scriptPath string, scriptFile string) string { startupItem := GetNowLineContent(scriptPath+"/"+scriptFile, Option) - fmt.Println(startupItem) + fmt.Println("startupItem: ", startupItem) return startupItem } //鏋勫缓閲嶅惎娴佺▼ -func RestartAllServer(nowPeers []interface{}, coreBaseUnit int) { - coreThread := len(nowPeers)/coreBaseUnit + 1 +func RestartAllServer(peersIp []string, coreBaseUnit int) { + fmt.Println("寮�濮嬫瀯寤洪噸鍚祦绋�") + coreThread := len(peersIp)/coreBaseUnit + 1 masterIp := make([]string, 0) timeOut, _ := strconv.Atoi(config.Server.TimeOut) var waitGroup sync.WaitGroup - for i, val := range nowPeers { - ip := val.(string) + fmt.Println("褰撳墠骞惰搴oreThread锛�", coreThread) + for i, ip := range peersIp { + fmt.Println("閲嶅惎褰撳墠缁勬湇鍔�" + ip) if (i+1)%coreThread == 0 { masterIp = append(masterIp, strings.Split(ip, ":")[0]) + fmt.Println("鍔犲叆绗竴缁勫苟寮�濮嬮獙璇佺涓�缁� masterIp: ", masterIp) for i := 0; i < len(masterIp); i++ { + fmt.Println("len masterIp: ", len(masterIp)) + fmt.Println("绗�" + strconv.Itoa(i) + "涓嚎绋�") go Restart(masterIp[i], timeOut) waitGroup.Add(1) //姣忓垱寤轰竴涓猤oroutine锛屽氨鎶婁换鍔¢槦鍒椾腑浠诲姟鐨勬暟閲�+1 } waitGroup.Wait() //.Wait()杩欓噷浼氬彂鐢熼樆濉烇紝鐩村埌闃熷垪涓墍鏈夌殑浠诲姟缁撴潫灏变細瑙i櫎闃诲 + fmt.Println("褰撳墠缁勪换鍔″畬鎴�") masterIp = make([]string, 0) + fmt.Println("娓呯┖褰撳墠缁勬垚鍛橈細", masterIp) } else { masterIp = append(masterIp, strings.Split(ip, ":")[0]) - if len(nowPeers) == i+1 { + if len(peersIp) == i+1 { var waitGroup sync.WaitGroup for i := 0; i < len(masterIp); i++ { go Restart(masterIp[i], timeOut) @@ -207,13 +250,15 @@ break } } - continue + } + fmt.Println("鏈嶅姟娴佺▼鎵ц瀹屾瘯") + } //鑾峰彇鏌ユ壘鍐呭褰撳墠琛屽唴瀹� func GetNowLineContent(filePath string, searchContent string) string { - scriptStr := "cat" + filePath + "| grep " + searchContent + scriptStr := "cat " + filePath + "| grep " + searchContent fmt.Println("scriptStr: ", scriptStr) return strings.Split(util.RunScript(scriptStr), "\n")[0] } @@ -224,17 +269,18 @@ if nowPeers == nil || len(nowPeers) == 0 { return false } - ReplaceLineContentBySearch(StartScriptAsVolume, Option, config.Server.ScriptPath, StartServerScript) + ReplaceLineContentBySearch(Option+StartScriptAsVolume, Option, config.Server.ScriptPath, StartServerScript) ReplaceLineContentBySearch(GetNewPeers(), Peer, config.Server.ScriptPath, StartServerScript) StartServer(config.Server.ScriptPath) return true } //浣滀负涓昏妭鐐瑰姞鍏ワ紙榛樿鍖呭惈鏁版嵁鑺傜偣锛� -func AsMaster() bool { +func AsMaster(role string) bool { AddNewMasterToPeers() nowPeers := GetNowPeersList() - RequestMasterNodesOperation(nowPeers) + fmt.Println("nowPeers: ", nowPeers) + RequestNodesOperation(nowPeers, role) return true } @@ -272,7 +318,7 @@ //鍚戦泦缇ゅ姞鍏ユ柊鐨刴aster func AddNewMasterToPeers() (result bool) { peer := config.Server.EsServerIp + ":6333" - addUrl := "http://" + config.Server.EsServerIp + ":" + config.Server.EsServerPort + "/" + config.BasicFS.IndexName + "/_update_by_query" + addUrl := "http://" + config.Server.EsServerIp + ":" + config.Server.EsServerPort + "/" + config.BasicFS.IndexName + "/_update_by_query?refresh=true" addJson := `{ "script": { "lang": "painless", -- Gitblit v1.8.0