sunty
2020-04-16 68ed73b2966171ef16a0b6623a9eb9c2d0968ea5
controllers/swfsControllers.go
@@ -57,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" {
@@ -70,7 +70,7 @@
         return
      }
   } else if role == "master+volume" {
      AsMaVo()
      AsMaVo(role)
      util.ResponseFormat(c, code.AddSuccess, "加入节点成功")
   } else {
      util.ResponseFormat(c, code.RequestParamError, "选择节点类型错误")
@@ -79,13 +79,13 @@
}
func AsMaVo() {
   AsMaster()
func AsMaVo(role string) {
   AsMaster(role)
   ReplaceLineContentBySearch(Option+StartScriptAsMaVo, Option, config.Server.ScriptPath, StartServerScript)
}
func (sc *SeaweedfsController) RoleOfVolumeToMasterController(c *gin.Context) {
   AsMaster()
   AsMaster("master")
   ReplaceLineContentBySearch(Option+StartScriptAsMaVo, Option, config.Server.ScriptPath, StartServerScript)
}
@@ -131,14 +131,21 @@
   }
}
//请求作为主节点操作流程
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(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)
}
@@ -161,7 +168,7 @@
   tick := time.Tick(1 * time.Second)
   fmt.Println("准备开始验证节点服务")
   for countdown := timeOut; countdown > 0; countdown-- {
      fmt.Println("第一次验证")
      fmt.Println("第", countdown, "次验证")
      result := Verification(startupItem, ip)
      fmt.Println("第一次验证result结果:", result)
      if result == true {
@@ -169,6 +176,7 @@
      }
      <-tick
   }
   fmt.Println("验证完毕")
}
//验证服务状态
@@ -215,32 +223,42 @@
   var waitGroup sync.WaitGroup
   fmt.Println("当前并行度coreThread:", coreThread)
   for i, ip := range peersIp {
      fmt.Println("重启第一组服务" + ip)
      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)
            fmt.Println("当前goroutinebe")
            waitGroup.Add(1) //每创建一个goroutine,就把任务队列中任务的数量+1
            fmt.Println("当前goroutineaf")
            go Restart(masterIp[i], timeOut)
            waitGroup.Done()
         }
         fmt.Println("这里为阻塞!!!!!")
         waitGroup.Wait() //.Wait()这里会发生阻塞,直到队列中所有的任务结束就会解除阻塞
         fmt.Println("当前组任务完成")
         masterIp = make([]string, 0)
         fmt.Println("清空当前组成员:", masterIp)
      } else {
         masterIp = append(masterIp, strings.Split(ip, ":")[0])
         if len(peersIp) == i+1 {
            var waitGroup sync.WaitGroup
            for i := 0; i < len(masterIp); i++ {
               go Restart(masterIp[i], timeOut)
               waitGroup.Add(1) //每创建一个goroutine,就把任务队列中任务的数量+1
               go Restart(masterIp[i], timeOut)
               waitGroup.Done()
            }
            waitGroup.Wait() //.Wait()这里会发生阻塞,直到队列中所有的任务结束就会解除阻塞
            masterIp = make([]string, 0)
            break
         }
      }
   }
   fmt.Println("服务流程执行完毕")
}
//获取查找内容当前行内容
@@ -263,11 +281,11 @@
}
//作为主节点加入(默认包含数据节点)
func AsMaster() bool {
func AsMaster(role string) bool {
   AddNewMasterToPeers()
   nowPeers := GetNowPeersList()
   fmt.Println("nowPeers: ", nowPeers)
   RequestMasterNodesOperation(nowPeers)
   RequestNodesOperation(nowPeers, role)
   return true
}