如何通过修订删除etcd中的密钥

问题描述

我想删除etcd中的密钥,而其他人将密钥放入etcd中。所以我想在删除时指定修订。如果密钥版本低于修订版本,则将其删除。否则什么也不做。

// putInfoOp returns a PUT etcd operation for Info.
func putInfoOp(info Info) (clientv3.Op,error) {
    value,err := info.toJSON()
    if err != nil {
        return clientv3.Op{},err
    }
    key := KeyAdapter.Encode(info.A,info.B)
    return clientv3.OpPut(key,value),nil
}

// deleteInfoOp returns a DELETE etcd operation for info.
func deleteInfoOp(info Info) clientv3.Op {
    return clientv3.OpDelete(KeyAdapter.Encode(
        info.A,info.B))
}

// my code
func handleinfo(info Info){
    putop,_ := putInfoOp(info)
    _,rev,err := etcdutil.DoOpsInOneTxnWithRetry(cli,putop)
    
    dosomething()
    
    delOp,_ := deleteInfoOp(Info) // how to delete it with rev?
}

解决方法

根据库文档,仅为get op启用专长

https://github.com/etcd-io/etcd/blob/76e769ce95ca0d4d0e3486712d96956260db04b8/clientv3/op.go#L231

https://github.com/etcd-io/etcd/blob/76e769ce95ca0d4d0e3486712d96956260db04b8/clientv3/op.go#L431-L440