From 4bc367c49062d0b67ded98cd6ae68e7a52e4b158 Mon Sep 17 00:00:00 2001 From: Harshavardhana Date: Thu, 8 Dec 2022 11:18:07 -0800 Subject: [PATCH] fix: translate tier add errors properly (#16191) --- cmd/admin-handler-utils.go | 18 ------------------ cmd/tier-handlers.go | 1 + cmd/tier.go | 37 ++++++++++++++++++++++++++++--------- 3 files changed, 29 insertions(+), 27 deletions(-) diff --git a/cmd/admin-handler-utils.go b/cmd/admin-handler-utils.go index 8277bd72c..768a85baa 100644 --- a/cmd/admin-handler-utils.go +++ b/cmd/admin-handler-utils.go @@ -210,24 +210,6 @@ func toAdminAPIErr(ctx context.Context, err error) APIError { Description: err.Error(), HTTPStatusCode: http.StatusBadRequest, } - case errors.Is(err, errTierBackendInUse): - apiErr = APIError{ - Code: "XMinioAdminTierBackendInUse", - Description: err.Error(), - HTTPStatusCode: http.StatusBadRequest, - } - case errors.Is(err, errTierBackendNotEmpty): - apiErr = APIError{ - Code: "XMinioAdminTierBackendNotEmpty", - Description: err.Error(), - HTTPStatusCode: http.StatusBadRequest, - } - case errors.Is(err, errTierInsufficientCreds): - apiErr = APIError{ - Code: "XMinioAdminTierInsufficientCreds", - Description: err.Error(), - HTTPStatusCode: http.StatusBadRequest, - } case errIsTierPermError(err): apiErr = APIError{ Code: "XMinioAdminTierInsufficientPermissions", diff --git a/cmd/tier-handlers.go b/cmd/tier-handlers.go index 7f89a9069..cc222c397 100644 --- a/cmd/tier-handlers.go +++ b/cmd/tier-handlers.go @@ -100,6 +100,7 @@ func (api adminAPIHandlers) AddTierHandler(w http.ResponseWriter, r *http.Reques writeErrorResponseJSON(ctx, w, toAdminAPIErr(ctx, errTierReservedName), r.URL) return } + // Refresh from the disk in case we had missed notifications about edits from peers. if err := globalTierConfigMgr.Reload(ctx, objAPI); err != nil { writeErrorResponseJSON(ctx, w, toAdminAPIErr(ctx, err), r.URL) diff --git a/cmd/tier.go b/cmd/tier.go index 7f42d6fcf..578b2c4df 100644 --- a/cmd/tier.go +++ b/cmd/tier.go @@ -22,8 +22,8 @@ import ( "context" "encoding/base64" "encoding/binary" - "errors" "fmt" + "net/http" "path" "strings" "sync" @@ -37,10 +37,29 @@ import ( //go:generate msgp -file $GOFILE var ( - errTierInsufficientCreds = errors.New("insufficient tier credentials supplied") - errTierBackendInUse = errors.New("remote tier backend already in use") - errTierTypeUnsupported = errors.New("unsupported tier type") - errTierBackendNotEmpty = errors.New("remote tier not empty") + errTierMissingCredentials = AdminError{ + Code: "XMinioAdminTierMissingCredentials", + Message: "Specified remote credentials are empty", + StatusCode: http.StatusForbidden, + } + + errTierBackendInUse = AdminError{ + Code: "XMinioAdminTierBackendInUse", + Message: "Specified remote tier is already in use", + StatusCode: http.StatusConflict, + } + + errTierTypeUnsupported = AdminError{ + Code: "XMinioAdminTierTypeUnsupported", + Message: "Specified tier type is unsupported", + StatusCode: http.StatusBadRequest, + } + + errTierBackendNotEmpty = AdminError{ + Code: "XMinioAdminTierBackendNotEmpty", + Message: "Specified remote backend is not empty", + StatusCode: http.StatusBadRequest, + } ) const ( @@ -185,7 +204,7 @@ func (config *TierConfigMgr) Edit(ctx context.Context, tierName string, creds ma switch tierType { case madmin.S3: if (creds.AccessKey == "" || creds.SecretKey == "") && !creds.AWSRole { - return errTierInsufficientCreds + return errTierMissingCredentials } switch { case creds.AWSRole: @@ -196,18 +215,18 @@ func (config *TierConfigMgr) Edit(ctx context.Context, tierName string, creds ma } case madmin.Azure: if creds.SecretKey == "" { - return errTierInsufficientCreds + return errTierMissingCredentials } cfg.Azure.AccountKey = creds.SecretKey case madmin.GCS: if creds.CredsJSON == nil { - return errTierInsufficientCreds + return errTierMissingCredentials } cfg.GCS.Creds = base64.URLEncoding.EncodeToString(creds.CredsJSON) case madmin.MinIO: if creds.AccessKey == "" || creds.SecretKey == "" { - return errTierInsufficientCreds + return errTierMissingCredentials } cfg.MinIO.AccessKey = creds.AccessKey cfg.MinIO.SecretKey = creds.SecretKey