From fe7bf6cbbce2064d727c8eacb1a1d9fa6d26906c Mon Sep 17 00:00:00 2001 From: Krishnan Parthasarathi Date: Mon, 27 Feb 2023 09:26:26 -0800 Subject: [PATCH] Support tier-add if tier backend not empty (#16715) --- cmd/tier-handlers.go | 8 +++++++- cmd/tier.go | 19 +++++++++++-------- go.mod | 2 -- go.sum | 7 ------- 4 files changed, 18 insertions(+), 18 deletions(-) diff --git a/cmd/tier-handlers.go b/cmd/tier-handlers.go index 9b4354585..813e9cd37 100644 --- a/cmd/tier-handlers.go +++ b/cmd/tier-handlers.go @@ -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 diff --git a/cmd/tier.go b/cmd/tier.go index 578b2c4df..ff73ab291 100644 --- a/cmd/tier.go +++ b/cmd/tier.go @@ -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 diff --git a/go.mod b/go.mod index 0a1332a12..02955e3a2 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,6 @@ require ( github.com/alecthomas/participle v0.7.1 github.com/bcicen/jstream v1.0.1 github.com/beevik/ntp v0.3.0 - github.com/bits-and-blooms/bloom/v3 v3.3.1 github.com/buger/jsonparser v1.1.1 github.com/cespare/xxhash/v2 v2.2.0 github.com/cheggaaa/pb v1.0.29 @@ -106,7 +105,6 @@ require ( github.com/asaskevich/govalidator v0.0.0-20210307081110-f21760c49a8d // indirect github.com/aymanbagabas/go-osc52 v1.2.1 // indirect github.com/beorn7/perks v1.0.1 // indirect - github.com/bits-and-blooms/bitset v1.5.0 // indirect github.com/charmbracelet/bubbles v0.15.0 // indirect github.com/charmbracelet/bubbletea v0.23.2 // indirect github.com/charmbracelet/lipgloss v0.6.0 // indirect diff --git a/go.sum b/go.sum index ea2326f5c..4c57ade20 100644 --- a/go.sum +++ b/go.sum @@ -254,11 +254,6 @@ github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+Ce github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= -github.com/bits-and-blooms/bitset v1.3.1/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA= -github.com/bits-and-blooms/bitset v1.5.0 h1:NpE8frKRLGHIcEzkR+gZhiioW1+WbYV6fKwD6ZIpQT8= -github.com/bits-and-blooms/bitset v1.5.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA= -github.com/bits-and-blooms/bloom/v3 v3.3.1 h1:K2+A19bXT8gJR5mU7y+1yW6hsKfNCjcP2uNfLFKncjQ= -github.com/bits-and-blooms/bloom/v3 v3.3.1/go.mod h1:bhUUknWd5khVbTe4UgMCSiOOVJzr3tMoijSK3WwvW90= github.com/bketelsen/crypt v0.0.4/go.mod h1:aI6NrJ0pMGgvZKL1iVgXLnfIFJtfV+bKCoqOes/6LfM= github.com/buger/jsonparser v1.1.1 h1:2PnMjfWD7wBILjqQbt530v576A/cAbQvEW9gGIpYMUs= github.com/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0= @@ -1040,8 +1035,6 @@ github.com/tklauser/numcpus v0.5.0/go.mod h1:OGzpTxpcIMNGYQdit2BYL1pvk/dSOaJWjKo github.com/tklauser/numcpus v0.6.0 h1:kebhY2Qt+3U6RNK7UqpYNA+tJ23IBEGKkB7JQBfDYms= github.com/tklauser/numcpus v0.6.0/go.mod h1:FEZLMke0lhOUG6w2JadTzp0a+Nl8PF/GFkQ5UVIcaL4= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= -github.com/twmb/murmur3 v1.1.6 h1:mqrRot1BRxm+Yct+vavLMou2/iJt0tNVTTC0QoIjaZg= -github.com/twmb/murmur3 v1.1.6/go.mod h1:Qq/R7NUyOfr65zD+6Q5IHKsJLwP7exErjN6lyyq3OSQ= github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= github.com/unrolled/secure v1.13.0 h1:sdr3Phw2+f8Px8HE5sd1EHdj1aV3yUwed/uZXChLFsk= github.com/unrolled/secure v1.13.0/go.mod h1:BmF5hyM6tXczk3MpQkFf1hpKSRqCyhqcbiQtiAF7+40=