本文整理汇总了Golang中github.com/yiduoyunQ/sm/sm-svr/swarm.Swarm.PositionGet方法的典型用法代码示例。如果您正苦于以下问题:Golang Swarm.PositionGet方法的具体用法?Golang Swarm.PositionGet怎么用?Golang Swarm.PositionGet使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类github.com/yiduoyunQ/sm/sm-svr/swarm.Swarm
的用法示例。
在下文中一共展示了Swarm.PositionGet方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: voteSl
func voteSl(swm *swarm.Swarm, topology *structs.Topology) (string, error) {
maxMasterLogFileNum := 0
maxReadMasterLogPos := 0
ch := make(chan []interface{})
maxDbName := ""
for k, v := range topology.DataNodeGroup["default"] {
if v.Type == consts.Slave && v.Status == consts.Normal {
dbName := k
go func() {
masterLogFileNum, readMasterLogPos := swm.PositionGet(dbName)
log.WithFields(log.Fields{
"SlaveName": dbName,
"MasterLogFileNum": masterLogFileNum,
"ReadMasterLogPos": readMasterLogPos,
}).Debug("Sl vote")
pos := []interface{}{dbName, masterLogFileNum, readMasterLogPos}
ch <- pos
}()
}
}
for i := 0; i < topology.DataNodeGroupNormalCount["default"]-2; i++ {
pos := <-ch
dbName := pos[0].(string)
masterLogFileNum := pos[1].(int)
readMasterLogPos := pos[2].(int)
if masterLogFileNum > maxMasterLogFileNum {
if readMasterLogPos > maxReadMasterLogPos {
maxMasterLogFileNum = masterLogFileNum
maxReadMasterLogPos = readMasterLogPos
maxDbName = dbName
}
}
}
// all sl unavaliable
if maxDbName == "" {
return "", errors.New(
"when isolate M|Sb, all slave are unavilable for vote, isolate failed and return to hope health check enter sl auto isolate")
}
maxDbInfo := topology.DataNodeGroup["default"][maxDbName]
log.WithFields(log.Fields{
"winer": maxDbName + "(" + maxDbInfo.Ip + ":" + strconv.Itoa(maxDbInfo.Port) + ")",
}).Debug("Sl vote")
return maxDbName, nil
}