mirror of
https://github.com/minio/minio.git
synced 2025-05-22 18:11:50 -04:00
reload from drive tier-config when in-memory cache is not found (#19527)
avoid probing tier target while reloading() tier config
This commit is contained in:
parent
a8d601b64a
commit
f65dd3e5a2
@ -721,9 +721,9 @@ func auditTierActions(ctx context.Context, tier string, bytes int64) func(err er
|
|||||||
|
|
||||||
// getTransitionedObjectReader returns a reader from the transitioned tier.
|
// getTransitionedObjectReader returns a reader from the transitioned tier.
|
||||||
func getTransitionedObjectReader(ctx context.Context, bucket, object string, rs *HTTPRangeSpec, h http.Header, oi ObjectInfo, opts ObjectOptions) (gr *GetObjectReader, err error) {
|
func getTransitionedObjectReader(ctx context.Context, bucket, object string, rs *HTTPRangeSpec, h http.Header, oi ObjectInfo, opts ObjectOptions) (gr *GetObjectReader, err error) {
|
||||||
tgtClient, err := globalTierConfigMgr.getDriver(oi.TransitionedObject.Tier)
|
tgtClient, err := globalTierConfigMgr.getDriver(ctx, oi.TransitionedObject.Tier)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("transition storage class not configured")
|
return nil, fmt.Errorf("transition storage class not configured: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn, off, length, err := NewGetObjectReader(rs, oi, opts)
|
fn, off, length, err := NewGetObjectReader(rs, oi, opts)
|
||||||
|
@ -2270,7 +2270,7 @@ func (er erasureObjects) GetObjectTags(ctx context.Context, bucket, object strin
|
|||||||
|
|
||||||
// TransitionObject - transition object content to target tier.
|
// TransitionObject - transition object content to target tier.
|
||||||
func (er erasureObjects) TransitionObject(ctx context.Context, bucket, object string, opts ObjectOptions) error {
|
func (er erasureObjects) TransitionObject(ctx context.Context, bucket, object string, opts ObjectOptions) error {
|
||||||
tgtClient, err := globalTierConfigMgr.getDriver(opts.Transition.Tier)
|
tgtClient, err := globalTierConfigMgr.getDriver(ctx, opts.Transition.Tier)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -143,13 +143,9 @@ type jentry struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func deleteObjectFromRemoteTier(ctx context.Context, objName, rvID, tierName string) error {
|
func deleteObjectFromRemoteTier(ctx context.Context, objName, rvID, tierName string) error {
|
||||||
w, err := globalTierConfigMgr.getDriver(tierName)
|
w, err := globalTierConfigMgr.getDriver(ctx, tierName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
err = w.Remove(ctx, objName, remoteVersionID(rvID))
|
return w.Remove(ctx, objName, remoteVersionID(rvID))
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
22
cmd/tier.go
22
cmd/tier.go
@ -22,6 +22,7 @@ import (
|
|||||||
"context"
|
"context"
|
||||||
"encoding/base64"
|
"encoding/base64"
|
||||||
"encoding/binary"
|
"encoding/binary"
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"math/rand"
|
"math/rand"
|
||||||
"net/http"
|
"net/http"
|
||||||
@ -218,7 +219,7 @@ func (config *TierConfigMgr) Add(ctx context.Context, tier madmin.TierConfig, ig
|
|||||||
return errTierAlreadyExists
|
return errTierAlreadyExists
|
||||||
}
|
}
|
||||||
|
|
||||||
d, err := newWarmBackend(ctx, tier)
|
d, err := newWarmBackend(ctx, tier, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -242,8 +243,11 @@ func (config *TierConfigMgr) Add(ctx context.Context, tier madmin.TierConfig, ig
|
|||||||
|
|
||||||
// Remove removes tier if it is empty.
|
// Remove removes tier if it is empty.
|
||||||
func (config *TierConfigMgr) Remove(ctx context.Context, tier string) error {
|
func (config *TierConfigMgr) Remove(ctx context.Context, tier string) error {
|
||||||
d, err := config.getDriver(tier)
|
d, err := config.getDriver(ctx, tier)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
if errors.Is(err, errTierNotFound) {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if inuse, err := d.InUse(ctx); err != nil {
|
if inuse, err := d.InUse(ctx); err != nil {
|
||||||
@ -261,7 +265,7 @@ func (config *TierConfigMgr) Remove(ctx context.Context, tier string) error {
|
|||||||
// Verify verifies if tier's config is valid by performing all supported
|
// Verify verifies if tier's config is valid by performing all supported
|
||||||
// operations on the corresponding warmbackend.
|
// operations on the corresponding warmbackend.
|
||||||
func (config *TierConfigMgr) Verify(ctx context.Context, tier string) error {
|
func (config *TierConfigMgr) Verify(ctx context.Context, tier string) error {
|
||||||
d, err := config.getDriver(tier)
|
d, err := config.getDriver(ctx, tier)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -358,7 +362,7 @@ func (config *TierConfigMgr) Edit(ctx context.Context, tierName string, creds ma
|
|||||||
cfg.MinIO.SecretKey = creds.SecretKey
|
cfg.MinIO.SecretKey = creds.SecretKey
|
||||||
}
|
}
|
||||||
|
|
||||||
d, err := newWarmBackend(ctx, cfg)
|
d, err := newWarmBackend(ctx, cfg, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -382,7 +386,7 @@ func (config *TierConfigMgr) Bytes() ([]byte, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// getDriver returns a warmBackend interface object initialized with remote tier config matching tierName
|
// getDriver returns a warmBackend interface object initialized with remote tier config matching tierName
|
||||||
func (config *TierConfigMgr) getDriver(tierName string) (d WarmBackend, err error) {
|
func (config *TierConfigMgr) getDriver(ctx context.Context, tierName string) (d WarmBackend, err error) {
|
||||||
config.Lock()
|
config.Lock()
|
||||||
defer config.Unlock()
|
defer config.Unlock()
|
||||||
|
|
||||||
@ -398,7 +402,7 @@ func (config *TierConfigMgr) getDriver(tierName string) (d WarmBackend, err erro
|
|||||||
if !ok {
|
if !ok {
|
||||||
return nil, errTierNotFound
|
return nil, errTierNotFound
|
||||||
}
|
}
|
||||||
d, err = newWarmBackend(context.TODO(), t)
|
d, err = newWarmBackend(ctx, t, false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -462,6 +466,10 @@ func (config *TierConfigMgr) configReader(ctx context.Context) (*PutObjReader, *
|
|||||||
// Reload updates config by reloading remote tier config from config store.
|
// Reload updates config by reloading remote tier config from config store.
|
||||||
func (config *TierConfigMgr) Reload(ctx context.Context, objAPI ObjectLayer) error {
|
func (config *TierConfigMgr) Reload(ctx context.Context, objAPI ObjectLayer) error {
|
||||||
newConfig, err := loadTierConfig(ctx, objAPI)
|
newConfig, err := loadTierConfig(ctx, objAPI)
|
||||||
|
|
||||||
|
config.Lock()
|
||||||
|
defer config.Unlock()
|
||||||
|
|
||||||
switch err {
|
switch err {
|
||||||
case nil:
|
case nil:
|
||||||
break
|
break
|
||||||
@ -474,8 +482,6 @@ func (config *TierConfigMgr) Reload(ctx context.Context, objAPI ObjectLayer) err
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
config.Lock()
|
|
||||||
defer config.Unlock()
|
|
||||||
// Reset drivercache built using current config
|
// Reset drivercache built using current config
|
||||||
for k := range config.drivercache {
|
for k := range config.drivercache {
|
||||||
delete(config.drivercache, k)
|
delete(config.drivercache, k)
|
||||||
|
@ -131,7 +131,7 @@ type remoteVersionID string
|
|||||||
|
|
||||||
// newWarmBackend instantiates the tier type specific WarmBackend, runs
|
// newWarmBackend instantiates the tier type specific WarmBackend, runs
|
||||||
// checkWarmBackend on it.
|
// checkWarmBackend on it.
|
||||||
func newWarmBackend(ctx context.Context, tier madmin.TierConfig) (d WarmBackend, err error) {
|
func newWarmBackend(ctx context.Context, tier madmin.TierConfig, probe bool) (d WarmBackend, err error) {
|
||||||
switch tier.Type {
|
switch tier.Type {
|
||||||
case madmin.S3:
|
case madmin.S3:
|
||||||
d, err = newWarmBackendS3(*tier.S3, tier.Name)
|
d, err = newWarmBackendS3(*tier.S3, tier.Name)
|
||||||
@ -148,9 +148,11 @@ func newWarmBackend(ctx context.Context, tier madmin.TierConfig) (d WarmBackend,
|
|||||||
return nil, errTierTypeUnsupported
|
return nil, errTierTypeUnsupported
|
||||||
}
|
}
|
||||||
|
|
||||||
err = checkWarmBackend(ctx, d)
|
if probe {
|
||||||
if err != nil {
|
if err = checkWarmBackend(ctx, d); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return d, nil
|
return d, nil
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user