zoukankan      html  css  js  c++  java
  • key.go

    package concurrency

    import (
        "fmt"

        v3 "github.com/coreos/etcd/clientv3"
        "github.com/coreos/etcd/mvcc/mvccpb"
        "golang.org/x/net/context"
    )

    func waitDelete(ctx context.Context, client *v3.Client, key string, rev int64) error {
        cctx, cancel := context.WithCancel(ctx)
        defer cancel()

        var wr v3.WatchResponse
        wch := client.Watch(cctx, key, v3.WithRev(rev))
        for wr = range wch {
            for _, ev := range wr.Events {
                if ev.Type == mvccpb.DELETE {
                    return nil
                }
            }
        }
        if err := wr.Err(); err != nil {
            return err
        }
        if err := ctx.Err(); err != nil {
            return err
        }
        return fmt.Errorf("lost watcher waiting for delete")
    }

    // waitDeletes efficiently waits until all keys matching the prefix and no greater
    // than the create revision.
    func waitDeletes(ctx context.Context, client *v3.Client, pfx string, maxCreateRev int64) error {
        getOpts := append(v3.WithLastCreate(), v3.WithMaxCreateRev(maxCreateRev))
        for {
            resp, err := client.Get(ctx, pfx, getOpts...)
            if err != nil {
                return err
            }
            if len(resp.Kvs) == 0 {
                return nil
            }
            lastKey := string(resp.Kvs[0].Key)
            if err = waitDelete(ctx, client, lastKey, resp.Header.Revision); err != nil {
                return err
            }
        }
    }

  • 相关阅读:
    iOS 打电话 发邮件
    iOS
    varchar(50)能存50个汉字
    CSS 内联元素
    mysql修改用户密码的方法
    PHP error_reporting(0)
    索引数组和关联数组
    ubuntu文件夹右键没有共享选项
    Ubuntu安装samba的问题
    安卓.开发规范(高级)
  • 原文地址:https://www.cnblogs.com/zhangboyu/p/7452710.html
Copyright © 2011-2022 走看看