本文整理汇总了Golang中github.com/yiduoyunQ/sm/sm-svr/swarm.Swarm.IsDelay方法的典型用法代码示例。如果您正苦于以下问题:Golang Swarm.IsDelay方法的具体用法?Golang Swarm.IsDelay怎么用?Golang Swarm.IsDelay使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类github.com/yiduoyunQ/sm/sm-svr/swarm.Swarm
的用法示例。
在下文中一共展示了Swarm.IsDelay方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: IsolateDB
// no need RLock
func IsolateDB(dbName string, rwMutex *sync.RWMutex, topology *structs.Topology, swm *swarm.Swarm) (error, []string) {
var err error
steps := []string{}
defer func() {
if err != nil && err.Error() != "" {
log.WithFields(log.Fields{
"DbName": dbName,
"err": err.Error(),
}).Error("isolate fail")
} else {
log.WithFields(log.Fields{
"DbName": dbName,
}).Info("isolate success")
}
}()
var isolateType string
for k, v := range topology.DataNodeGroup["default"] {
if k == dbName {
isolateType = v.Type
break
}
}
if isolateType == "" {
err = errors.New("isolate db node not found")
return err, steps
}
btopology, _ := json.MarshalIndent(topology, "", " ")
log.WithFields(log.Fields{
"IsolateDbType": isolateType,
"DbName": dbName,
"topology": string(btopology),
}).Debug("isolate db")
// only m normal ||
// isolate sb && only m sb normal ||
// isolate sl
// no need swarm, update topology and return
if topology.DataNodeGroupNormalCount["default"] == 1 ||
(isolateType == consts.StandBy && topology.DataNodeGroupNormalCount["default"] == 2) ||
isolateType == consts.Slave {
rwMutex.Lock()
topology.DataNodeGroup["default"][dbName].Status = consts.Abnormal
updateVersionAndNormalCount(topology, -1)
rwMutex.Unlock()
steps = append(steps, fmt.Sprintf("Step1. Isolate %s success\n", dbName))
return nil, steps
}
if isolateType == consts.Master {
// 1.sb checkGtidDiff
sbName, sbDbInfo := getStandBy(topology)
err = swm.IsDelay(sbName)
if err != nil {
log.WithFields(log.Fields{
"DbName": sbName,
"err": err.Error(),
}).Warn("Sb delay check fail, continue")
err = nil
}
// 1. end ********************
// m sb normal
// update topology and return
if topology.DataNodeGroupNormalCount["default"] == 2 {
// 3.update topology
_, mDbInfo := getMaster(topology)
rwMutex.Lock()
sbDbInfo.Type = consts.Master // sb -> m
mDbInfo.Type = consts.StandBy // m -> sb
mDbInfo.Status = consts.Abnormal
updateVersionAndNormalCount(topology, -1)
steps = append(steps, fmt.Sprintf("Step1. Isolate %s success\n", dbName))
rwMutex.Unlock()
return nil, steps
// ********************
}
// has normal sl
// 2.vote sb
var maxGtidDbName string
maxGtidDbName, err = voteSl(swm, topology)
if err != nil {
steps = append(steps, fmt.Sprintf("Step2. Vote new Sb fail: %s\n", err.Error()))
return err, steps
}
steps = append(steps, fmt.Sprintf("Step2. Vote new Sb success:%s\n", maxGtidDbName))
// 2. end ********************
// 3.update topology
rwMutex.Lock()
mName, mDbInfo := getMaster(topology)
mDbInfo.Type = consts.Slave // m -> sl
mDbInfo.Status = consts.Abnormal
sbDbInfo.Type = consts.Master // sb -> master
slDbInfo := topology.DataNodeGroup["default"][maxGtidDbName]
slDbInfo.Type = consts.StandBy // maxGtidSl -> sb
//.........这里部分代码省略.........