diff --git a/staging/src/k8s.io/apiserver/pkg/storage/etcd3/store.go b/staging/src/k8s.io/apiserver/pkg/storage/etcd3/store.go index a92f27e7514..bd84f2804bb 100644 --- a/staging/src/k8s.io/apiserver/pkg/storage/etcd3/store.go +++ b/staging/src/k8s.io/apiserver/pkg/storage/etcd3/store.go @@ -185,7 +185,7 @@ func (s *store) Create(ctx context.Context, key string, obj, out runtime.Object, func (s *store) Delete(ctx context.Context, key string, out runtime.Object, preconditions *storage.Preconditions, validateDeletion storage.ValidateObjectFunc) error { v, err := conversion.EnforcePtr(out) if err != nil { - panic("unable to convert output object to pointer") + return fmt.Errorf("unable to convert output object to pointer: %v", err) } key = path.Join(s.pathPrefix, key) return s.conditionalDelete(ctx, key, out, v, preconditions, validateDeletion) @@ -241,7 +241,7 @@ func (s *store) GuaranteedUpdate( v, err := conversion.EnforcePtr(out) if err != nil { - panic("unable to convert output object to pointer") + return fmt.Errorf("unable to convert output object to pointer: %v", err) } key = path.Join(s.pathPrefix, key) @@ -371,7 +371,7 @@ func (s *store) GetToList(ctx context.Context, key string, resourceVersion strin } v, err := conversion.EnforcePtr(listPtr) if err != nil || v.Kind() != reflect.Slice { - panic("need ptr to slice") + return fmt.Errorf("need ptr to slice: %v", err) } key = path.Join(s.pathPrefix, key) @@ -476,7 +476,7 @@ func (s *store) List(ctx context.Context, key, resourceVersion string, pred stor } v, err := conversion.EnforcePtr(listPtr) if err != nil || v.Kind() != reflect.Slice { - panic("need ptr to slice") + return fmt.Errorf("need ptr to slice: %v", err) } if s.pathPrefix != "" { @@ -742,7 +742,9 @@ func (s *store) getStateFromObject(obj runtime.Object) (*objState, error) { if err != nil { return nil, err } - s.versioner.UpdateObject(state.obj, uint64(rv)) + if err := s.versioner.UpdateObject(state.obj, uint64(rv)); err != nil { + klog.Errorf("failed to update object version: %v", err) + } return state, nil } @@ -779,14 +781,16 @@ func (s *store) ttlOpts(ctx context.Context, ttl int64) ([]clientv3.OpOption, er // On success, objPtr would be set to the object. func decode(codec runtime.Codec, versioner storage.Versioner, value []byte, objPtr runtime.Object, rev int64) error { if _, err := conversion.EnforcePtr(objPtr); err != nil { - panic("unable to convert output object to pointer") + return fmt.Errorf("unable to convert output object to pointer: %v", err) } _, _, err := codec.Decode(value, nil, objPtr) if err != nil { return err } // being unable to set the version does not prevent the object from being extracted - versioner.UpdateObject(objPtr, uint64(rev)) + if err := versioner.UpdateObject(objPtr, uint64(rev)); err != nil { + klog.Errorf("failed to update object version: %v", err) + } return nil } @@ -797,7 +801,9 @@ func appendListItem(v reflect.Value, data []byte, rev uint64, pred storage.Selec return err } // being unable to set the version does not prevent the object from being extracted - versioner.UpdateObject(obj, rev) + if err := versioner.UpdateObject(obj, rev); err != nil { + klog.Errorf("failed to update object version: %v", err) + } if matched, err := pred.Matches(obj); err == nil && matched { v.Set(reflect.Append(v, reflect.ValueOf(obj).Elem())) }