本文整理匯總了Golang中github.com/ngaut/zkhelper.Conn類的典型用法代碼示例。如果您正苦於以下問題:Golang Conn類的具體用法?Golang Conn怎麽用?Golang Conn使用的例子?那麽, 這裏精選的類代碼示例或許可以為您提供幫助。
在下文中一共展示了Conn類的15個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Golang代碼示例。
示例1: ServerGroups
func ServerGroups(coordConn zkhelper.Conn, productName string) ([]*ServerGroup, error) {
var ret []*ServerGroup
root := fmt.Sprintf("/zk/reborn/db_%s/servers", productName)
groups, _, err := coordConn.Children(root)
// if ErrNoNode, we may return an empty slice like ProxyList
if err != nil && !zkhelper.ZkErrorEqual(err, zk.ErrNoNode) {
return nil, errors.Trace(err)
}
// Buggy :X
//zkhelper.ChildrenRecursive(*coordConn, root)
for _, group := range groups {
// parse group_1 => 1
groupId, err := strconv.Atoi(strings.Split(group, "_")[1])
if err != nil {
return nil, errors.Trace(err)
}
g, err := GetGroup(coordConn, productName, groupId)
if err != nil {
return nil, errors.Trace(err)
}
ret = append(ret, g)
}
return ret, nil
}
示例2: WaitForReceiverWithTimeout
func WaitForReceiverWithTimeout(zkConn zkhelper.Conn, productName string, actionZkPath string, proxies []ProxyInfo, timeoutInMs int) error {
if len(proxies) == 0 {
return nil
}
times := 0
proxyIds := make(map[string]struct{})
var offlineProxyIds []string
for _, p := range proxies {
proxyIds[p.Id] = struct{}{}
}
checkTimes := timeoutInMs / 500
// check every 500ms
for times < checkTimes {
if times >= 6 && (times*500)%1000 == 0 {
log.Warning("abnormal waiting time for receivers", actionZkPath, offlineProxyIds)
}
// get confirm ids
nodes, _, err := zkConn.Children(actionZkPath)
if err != nil {
return errors.Trace(err)
}
confirmIds := make(map[string]struct{})
for _, node := range nodes {
id := path.Base(node)
confirmIds[id] = struct{}{}
}
if len(confirmIds) != 0 {
match := true
// check if all proxy have responsed
var notMatchList []string
for id, _ := range proxyIds {
// if proxy id not in confirm ids, means someone didn't response
if _, ok := confirmIds[id]; !ok {
match = false
notMatchList = append(notMatchList, id)
}
}
if match {
return nil
}
offlineProxyIds = notMatchList
}
times += 1
time.Sleep(500 * time.Millisecond)
}
if len(offlineProxyIds) > 0 {
log.Error("proxies didn't responed: ", offlineProxyIds)
}
// set offline proxies
for _, id := range offlineProxyIds {
log.Errorf("mark proxy %s to PROXY_STATE_MARK_OFFLINE", id)
if err := SetProxyStatus(zkConn, productName, id, PROXY_STATE_MARK_OFFLINE); err != nil {
return errors.Trace(err)
}
}
return errors.Trace(ErrReceiverTimeout)
}
示例3: RemoveServer
func (sg *ServerGroup) RemoveServer(coordConn zkhelper.Conn, addr string) error {
coordPath := fmt.Sprintf("/zk/reborn/db_%s/servers/group_%d/%s", sg.ProductName, sg.Id, addr)
data, _, err := coordConn.Get(coordPath)
if err != nil {
return errors.Trace(err)
}
var s Server
err = json.Unmarshal(data, &s)
if err != nil {
return errors.Trace(err)
}
log.Info(s)
if s.Type == SERVER_TYPE_MASTER {
return errors.New("cannot remove master, use promote first")
}
err = coordConn.Delete(coordPath, -1)
if err != nil {
return errors.Trace(err)
}
// update server list
for i := 0; i < len(sg.Servers); i++ {
if sg.Servers[i].Addr == s.Addr {
sg.Servers = append(sg.Servers[:i], sg.Servers[i+1:]...)
break
}
}
// remove slave won't need proxy confirm
err = NewAction(coordConn, sg.ProductName, ACTION_TYPE_SERVER_GROUP_CHANGED, sg, "", false)
return errors.Trace(err)
}
示例4: ServerGroups
func ServerGroups(zkConn zkhelper.Conn, productName string) ([]ServerGroup, error) {
var ret []ServerGroup
root := fmt.Sprintf("/zk/codis/db_%s/servers", productName)
groups, _, err := zkConn.Children(root)
if err != nil {
return nil, errors.Trace(err)
}
// Buggy :X
//zkhelper.ChildrenRecursive(*zkConn, root)
for _, group := range groups {
// parse group_1 => 1
groupId, err := strconv.Atoi(strings.Split(group, "_")[1])
if err != nil {
return nil, errors.Trace(err)
}
g, err := GetGroup(zkConn, productName, groupId)
if err != nil {
return nil, errors.Trace(err)
}
ret = append(ret, *g)
}
return ret, nil
}
示例5: waitForProxyMarkOffline
func waitForProxyMarkOffline(zkConn zkhelper.Conn, proxyName string) {
_, _, c, _ := zkConn.GetW(path.Join(GetProxyPath(productName), proxyName))
<-c
info, _ := GetProxyInfo(zkConn, productName, proxyName)
if info.State == PROXY_STATE_MARK_OFFLINE {
SetProxyStatus(zkConn, productName, proxyName, PROXY_STATE_OFFLINE)
}
}
示例6: GetActionSeqList
func GetActionSeqList(zkConn zkhelper.Conn, productName string) ([]int, error) {
nodes, _, err := zkConn.Children(GetWatchActionPath(productName))
if err != nil {
return nil, errors.Trace(err)
}
return ExtraSeqList(nodes)
}
示例7: GroupExists
func GroupExists(zkConn zkhelper.Conn, productName string, groupId int) (bool, error) {
zkPath := fmt.Sprintf("/zk/codis/db_%s/servers/group_%d", productName, groupId)
exists, _, err := zkConn.Exists(zkPath)
if err != nil {
return false, errors.Trace(err)
}
return exists, nil
}
示例8: releaseDashboardNode
func releaseDashboardNode(conn zkhelper.Conn) {
coordPath := fmt.Sprintf("/zk/reborn/db_%s/dashboard", globalEnv.ProductName())
if exists, _, _ := conn.Exists(coordPath); exists {
log.Info("removing dashboard node")
conn.Delete(coordPath, 0)
}
}
示例9: CreateProxyInfo
func CreateProxyInfo(zkConn zkhelper.Conn, productName string, pi *ProxyInfo) (string, error) {
data, err := json.Marshal(pi)
if err != nil {
return "", errors.Trace(err)
}
dir := GetProxyPath(productName)
zkhelper.CreateRecursive(zkConn, dir, "", 0, zkhelper.DefaultDirACLs())
return zkConn.Create(path.Join(dir, pi.Id), data, zk.FlagEphemeral, zkhelper.DefaultFileACLs())
}
示例10: GetServer
func GetServer(zkConn zkhelper.Conn, zkPath string) (*Server, error) {
data, _, err := zkConn.Get(zkPath)
if err != nil {
return nil, errors.Trace(err)
}
srv := Server{}
if err := json.Unmarshal(data, &srv); err != nil {
return nil, errors.Trace(err)
}
return &srv, nil
}
示例11: waitForProxyMarkOffline
func waitForProxyMarkOffline(coordConn zkhelper.Conn, proxyName string) {
_, _, c, _ := coordConn.GetW(path.Join(GetProxyPath(productName), proxyName))
<-c
// test action need response, if proxy not responsed, then marked offline
info, _ := GetProxyInfo(coordConn, productName, proxyName)
if info.State == PROXY_STATE_MARK_OFFLINE {
SetProxyStatus(coordConn, productName, proxyName, PROXY_STATE_OFFLINE)
}
}
示例12: GetLeader
// GetLeaderAddr gets the leader tso address in zookeeper for outer use.
func GetLeader(conn zkhelper.Conn, rootPath string) (string, error) {
data, _, err := conn.Get(getLeaderPath(rootPath))
if err != nil {
return "", errors.Trace(err)
}
// if err != checkLeaderExists(conn); err != nil {
// return "", errors.Trace(err)
// }
return getLeader(data)
}
示例13: GetSlot
func GetSlot(zkConn zkhelper.Conn, productName string, id int) (*Slot, error) {
zkPath := GetSlotPath(productName, id)
data, _, err := zkConn.Get(zkPath)
if err != nil {
return nil, err
}
slot := Slot{}
if err := json.Unmarshal(data, &slot); err != nil {
return nil, err
}
return &slot, nil
}
示例14: loadTimestamp
func loadTimestamp(conn zkhelper.Conn, rootPath string) (int64, error) {
data, _, err := conn.Get(getTimestampPath(rootPath))
if zkhelper.ZkErrorEqual(err, zk.ErrNoNode) {
return 0, zk.ErrNoNode
} else if err != nil {
return 0, errors.Trace(err)
} else if len(data) != 8 {
return 0, errors.Errorf("invalid timestamp data, must 8 bytes, but %d", len(data))
}
return int64(binary.BigEndian.Uint64(data)), nil
}
示例15: GetActionObject
func GetActionObject(zkConn zkhelper.Conn, productName string, seq int64, act interface{}) error {
data, _, err := zkConn.Get(path.Join(GetWatchActionPath(productName), "action_"+fmt.Sprintf("%0.10d", seq)))
if err != nil {
return errors.Trace(err)
}
if err := json.Unmarshal(data, act); err != nil {
return errors.Trace(err)
}
return nil
}