本文整理匯總了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
}