本文整理匯總了Golang中github.com/mesos/mesos-go/mesosproto.MasterInfo.Unmarshal方法的典型用法代碼示例。如果您正苦於以下問題:Golang MasterInfo.Unmarshal方法的具體用法?Golang MasterInfo.Unmarshal怎麽用?Golang MasterInfo.Unmarshal使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在類github.com/mesos/mesos-go/mesosproto.MasterInfo
的用法示例。
在下文中一共展示了MasterInfo.Unmarshal方法的1個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Golang代碼示例。
示例1: sync
func (u *mesosUpstream) sync() {
var syncing int32
syncing = atomic.AddInt32(&u.syncing, 1)
if syncing > 1 {
atomic.AddInt32(&u.syncing, -1)
u.syncWg.Wait()
return
}
u.syncWg.Add(1)
defer func() {
u.syncWg.Done()
atomic.AddInt32(&u.syncing, -1)
u.lastSync = time.Now()
}()
var state mesosState
var masterHosts []string
if path, err := url.Parse(u.mesosMaster); err == nil {
switch path.Scheme {
case "zk":
if path.Path == "" || path.Path == "/" {
log.Printf("[ERROR] no path specified for mesos zk lookup \"%s\"", u.mesosMaster)
return
}
zookeeperPath := path.Path
if zookeeperPath[0] != '/' {
zookeeperPath = "/" + zookeeperPath
}
if zoo, _, err := zk.Connect(strings.Split(path.Host, ","), 10*time.Second); err == nil {
defer zoo.Close()
if children, _, err := zoo.Children(zookeeperPath); err == nil {
sort.Strings(children)
for _, child := range children {
if strings.HasPrefix(child, "info_") {
if data, _, err := zoo.Get(zookeeperPath + "/" + child); err == nil {
masterInfo := new(mesosproto.MasterInfo)
if err := masterInfo.Unmarshal(data); err == nil {
masterHosts = []string{fmt.Sprintf("%s:%d", masterInfo.GetHostname(), masterInfo.GetPort())}
break
} else {
log.Printf("[ERROR] parsing mesos master from zookeeper. \"%s\"", err.Error())
return
}
} else {
log.Printf("[ERROR] getting mesos master from zookeeper. \"%s\"", err.Error())
return
}
}
}
} else {
log.Printf("[ERROR] getting mesos masters from zookeeper. \"%s\"", err.Error())
return
}
}
case "http", "https":
masterHosts = strings.Split(path.Host, ",")
default:
log.Printf("[ERROR] unknown scheme in parsing mesos master url \"%s\"", u.mesosMaster)
return
}
} else {
masterHosts = strings.Split(u.mesosMaster, ",")
}
if len(masterHosts) == 0 {
log.Printf("[ERROR] No reachable masters.")
return
}
var masterErr error
for _, host := range masterHosts {
if resp, err := http.Get("http://" + host + "/state.json"); err == nil {
defer resp.Body.Close()
if err := json.NewDecoder(resp.Body).Decode(&state); err == nil {
masterErr = nil
break
} else {
masterErr = err
}
} else {
masterErr = err
}
}
if masterErr != nil {
log.Printf("[ERROR] Failed to reach masters. \"%s\"", masterErr.Error())
return
}
if len(state.Frameworks) == 0 {
log.Println("[WARNING] No frameworks found running.")
return
}
hosts := make(proxy.HostPool, 0, 4)
for _, framework := range state.Frameworks {
if framework.Name == u.framework {
for _, task := range framework.Tasks {
if task.Name == u.taskName && task.State == "TASK_RUNNING" {
host := &proxy.UpstreamHost{
Name: task.SlaveId,
Conns: 0,
//.........這裏部分代碼省略.........