// InterpretDeleteError converts a generic etcd error on a delete // operation into the appropriate API error. func InterpretDeleteError(err error, kind, name string) error { switch { case etcdutil.IsEtcdNotFound(err): return errors.NewNotFound(kind, name) case etcdutil.IsEtcdUnreachable(err): return errors.NewServerTimeout(kind, "delete", 2) // TODO: make configurable or handled at a higher level default: return err } }
// InterpretCreateError converts a generic etcd error on a create // operation into the appropriate API error. func InterpretCreateError(err error, kind, name string) error { switch { case etcdutil.IsEtcdNodeExist(err): return errors.NewAlreadyExists(kind, name) case etcdutil.IsEtcdUnreachable(err): return errors.NewServerTimeout(kind, "create", 2) // TODO: make configurable or handled at a higher level default: return err } }
// InterpretUpdateError converts a generic etcd error on a update // operation into the appropriate API error. func InterpretUpdateError(err error, kind, name string) error { switch { case etcdutil.IsEtcdTestFailed(err), etcdutil.IsEtcdNodeExist(err): return errors.NewConflict(kind, name, err) case etcdutil.IsEtcdUnreachable(err): return errors.NewServerTimeout(kind, "update", 2) // TODO: make configurable or handled at a higher level default: return err } }
func toStorageErr(err error, key string, rv int64) error { if err == nil { return nil } switch { case etcdutil.IsEtcdNotFound(err): return storage.NewKeyNotFoundError(key, rv) case etcdutil.IsEtcdNodeExist(err): return storage.NewKeyExistsError(key, rv) case etcdutil.IsEtcdTestFailed(err): return storage.NewResourceVersionConflictsError(key, rv) case etcdutil.IsEtcdUnreachable(err): return storage.NewUnreachableError(key, rv) default: return err } }
// IsUnreachable returns true if and only if err indicates the server could not be reached. func IsUnreachable(err error) bool { // TODO: add alternate storage error here return etcdutil.IsEtcdUnreachable(err) }