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
            }
        }
    }

  • 相关阅读:
    C++ 整型长度的获取 不同的系统
    第二章习题 C++
    输入cin对象的用法
    将Mnist手写数字库转化为图片形式 和标签形式
    寻找图片中数字的轮廓并裁剪 扣取数字
    Linux中的日志功能
    Linux中的系统默认日志
    Linux中进程在前后台的切换
    Linux中的服务管理
    Linux中的流程控制语句
  • 原文地址:https://www.cnblogs.com/zhangboyu/p/7452710.html
Copyright © 2011-2022 走看看