diff --git a/cmd/admin-handlers.go b/cmd/admin-handlers.go index 1f5bb15bf..8f943693c 100644 --- a/cmd/admin-handlers.go +++ b/cmd/admin-handlers.go @@ -448,6 +448,12 @@ func (adminAPI adminAPIHandlers) ListUploadsHealHandler(w http.ResponseWriter, r return } + // Check if this setup has an erasure coded backend. + if !globalIsXL { + writeErrorResponse(w, ErrHealNotImplemented, r.URL) + return + } + // Validate query params. vars := r.URL.Query() bucket := vars.Get(string(mgmtBucket)) @@ -531,6 +537,12 @@ func (adminAPI adminAPIHandlers) ListObjectsHealHandler(w http.ResponseWriter, r return } + // Check if this setup has an erasure coded backend. + if !globalIsXL { + writeErrorResponse(w, ErrHealNotImplemented, r.URL) + return + } + // Validate query params. vars := r.URL.Query() bucket, prefix, marker, delimiter, maxKey, adminAPIErr := extractListObjectsHealQuery(vars) @@ -567,6 +579,12 @@ func (adminAPI adminAPIHandlers) ListBucketsHealHandler(w http.ResponseWriter, r return } + // Check if this setup has an erasure coded backend. + if !globalIsXL { + writeErrorResponse(w, ErrHealNotImplemented, r.URL) + return + } + // Get the list buckets to be healed. bucketsInfo, err := objLayer.ListBucketsHeal() if err != nil { @@ -598,6 +616,12 @@ func (adminAPI adminAPIHandlers) HealBucketHandler(w http.ResponseWriter, r *htt return } + // Check if this setup has an erasure coded backend. + if !globalIsXL { + writeErrorResponse(w, ErrHealNotImplemented, r.URL) + return + } + // Validate bucket name and check if it exists. vars := r.URL.Query() bucket := vars.Get(string(mgmtBucket)) @@ -687,6 +711,12 @@ func (adminAPI adminAPIHandlers) HealObjectHandler(w http.ResponseWriter, r *htt return } + // Check if this setup has an erasure coded backend. + if !globalIsXL { + writeErrorResponse(w, ErrHealNotImplemented, r.URL) + return + } + vars := r.URL.Query() bucket := vars.Get(string(mgmtBucket)) object := vars.Get(string(mgmtObject)) @@ -745,6 +775,12 @@ func (adminAPI adminAPIHandlers) HealUploadHandler(w http.ResponseWriter, r *htt return } + // Check if this setup has an erasure coded backend. + if !globalIsXL { + writeErrorResponse(w, ErrHealNotImplemented, r.URL) + return + } + vars := r.URL.Query() bucket := vars.Get(string(mgmtBucket)) object := vars.Get(string(mgmtObject)) @@ -824,7 +860,7 @@ func (adminAPI adminAPIHandlers) HealFormatHandler(w http.ResponseWriter, r *htt // heal-format is only applicable to single node XL and // distributed XL setup. if !globalIsXL { - writeErrorResponse(w, ErrNotImplemented, r.URL) + writeErrorResponse(w, ErrHealNotImplemented, r.URL) return } diff --git a/cmd/api-errors.go b/cmd/api-errors.go index 3f2090436..5bf45e4cd 100644 --- a/cmd/api-errors.go +++ b/cmd/api-errors.go @@ -181,6 +181,7 @@ const ( ErrAdminCredentialsMismatch ErrInsecureClientRequest ErrObjectTampered + ErrHealNotImplemented ) // error code to APIError structure, these fields carry respective @@ -756,6 +757,11 @@ var errorCodeResponse = map[APIErrorCode]APIError{ Description: errObjectTampered.Error(), HTTPStatusCode: http.StatusPartialContent, }, + ErrHealNotImplemented: { + Code: "XMinioHealNotImplemented", + Description: "This server does not implement heal functionality.", + HTTPStatusCode: http.StatusBadRequest, + }, ErrMaximumExpires: { Code: "AuthorizationQueryParametersError", Description: "X-Amz-Expires must be less than a week (in seconds); that is, the given X-Amz-Expires must be less than 604800 seconds",