From 93a9078b239fba8abb08294fb759ec34e669a53d Mon Sep 17 00:00:00 2001 From: Krishnan Parthasarathi Date: Tue, 2 Apr 2019 23:20:13 +0530 Subject: [PATCH] Assign deploymentID for first minio server in distributed setup (#7427) - Pass local endpoints to functions fixing formatXL during startup --- cmd/format-xl.go | 8 ++++---- cmd/prepare-storage.go | 13 ++++++++++--- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/cmd/format-xl.go b/cmd/format-xl.go index fd08fab52..fa9604f75 100644 --- a/cmd/format-xl.go +++ b/cmd/format-xl.go @@ -488,7 +488,7 @@ func formatXLGetDeploymentID(refFormat *formatXLV3, formats []*formatXLV3) (stri } // formatXLFixDeploymentID - Add deployment id if it is not present. -func formatXLFixDeploymentID(ctx context.Context, storageDisks []StorageAPI, refFormat *formatXLV3) (err error) { +func formatXLFixDeploymentID(ctx context.Context, endpoints EndpointList, storageDisks []StorageAPI, refFormat *formatXLV3) (err error) { // Acquire lock on format.json mutex := newNSLock(globalIsDistXL) formatLock := mutex.NewNSLock(minioMetaBucket, formatConfigFile) @@ -502,7 +502,7 @@ func formatXLFixDeploymentID(ctx context.Context, storageDisks []StorageAPI, ref formats, sErrs := loadFormatXLAll(storageDisks) for i, sErr := range sErrs { if _, ok := formatCriticalErrors[sErr]; ok { - return fmt.Errorf("Disk %s: %s", globalEndpoints[i], sErr) + return fmt.Errorf("Disk %s: %s", endpoints[i], sErr) } } @@ -540,11 +540,11 @@ func formatXLFixDeploymentID(ctx context.Context, storageDisks []StorageAPI, ref } // Update only the valid local disks which have not been updated before. -func formatXLFixLocalDeploymentID(ctx context.Context, storageDisks []StorageAPI, refFormat *formatXLV3) error { +func formatXLFixLocalDeploymentID(ctx context.Context, endpoints EndpointList, storageDisks []StorageAPI, refFormat *formatXLV3) error { // If this server was down when the deploymentID was updated // then we make sure that we update the local disks with the deploymentID. for index, storageDisk := range storageDisks { - if globalEndpoints[index].IsLocal && storageDisk != nil && storageDisk.IsOnline() { + if endpoints[index].IsLocal && storageDisk != nil && storageDisk.IsOnline() { format, err := loadFormatXL(storageDisk) if err != nil { // Disk can be offline etc. diff --git a/cmd/prepare-storage.go b/cmd/prepare-storage.go index 0a723fcbe..325cde9a3 100644 --- a/cmd/prepare-storage.go +++ b/cmd/prepare-storage.go @@ -198,7 +198,14 @@ func connectLoadInitFormats(retryCount int, firstDisk bool, endpoints EndpointLi // All disks report unformatted we should initialized everyone. if shouldInitXLDisks(sErrs) && firstDisk { - return initFormatXL(context.Background(), storageDisks, setCount, drivesPerSet) + // Initialize erasure code format on disks + format, err := initFormatXL(context.Background(), storageDisks, setCount, drivesPerSet) + if err != nil { + return nil, err + } + // Assign globalDeploymentID on first run for the + // minio server managing the first disk + globalDeploymentID = format.ID } // Return error when quorum unformatted disks - indicating we are @@ -244,14 +251,14 @@ func connectLoadInitFormats(retryCount int, firstDisk bool, endpoints EndpointLi } if format.ID == "" { - if err = formatXLFixDeploymentID(context.Background(), storageDisks, format); err != nil { + if err = formatXLFixDeploymentID(context.Background(), endpoints, storageDisks, format); err != nil { return nil, err } } globalDeploymentID = format.ID - if err = formatXLFixLocalDeploymentID(context.Background(), storageDisks, format); err != nil { + if err = formatXLFixLocalDeploymentID(context.Background(), endpoints, storageDisks, format); err != nil { return nil, err } return format, nil