本文整理匯總了Golang中github.com/coreos/torus.Ring.Marshal方法的典型用法代碼示例。如果您正苦於以下問題:Golang Ring.Marshal方法的具體用法?Golang Ring.Marshal怎麽用?Golang Ring.Marshal使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在類github.com/coreos/torus.Ring
的用法示例。
在下文中一共展示了Ring.Marshal方法的2個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Golang代碼示例。
示例1: setRing
func setRing(cfg torus.Config, r torus.Ring) error {
client, err := etcdv3.New(etcdv3.Config{Endpoints: []string{cfg.MetadataAddress}, TLS: cfg.TLS})
if err != nil {
return err
}
defer client.Close()
resp, err := client.Get(context.Background(), MkKey("meta", "the-one-ring"))
if err != nil {
return err
}
if len(resp.Kvs) == 0 {
return torus.ErrNoGlobalMetadata
}
oldr, err := ring.Unmarshal(resp.Kvs[0].Value)
if err != nil {
return err
}
if oldr.Version() != r.Version()-1 {
return torus.ErrNonSequentialRing
}
b, err := r.Marshal()
if err != nil {
return err
}
_, err = client.Put(context.Background(), MkKey("meta", "the-one-ring"), string(b))
return err
}
示例2: SetRing
func (c *etcdCtx) SetRing(ring torus.Ring) error {
oldr, etcdver, err := c.getRing()
if err != nil {
return err
}
if oldr.Version() != ring.Version()-1 {
return torus.ErrNonSequentialRing
}
b, err := ring.Marshal()
if err != nil {
return err
}
key := MkKey("meta", "the-one-ring")
txn := c.etcd.Client.Txn(c.getContext()).If(
etcdv3.Compare(etcdv3.Version(key), "=", etcdver),
).Then(
etcdv3.OpPut(key, string(b)),
)
resp, err := txn.Commit()
if err != nil {
return err
}
if resp.Succeeded {
return nil
}
return torus.ErrAgain
}