From ab6f0c0831fc7323fa2cad03cc8b614e0e9bb975 Mon Sep 17 00:00:00 2001 From: Harshavardhana Date: Wed, 7 Apr 2021 22:04:03 -0700 Subject: [PATCH] handle dns.ErrBucketConflict as BucketAlreadyExists --- cmd/api-errors.go | 2 ++ cmd/config/dns/operator_dns.go | 4 ++++ cmd/config/dns/store.go | 10 +++++++++- 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/cmd/api-errors.go b/cmd/api-errors.go index d21a734b2..ec3f506cc 100644 --- a/cmd/api-errors.go +++ b/cmd/api-errors.go @@ -1966,6 +1966,8 @@ func toAPIErrorCode(ctx context.Context, err error) (apiErr APIErrorCode) { apiErr = ErrKeyTooLongError case dns.ErrInvalidBucketName: apiErr = ErrInvalidBucketName + case dns.ErrBucketConflict: + apiErr = ErrBucketAlreadyExists default: var ie, iw int // This work-around is to handle the issue golang/go#30648 diff --git a/cmd/config/dns/operator_dns.go b/cmd/config/dns/operator_dns.go index cdea1da14..1a0c46854 100644 --- a/cmd/config/dns/operator_dns.go +++ b/cmd/config/dns/operator_dns.go @@ -100,6 +100,10 @@ func (c *OperatorDNS) Put(bucket string) error { xhttp.DrainBody(resp.Body) if resp.StatusCode != http.StatusOK { errorString := errorStringBuilder.String() + switch resp.StatusCode { + case http.StatusConflict: + return ErrBucketConflict(Error{bucket, errors.New(errorString)}) + } return newError(bucket, fmt.Errorf("service create for bucket %s, failed with status %s, error %s", bucket, resp.Status, errorString)) } return nil diff --git a/cmd/config/dns/store.go b/cmd/config/dns/store.go index 1a097d1ae..1195f4f27 100644 --- a/cmd/config/dns/store.go +++ b/cmd/config/dns/store.go @@ -26,12 +26,20 @@ type Error struct { type ErrInvalidBucketName Error func (e ErrInvalidBucketName) Error() string { - return "invalid bucket name error: " + e.Err.Error() + return e.Bucket + " invalid bucket name error: " + e.Err.Error() } + func (e Error) Error() string { return "dns related error: " + e.Err.Error() } +// ErrBucketConflict for buckets that already exist +type ErrBucketConflict Error + +func (e ErrBucketConflict) Error() string { + return e.Bucket + " bucket conflict error: " + e.Err.Error() +} + // Store dns record store type Store interface { Put(bucket string) error