API для поиска ключа в кластере etcd - PullRequest
0 голосов
/ 26 марта 2019

Я пытаюсь написать код, в котором мне нужно найти ключ существует в etcd или нет. Я попробовал это:

_, err = kapi.Get(context.Background(), key, nil)
        if err != nil {
          return err      
        } else { ...

Но даже если ключ отсутствует в кластере, ошибка всегда равна nil.

Есть идеи, что я здесь не так делаю? Или есть еще какой-нибудь вызов API?

1 Ответ

1 голос
/ 26 марта 2019

Если вы используете Go-клиент v3 KV клиент здесь: https://godoc.org/go.etcd.io/etcd/clientv3#KV

Возвращает следующий тип: https://godoc.org/go.etcd.io/etcd/etcdserver/etcdserverpb#RangeResponse

type RangeResponse struct {
    Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"`
    // kvs is the list of key-value pairs matched by the range request.
    // kvs is empty when count is requested.
    Kvs []*mvccpb.KeyValue `protobuf:"bytes,2,rep,name=kvs" json:"kvs,omitempty"`
    // more indicates if there are more keys to return in the requested range.
    More bool `protobuf:"varint,3,opt,name=more,proto3" json:"more,omitempty"`
    // count is set to the number of keys within the range when requested.
    Count int64 `protobuf:"varint,4,opt,name=count,proto3" json:"count,omitempty"`
}

Итак, как вы видите, есть свойство Count и свойство Kvs, если вы хотите проверить, что ваш ответ содержит ключи, вы можете просто проверить, что Count > 0 или len(res.Kvs) > 0

...