// Get implements storage.Interface.Get. func (s *store) Get(ctx context.Context, key string, out runtime.Object, ignoreNotFound bool) error { key = keyWithPrefix(s.pathPrefix, key) getResp, err := s.client.KV.Get(ctx, key, s.getOps...) if err != nil { return err } if len(getResp.Kvs) == 0 { if ignoreNotFound { return runtime.SetZeroValue(out) } return storage.NewKeyNotFoundError(key, 0) } kv := getResp.Kvs[0] return decode(s.codec, s.versioner, kv.Value, out, kv.ModRevision) }
func (s *store) getState(getResp *clientv3.GetResponse, key string, v reflect.Value, ignoreNotFound bool) (*objState, error) { state := &objState{ obj: reflect.New(v.Type()).Interface().(runtime.Object), meta: &storage.ResponseMeta{}, } if len(getResp.Kvs) == 0 { if !ignoreNotFound { return nil, storage.NewKeyNotFoundError(key, 0) } if err := runtime.SetZeroValue(state.obj); err != nil { return nil, err } } else { state.rev = getResp.Kvs[0].ModRevision state.meta.ResourceVersion = uint64(state.rev) state.data = getResp.Kvs[0].Value if err := decode(s.codec, s.versioner, state.data, state.obj, state.rev); err != nil { return nil, err } } return state, nil }