diff --git a/cmd/background-newdisks-heal-ops.go b/cmd/background-newdisks-heal-ops.go index 893601d9a..4c96bc7f1 100644 --- a/cmd/background-newdisks-heal-ops.go +++ b/cmd/background-newdisks-heal-ops.go @@ -386,6 +386,9 @@ var newDiskHealingTimeout = newDynamicTimeout(30*time.Second, 10*time.Second) func healFreshDisk(ctx context.Context, z *erasureServerPools, endpoint Endpoint) error { poolIdx, setIdx := endpoint.PoolIdx, endpoint.SetIdx disk := getStorageViaEndpoint(endpoint) + if disk == nil { + return fmt.Errorf("Unexpected error disk must be initialized by now after formatting: %s", endpoint) + } // Prevent parallel erasure set healing locker := z.NewNSLock(minioMetaBucket, fmt.Sprintf("new-drive-healing/%d/%d", poolIdx, setIdx)) diff --git a/cmd/endpoint.go b/cmd/endpoint.go index 82b17e43b..c0fe711a0 100644 --- a/cmd/endpoint.go +++ b/cmd/endpoint.go @@ -75,6 +75,15 @@ type Endpoint struct { PoolIdx, SetIdx, DiskIdx int } +func (endpoint Endpoint) Equal(ep Endpoint) bool { + if endpoint.IsLocal == ep.IsLocal && endpoint.PoolIdx == ep.PoolIdx && endpoint.SetIdx == ep.SetIdx && endpoint.DiskIdx == ep.DiskIdx { + if endpoint.Path == ep.Path && endpoint.Host == ep.Host { + return true + } + } + return false +} + func (endpoint Endpoint) String() string { if endpoint.Host == "" { return endpoint.Path diff --git a/cmd/storage-rest-server.go b/cmd/storage-rest-server.go index 1f4f4c921..4d064eb1b 100644 --- a/cmd/storage-rest-server.go +++ b/cmd/storage-rest-server.go @@ -78,6 +78,13 @@ var ( func getStorageViaEndpoint(endpoint Endpoint) StorageAPI { globalLocalDrivesMu.RLock() defer globalLocalDrivesMu.RUnlock() + if len(globalLocalSetDrives) == 0 { + for _, drive := range globalLocalDrives { + if drive != nil && drive.Endpoint().Equal(endpoint) { + return drive + } + } + } return globalLocalSetDrives[endpoint.PoolIdx][endpoint.SetIdx][endpoint.DiskIdx] }