Added a new RetryError to indicate the caller to possibly retry
Signed-off-by: Madhu Venugopal <madhu@docker.com>
This commit is contained in:
parent
883fc7bca4
commit
4c4f71e2ac
2 changed files with 30 additions and 1 deletions
|
@ -228,6 +228,12 @@ type MaskableError interface {
|
|||
Maskable()
|
||||
}
|
||||
|
||||
// RetryError is an interface for errors which might get resolved through retry
|
||||
type RetryError interface {
|
||||
// Retry makes implementer into RetryError type
|
||||
Retry()
|
||||
}
|
||||
|
||||
// BadRequestError is an interface for errors originated by a bad request
|
||||
type BadRequestError interface {
|
||||
// BadRequest makes implementer into BadRequestError type
|
||||
|
@ -271,7 +277,7 @@ type InternalError interface {
|
|||
}
|
||||
|
||||
/******************************
|
||||
* Weel-known Error Formatters
|
||||
* Well-known Error Formatters
|
||||
******************************/
|
||||
|
||||
// BadRequestErrorf creates an instance of BadRequestError
|
||||
|
@ -314,6 +320,11 @@ func InternalMaskableErrorf(format string, params ...interface{}) error {
|
|||
return maskInternal(fmt.Sprintf(format, params...))
|
||||
}
|
||||
|
||||
// RetryErrorf creates an instance of RetryError
|
||||
func RetryErrorf(format string, params ...interface{}) error {
|
||||
return retry(fmt.Sprintf(format, params...))
|
||||
}
|
||||
|
||||
/***********************
|
||||
* Internal Error Types
|
||||
***********************/
|
||||
|
@ -377,3 +388,10 @@ func (mnt maskInternal) Error() string {
|
|||
}
|
||||
func (mnt maskInternal) Internal() {}
|
||||
func (mnt maskInternal) Maskable() {}
|
||||
|
||||
type retry string
|
||||
|
||||
func (r retry) Error() string {
|
||||
return string(r)
|
||||
}
|
||||
func (r retry) Retry() {}
|
||||
|
|
|
@ -21,6 +21,17 @@ func TestErrorConstructors(t *testing.T) {
|
|||
t.Fatal(err)
|
||||
}
|
||||
|
||||
err = RetryErrorf("Incy wincy %s went up the spout again", "spider")
|
||||
if err.Error() != "Incy wincy spider went up the spout again" {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if _, ok := err.(RetryError); !ok {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if _, ok := err.(MaskableError); ok {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
err = NotFoundErrorf("Can't find the %s", "keys")
|
||||
if err.Error() != "Can't find the keys" {
|
||||
t.Fatal(err)
|
||||
|
|
Loading…
Reference in a new issue