From 84acc820c71d64470ae46c2fa4a66bbddde81f88 Mon Sep 17 00:00:00 2001 From: Anis Elleuch Date: Thu, 13 Oct 2016 04:22:15 +0100 Subject: [PATCH] Fix free drive space calculation in XL mode (#2917) --- cmd/server-startup-msg.go | 8 +++++++- cmd/server-startup-msg_test.go | 25 ++++++++++++++++--------- 2 files changed, 23 insertions(+), 10 deletions(-) diff --git a/cmd/server-startup-msg.go b/cmd/server-startup-msg.go index f4adb8ce2..f6c20e1d5 100644 --- a/cmd/server-startup-msg.go +++ b/cmd/server-startup-msg.go @@ -124,7 +124,13 @@ func printObjectAPIMsg() { // Get formatted disk/storage info message. func getStorageInfoMsg(storageInfo StorageInfo) string { - msg := fmt.Sprintf("%s %s Free", colorBlue("Drive Capacity:"), humanize.IBytes(uint64(storageInfo.Free))) + freeSpace := uint64(storageInfo.Free) + totalSpace := uint64(storageInfo.Total) + if storageInfo.Backend.Type == XL { + freeSpace /= 2 + totalSpace /= 2 + } + msg := fmt.Sprintf("%s %s Free, %s Total", colorBlue("Drive Capacity:"), humanize.IBytes(freeSpace), humanize.IBytes(totalSpace)) diskInfo := fmt.Sprintf(" %d Online, %d Offline. We can withstand [%d] more drive failure(s).", storageInfo.Backend.OnlineDisks, storageInfo.Backend.OfflineDisks, diff --git a/cmd/server-startup-msg_test.go b/cmd/server-startup-msg_test.go index 37b6b17e6..d902009d5 100644 --- a/cmd/server-startup-msg_test.go +++ b/cmd/server-startup-msg_test.go @@ -16,19 +16,26 @@ package cmd -import "testing" +import ( + "strings" + "testing" +) // Tests if we generate storage info. func TestStorageInfoMsg(t *testing.T) { - obj, _, err := prepareXL() - if err != nil { - t.Fatal("Unable to initialize XL backend", err) + infoStorage := StorageInfo{ + Total: 1024 * 1024 * 1024 * 10, + Free: 1024 * 1024 * 1024 * 2, + Backend: struct { + Type BackendType + OnlineDisks int + OfflineDisks int + ReadQuorum int + WriteQuorum int + }{XL, 7, 1, 4, 5}, } - globalObjLayerMutex.Lock() - globalObjectAPI = obj - globalObjLayerMutex.Unlock() - if msg := getStorageInfoMsg(obj.StorageInfo()); msg == "" { - t.Fatal("Empty message string is not implemented") + if msg := getStorageInfoMsg(infoStorage); !strings.Contains(msg, "1.0 GiB Free, 5.0 GiB Total") || !strings.Contains(msg, "7 Online, 1 Offline") { + t.Fatal("Empty message string is not implemented", msg) } }