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

  • 相关阅读:
    int是逻辑炸弹吗?
    悲剧
    下班啦
    Android SDK 2.2 开发环境安装
    MVC
    用于主题检测的临时日志(61d47e0cd5874842a9f56a725c1f25f6 3bfe001a32de4114a6b44005b770f6d7)
    ASP.NET读取XML文件
    asp.net执行顺序
    理解POCO
    乐观中谨慎 招聘调薪现"贫富差距"
  • 原文地址:https://www.cnblogs.com/zhangboyu/p/7452710.html
Copyright © 2011-2022 走看看