Remove panic in storage and add log

Signed-off-by: caohe <caohe9603@gmail.com>
This commit is contained in:
caohe 2019-07-06 17:01:20 +08:00
parent 0304cda3e3
commit 99365063ba

View File

@ -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 { func (s *store) Delete(ctx context.Context, key string, out runtime.Object, preconditions *storage.Preconditions, validateDeletion storage.ValidateObjectFunc) error {
v, err := conversion.EnforcePtr(out) v, err := conversion.EnforcePtr(out)
if err != nil { 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) key = path.Join(s.pathPrefix, key)
return s.conditionalDelete(ctx, key, out, v, preconditions, validateDeletion) return s.conditionalDelete(ctx, key, out, v, preconditions, validateDeletion)
@ -241,7 +241,7 @@ func (s *store) GuaranteedUpdate(
v, err := conversion.EnforcePtr(out) v, err := conversion.EnforcePtr(out)
if err != nil { 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) 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) v, err := conversion.EnforcePtr(listPtr)
if err != nil || v.Kind() != reflect.Slice { 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) 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) v, err := conversion.EnforcePtr(listPtr)
if err != nil || v.Kind() != reflect.Slice { if err != nil || v.Kind() != reflect.Slice {
panic("need ptr to slice") return fmt.Errorf("need ptr to slice: %v", err)
} }
if s.pathPrefix != "" { if s.pathPrefix != "" {
@ -742,7 +742,9 @@ func (s *store) getStateFromObject(obj runtime.Object) (*objState, error) {
if err != nil { if err != nil {
return nil, err 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 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. // 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 { func decode(codec runtime.Codec, versioner storage.Versioner, value []byte, objPtr runtime.Object, rev int64) error {
if _, err := conversion.EnforcePtr(objPtr); err != nil { 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) _, _, err := codec.Decode(value, nil, objPtr)
if err != nil { if err != nil {
return err return err
} }
// being unable to set the version does not prevent the object from being extracted // 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 return nil
} }
@ -797,7 +801,9 @@ func appendListItem(v reflect.Value, data []byte, rev uint64, pred storage.Selec
return err return err
} }
// being unable to set the version does not prevent the object from being extracted // 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 { if matched, err := pred.Matches(obj); err == nil && matched {
v.Set(reflect.Append(v, reflect.ValueOf(obj).Elem())) v.Set(reflect.Append(v, reflect.ValueOf(obj).Elem()))
} }