Support tier-add if tier backend not empty (#16715)

This commit is contained in:
Krishnan Parthasarathi
2023-02-27 09:26:26 -08:00
committed by GitHub
parent 8b4eb2304b
commit fe7bf6cbbc
4 changed files with 18 additions and 18 deletions

View File

@@ -21,6 +21,7 @@ import (
"encoding/json"
"io"
"net/http"
"strconv"
jsoniter "github.com/json-iterator/go"
"github.com/minio/madmin-go/v2"
@@ -94,6 +95,11 @@ func (api adminAPIHandlers) AddTierHandler(w http.ResponseWriter, r *http.Reques
return
}
var ignoreInUse bool
if forceStr := r.Form.Get("force"); forceStr != "" {
ignoreInUse, _ = strconv.ParseBool(forceStr)
}
// Disallow remote tiers with internal storage class names
switch cfg.Name {
case storageclass.STANDARD, storageclass.RRS:
@@ -107,7 +113,7 @@ func (api adminAPIHandlers) AddTierHandler(w http.ResponseWriter, r *http.Reques
return
}
err = globalTierConfigMgr.Add(ctx, cfg)
err = globalTierConfigMgr.Add(ctx, cfg, ignoreInUse)
if err != nil {
writeErrorResponseJSON(ctx, w, toAdminAPIErr(ctx, err), r.URL)
return

View File

@@ -103,7 +103,7 @@ func (config *TierConfigMgr) isTierNameInUse(tierName string) (madmin.TierType,
}
// Add adds tier to config if it passes all validations.
func (config *TierConfigMgr) Add(ctx context.Context, tier madmin.TierConfig) error {
func (config *TierConfigMgr) Add(ctx context.Context, tier madmin.TierConfig, ignoreInUse bool) error {
config.Lock()
defer config.Unlock()
@@ -122,13 +122,16 @@ func (config *TierConfigMgr) Add(ctx context.Context, tier madmin.TierConfig) er
if err != nil {
return err
}
// Check if warmbackend is in use by other MinIO tenants
inUse, err := d.InUse(ctx)
if err != nil {
return err
}
if inUse {
return errTierBackendInUse
if !ignoreInUse {
// Check if warmbackend is in use by other MinIO tenants
inUse, err := d.InUse(ctx)
if err != nil {
return err
}
if inUse {
return errTierBackendInUse
}
}
config.Tiers[tierName] = tier