2019-04-22 21:35:39 +00:00
|
|
|
/*
|
|
|
|
Copyright 2019 The Ceph-CSI Authors.
|
|
|
|
|
|
|
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
|
|
you may not use this file except in compliance with the License.
|
|
|
|
You may obtain a copy of the License at
|
|
|
|
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
|
|
|
|
Unless required by applicable law or agreed to in writing, software
|
|
|
|
distributed under the License is distributed on an "AS IS" BASIS,
|
|
|
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
|
|
See the License for the specific language governing permissions and
|
|
|
|
limitations under the License.
|
|
|
|
*/
|
|
|
|
|
|
|
|
package util
|
|
|
|
|
2020-07-08 23:00:23 +00:00
|
|
|
import (
|
|
|
|
"errors"
|
|
|
|
"fmt"
|
|
|
|
)
|
2019-05-14 19:15:01 +00:00
|
|
|
|
2020-07-08 23:00:23 +00:00
|
|
|
var (
|
|
|
|
// ErrKeyNotFound is returned when requested key in omap is not found.
|
|
|
|
ErrKeyNotFound = errors.New("key not found")
|
|
|
|
// ErrObjectExists is returned when named omap is already present in rados.
|
|
|
|
ErrObjectExists = errors.New("object exists")
|
|
|
|
// ErrObjectNotFound is returned when named omap is not found in rados.
|
|
|
|
ErrObjectNotFound = errors.New("object not found")
|
|
|
|
// ErrSnapNameConflict is generated when a requested CSI snap name already exists on RBD but with
|
|
|
|
// different properties, and hence is in conflict with the passed in CSI volume name.
|
|
|
|
ErrSnapNameConflict = errors.New("snapshot name conflict")
|
|
|
|
// ErrPoolNotFound is returned when pool is not found.
|
|
|
|
ErrPoolNotFound = errors.New("pool not found")
|
|
|
|
)
|
2020-06-30 06:43:24 +00:00
|
|
|
|
2020-07-08 23:00:23 +00:00
|
|
|
type errorPair struct {
|
|
|
|
first error
|
|
|
|
second error
|
2020-04-23 18:27:50 +00:00
|
|
|
}
|
|
|
|
|
2020-07-08 23:00:23 +00:00
|
|
|
func (e errorPair) Error() string {
|
|
|
|
return fmt.Sprintf("%v: %v", e.first, e.second)
|
2020-01-31 08:49:11 +00:00
|
|
|
}
|
|
|
|
|
2020-07-08 23:00:23 +00:00
|
|
|
// Is checks if target error is wrapped in the first error.
|
|
|
|
func (e errorPair) Is(target error) bool {
|
|
|
|
return errors.Is(e.first, target)
|
2020-01-31 08:49:11 +00:00
|
|
|
}
|
2020-05-21 19:58:08 +00:00
|
|
|
|
2020-07-08 23:00:23 +00:00
|
|
|
// Unwrap returns the second error.
|
|
|
|
func (e errorPair) Unwrap() error {
|
|
|
|
return e.second
|
2020-06-30 06:43:24 +00:00
|
|
|
}
|
|
|
|
|
2020-07-08 23:00:23 +00:00
|
|
|
// JoinErrors combines two errors. Of the returned error, Is() follows the first
|
2020-11-24 11:54:29 +00:00
|
|
|
// branch, Unwrap() follows the second branch.
|
2020-07-08 23:00:23 +00:00
|
|
|
func JoinErrors(e1, e2 error) error {
|
|
|
|
return errorPair{e1, e2}
|
2020-05-21 19:58:08 +00:00
|
|
|
}
|