diff --git a/cmd/format-meta.go b/cmd/format-meta.go index 6615c088f..8c42fd370 100644 --- a/cmd/format-meta.go +++ b/cmd/format-meta.go @@ -20,9 +20,6 @@ package cmd const ( // Format config file carries backend format specific details. formatConfigFile = "format.json" - - // Format config tmp file carries backend format. - formatConfigFileTmp = "format.json.tmp" ) const ( diff --git a/cmd/format-xl.go b/cmd/format-xl.go index 40e7e3a47..7826de452 100644 --- a/cmd/format-xl.go +++ b/cmd/format-xl.go @@ -17,6 +17,7 @@ package cmd import ( + "bytes" "context" "encoding/json" "fmt" @@ -291,16 +292,6 @@ func formatXLMigrateV2ToV3(export string) error { return ioutil.WriteFile(formatPath, b, 0644) } -// Returns true, if one of the errors is non-nil and is Unformatted disk. -func hasAnyErrorsUnformatted(errs []error) bool { - for _, err := range errs { - if err != nil && err == errUnformattedDisk { - return true - } - } - return false -} - // countErrs - count a specific error. func countErrs(errs []error, err error) int { var i = 0 @@ -367,16 +358,18 @@ func saveFormatXL(disk StorageAPI, format interface{}) error { return err } + tmpFormatJSON := mustGetUUID() + ".json" + // Purge any existing temporary file, okay to ignore errors here. - defer disk.DeleteFile(minioMetaBucket, formatConfigFileTmp) + defer disk.DeleteFile(minioMetaBucket, tmpFormatJSON) // Append file `format.json.tmp`. - if err = disk.AppendFile(minioMetaBucket, formatConfigFileTmp, formatBytes); err != nil { + if err = disk.WriteAll(minioMetaBucket, tmpFormatJSON, bytes.NewReader(formatBytes)); err != nil { return err } - // Rename file `format.json.tmp` --> `format.json`. - return disk.RenameFile(minioMetaBucket, formatConfigFileTmp, minioMetaBucket, formatConfigFile) + // Rename file `uuid.json` --> `format.json`. + return disk.RenameFile(minioMetaBucket, tmpFormatJSON, minioMetaBucket, formatConfigFile) } var ignoredHiddenDirectories = []string{ diff --git a/cmd/xl-sets.go b/cmd/xl-sets.go index 5a0f3889e..e4d0f4119 100644 --- a/cmd/xl-sets.go +++ b/cmd/xl-sets.go @@ -1492,7 +1492,7 @@ func (s *xlSets) HealFormat(ctx context.Context, dryRun bool) (res madmin.HealRe } } - if !hasAnyErrorsUnformatted(sErrs) { + if countErrs(sErrs, errUnformattedDisk) == 0 { // No unformatted disks found disks are either offline // or online, no healing is required. return res, errNoHealRequired