From 4be4097edd88e3cd1296798c82411c2ee3296eeb Mon Sep 17 00:00:00 2001 From: Nia Weiss Date: Fri, 26 Feb 2021 18:29:01 -0500 Subject: [PATCH] force transactional etcd reads --- etcd/embed.go | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/etcd/embed.go b/etcd/embed.go index 06c081e74..32cdc659a 100644 --- a/etcd/embed.go +++ b/etcd/embed.go @@ -648,16 +648,20 @@ func (e *Etcd) putKey(ctx context.Context, key, val string, opts ...clientv3.OpO func (e *Etcd) getKeyBytes(ctx context.Context, key string) ([]byte, error) { // Get the current value for the key. - kv := e.e.Server.KV() - resp, err := kv.Range([]byte(key), nil, mvcc.RangeOptions{}) + op := clientv3.OpGet(key) + resp, err := e.cli.Txn(ctx).Then(op).Commit() if err != nil { return nil, err } - kvs := resp.KVs - // TODO: consider returning a "key does not exist" error instead of (nil, nil) + kvs := resp.Responses[0].GetResponseRange().Kvs + + if !resp.Succeeded { + return nil, errors.New("tx failed") + } + if len(kvs) == 0 { - return nil, nil + return nil, errors.New("key does not exist") } return kvs[0].Value, nil