fix: avoid waiting on rebalance metadata (#20392)

rebalance metadata is good to have only,
if it cannot be loaded when starting MinIO
for some reason we can possibly ignore it
and move on and let user start rebalance
again if needed.
This commit is contained in:
Harshavardhana 2024-09-06 06:20:19 -07:00 committed by GitHub
parent a0f9e9f661
commit 64e803b136
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 11 additions and 19 deletions

View File

@ -1,4 +1,4 @@
// Copyright (c) 2015-2023 MinIO, Inc.
// Copyright (c) 2015-2024 MinIO, Inc.
//
// This file is part of MinIO Object Storage stack
//
@ -490,14 +490,11 @@ const (
// in 'pool.bin', this is eventually used for decommissioning the pool.
func (z *erasureServerPools) Init(ctx context.Context) error {
// Load rebalance metadata if present
err := z.loadRebalanceMeta(ctx)
if err != nil {
return fmt.Errorf("failed to load rebalance data: %w", err)
if err := z.loadRebalanceMeta(ctx); err == nil {
// Start rebalance routine if we can reload rebalance metadata.
z.StartRebalance()
}
// Start rebalance routine
z.StartRebalance()
meta := poolMeta{}
if err := meta.load(ctx, z.serverPools[0], z.serverPools); err != nil {
return err

View File

@ -110,19 +110,14 @@ var errRebalanceNotStarted = errors.New("rebalance not started")
func (z *erasureServerPools) loadRebalanceMeta(ctx context.Context) error {
r := &rebalanceMeta{}
err := r.load(ctx, z.serverPools[0])
if err != nil {
if errors.Is(err, errConfigNotFound) {
return nil
}
return err
if err := r.load(ctx, z.serverPools[0]); err == nil {
z.rebalMu.Lock()
z.rebalMeta = r
z.updateRebalanceStats(ctx)
z.rebalMu.Unlock()
} else if !errors.Is(err, errConfigNotFound) {
rebalanceLogIf(ctx, fmt.Errorf("failed to load rebalance metadata, continue to restart rebalance as needed: %w", err))
}
z.rebalMu.Lock()
z.rebalMeta = r
z.updateRebalanceStats(ctx)
z.rebalMu.Unlock()
return nil
}