本文整理汇总了Golang中doozer/client.Client类的典型用法代码示例。如果您正苦于以下问题:Golang Client类的具体用法?Golang Client怎么用?Golang Client使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了Client类的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Golang代码示例。
示例1: activate
func activate(st *store.Store, self string, c *client.Client) int64 {
w := store.NewWatch(st, calGlob)
for _, base := range store.Getdir(st, calDir) {
p := calDir + "/" + base
v, rev := st.Get(p)
if rev != store.Dir && v[0] == "" {
seqn, err := c.Set(p, rev, []byte(self))
if err != nil {
log.Println(err)
continue
}
w.Stop()
return seqn
}
}
for ev := range w.C {
// TODO ev.IsEmpty()
if ev.IsSet() && ev.Body == "" {
seqn, err := c.Set(ev.Path, ev.Rev, []byte(self))
if err != nil {
log.Println(err)
continue
}
w.Stop()
return seqn
}
}
return 0
}
开发者ID:vaguer,项目名称:doozer,代码行数:33,代码来源:doozer.go
示例2: activate
func activate(st *store.Store, self string, c *client.Client, cal chan int) {
logger := util.NewLogger("activate")
ch := make(chan store.Event)
st.GetDirAndWatch("/doozer/slot", ch)
for ev := range ch {
// TODO ev.IsEmpty()
if ev.IsSet() && ev.Body == "" {
_, err := c.Set(ev.Path, self, ev.Cas)
if err != nil {
logger.Println(err)
continue
}
close(cal)
close(ch)
}
}
}
开发者ID:andradeandrey,项目名称:doozer,代码行数:17,代码来源:doozer.go
示例3: Main
func Main(clusterName, attachAddr string, udpConn net.PacketConn, listener, webListener net.Listener) {
logger := util.NewLogger("main")
var err os.Error
listenAddr := listener.Addr().String()
outs := make(paxos.ChanPutCloserTo)
cal := make(chan int)
var cl *client.Client
self := util.RandId()
st := store.New()
if attachAddr == "" { // we are the only node in a new cluster
set(st, "/doozer/info/"+self+"/public-addr", listenAddr, store.Missing)
set(st, "/doozer/info/"+self+"/hostname", os.Getenv("HOSTNAME"), store.Missing)
set(st, "/doozer/members/"+self, listenAddr, store.Missing)
set(st, "/doozer/slot/"+"1", self, store.Missing)
set(st, "/doozer/leader", self, store.Missing)
set(st, "/ping", "pong", store.Missing)
close(cal)
cl, err = client.Dial(listenAddr)
if err != nil {
panic(err)
}
} else {
cl, err = client.Dial(attachAddr)
if err != nil {
panic(err)
}
path := "/doozer/info/" + self + "/public-addr"
_, err = cl.Set(path, listenAddr, store.Clobber)
if err != nil {
panic(err)
}
path = "/doozer/info/" + self + "/hostname"
_, err = cl.Set(path, os.Getenv("HOSTNAME"), store.Clobber)
if err != nil {
panic(err)
}
joinSeqn, snap, err := cl.Join(self, listenAddr)
if err != nil {
panic(err)
}
done := make(chan int)
st.Ops <- store.Op{1, snap}
go advanceUntil(cl, done)
go func() {
st.Sync(joinSeqn + alpha)
close(done)
activate(st, self, cl, cal)
}()
// TODO sink needs a way to pick up missing values if there are any
// gaps in its sequence
}
mg := paxos.NewManager(self, alpha, st, outs)
if attachAddr == "" {
// Skip ahead alpha steps so that the registrar can provide a
// meaningful cluster.
n := <-st.Seqns
for i := n + 1; i < n+alpha; i++ {
st.Ops <- store.Op{i, store.Nop}
}
}
go func() {
<-cal
go lock.Clean(st, mg)
go session.Clean(st, mg)
go member.Clean(st, mg)
go gc.Pulse(self, st.Seqns, cl, pulseInterval)
go gc.Clean(st)
}()
sv := &server.Server{udpConn, listenAddr, st, mg, self}
go func() {
cas := store.Missing
for _ = range time.Tick(checkinInterval) {
_, cas, err = cl.Checkin(self, cas)
if err != nil {
logger.Println(err)
}
}
}()
go func() {
err := sv.Serve(listener, cal)
//.........这里部分代码省略.........
开发者ID:andradeandrey,项目名称:doozer,代码行数:101,代码来源:doozer.go
示例4: advanceUntil
func advanceUntil(cl *client.Client, done chan int) {
for _, ok := <-done; !ok; _, ok = <-done {
cl.Noop()
}
}
开发者ID:andradeandrey,项目名称:doozer,代码行数:5,代码来源:doozer.go
示例5: setC
func setC(cl *client.Client, path, body string, rev int64) {
_, err := cl.Set(path, rev, []byte(body))
if err != nil {
panic(err)
}
}
开发者ID:vaguer,项目名称:doozer,代码行数:6,代码来源:doozer.go
示例6: advanceUntil
func advanceUntil(cl *client.Client, ver <-chan int64, done int64) {
for <-ver < done {
cl.Nop()
}
}
开发者ID:vaguer,项目名称:doozer,代码行数:5,代码来源:doozer.go
注:本文中的doozer/client.Client类示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论