mirror of
https://github.com/minio/minio.git
synced 2025-04-07 13:15:39 -04:00
Use endpoint url when printing disks status in distributed mode (#3151)
This commit is contained in:
parent
226a69fe15
commit
79601d27f2
@ -61,7 +61,7 @@ func TestNewFS(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Initializes all disks with XL
|
// Initializes all disks with XL
|
||||||
err = waitForFormatDisks(true, endpoints[0], xlStorageDisks)
|
err = waitForFormatDisks(true, endpoints, xlStorageDisks)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("Unable to format XL %s", err)
|
t.Fatalf("Unable to format XL %s", err)
|
||||||
}
|
}
|
||||||
@ -79,7 +79,7 @@ func TestNewFS(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for _, testCase := range testCases {
|
for _, testCase := range testCases {
|
||||||
if err = waitForFormatDisks(true, endpoints[0], []StorageAPI{testCase.disk}); err != testCase.expectedErr {
|
if err = waitForFormatDisks(true, endpoints, []StorageAPI{testCase.disk}); err != testCase.expectedErr {
|
||||||
t.Errorf("expected: %s, got :%s", testCase.expectedErr, err)
|
t.Errorf("expected: %s, got :%s", testCase.expectedErr, err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -18,6 +18,7 @@ package cmd
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"net/url"
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
humanize "github.com/dustin/go-humanize"
|
humanize "github.com/dustin/go-humanize"
|
||||||
@ -85,14 +86,14 @@ func getHealMsg(firstEndpoint string, storageDisks []StorageAPI) string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Prints regular message when we have sufficient disks to start the cluster.
|
// Prints regular message when we have sufficient disks to start the cluster.
|
||||||
func printRegularMsg(storageDisks []StorageAPI, fn printOnceFunc) {
|
func printRegularMsg(endpoints []*url.URL, storageDisks []StorageAPI, fn printOnceFunc) {
|
||||||
msg := getRegularMsg(storageDisks)
|
msg := getStorageInitMsg("\nInitializing data volume.", endpoints, storageDisks)
|
||||||
fn(msg)
|
fn(msg)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Constructs a formatted regular message when we have sufficient disks to start the cluster.
|
// Constructs a formatted regular message when we have sufficient disks to start the cluster.
|
||||||
func getRegularMsg(storageDisks []StorageAPI) string {
|
func getStorageInitMsg(titleMsg string, endpoints []*url.URL, storageDisks []StorageAPI) string {
|
||||||
msg := colorBlue("\nInitializing data volume.")
|
msg := colorBlue(titleMsg)
|
||||||
disksInfo, _, _ := getDisksInfo(storageDisks)
|
disksInfo, _, _ := getDisksInfo(storageDisks)
|
||||||
for i, info := range disksInfo {
|
for i, info := range disksInfo {
|
||||||
if storageDisks[i] == nil {
|
if storageDisks[i] == nil {
|
||||||
@ -101,7 +102,7 @@ func getRegularMsg(storageDisks []StorageAPI) string {
|
|||||||
msg += fmt.Sprintf(
|
msg += fmt.Sprintf(
|
||||||
"\n[%s] %s - %s %s",
|
"\n[%s] %s - %s %s",
|
||||||
int2Str(i+1, len(storageDisks)),
|
int2Str(i+1, len(storageDisks)),
|
||||||
storageDisks[i],
|
endpoints[i],
|
||||||
humanize.IBytes(uint64(info.Total)),
|
humanize.IBytes(uint64(info.Total)),
|
||||||
func() string {
|
func() string {
|
||||||
if info.Total > 0 {
|
if info.Total > 0 {
|
||||||
@ -115,35 +116,11 @@ func getRegularMsg(storageDisks []StorageAPI) string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Prints initialization message when cluster is being initialized for the first time.
|
// Prints initialization message when cluster is being initialized for the first time.
|
||||||
func printFormatMsg(storageDisks []StorageAPI, fn printOnceFunc) {
|
func printFormatMsg(endpoints []*url.URL, storageDisks []StorageAPI, fn printOnceFunc) {
|
||||||
msg := getFormatMsg(storageDisks)
|
msg := getStorageInitMsg("\nInitializing data volume for the first time.", endpoints, storageDisks)
|
||||||
fn(msg)
|
fn(msg)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Generate a formatted message when cluster is being initialized for the first time.
|
|
||||||
func getFormatMsg(storageDisks []StorageAPI) string {
|
|
||||||
msg := colorBlue("\nInitializing data volume for the first time.")
|
|
||||||
disksInfo, _, _ := getDisksInfo(storageDisks)
|
|
||||||
for i, info := range disksInfo {
|
|
||||||
if storageDisks[i] == nil {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
msg += fmt.Sprintf(
|
|
||||||
"\n[%s] %s - %s %s",
|
|
||||||
int2Str(i+1, len(storageDisks)),
|
|
||||||
storageDisks[i],
|
|
||||||
humanize.IBytes(uint64(info.Total)),
|
|
||||||
func() string {
|
|
||||||
if info.Total > 0 {
|
|
||||||
return "online"
|
|
||||||
}
|
|
||||||
return "offline"
|
|
||||||
}(),
|
|
||||||
)
|
|
||||||
}
|
|
||||||
return msg
|
|
||||||
}
|
|
||||||
|
|
||||||
func printConfigErrMsg(storageDisks []StorageAPI, sErrs []error, fn printOnceFunc) {
|
func printConfigErrMsg(storageDisks []StorageAPI, sErrs []error, fn printOnceFunc) {
|
||||||
msg := getConfigErrMsg(storageDisks, sErrs)
|
msg := getConfigErrMsg(storageDisks, sErrs)
|
||||||
fn(msg)
|
fn(msg)
|
||||||
|
@ -16,7 +16,10 @@
|
|||||||
|
|
||||||
package cmd
|
package cmd
|
||||||
|
|
||||||
import "testing"
|
import (
|
||||||
|
"net/url"
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
// Tests heal message to be correct and properly formatted.
|
// Tests heal message to be correct and properly formatted.
|
||||||
func TestHealMsg(t *testing.T) {
|
func TestHealMsg(t *testing.T) {
|
||||||
@ -32,43 +35,48 @@ func TestHealMsg(t *testing.T) {
|
|||||||
nilDisks[5] = nil
|
nilDisks[5] = nil
|
||||||
authErrs := make([]error, len(storageDisks))
|
authErrs := make([]error, len(storageDisks))
|
||||||
authErrs[5] = errAuthentication
|
authErrs[5] = errAuthentication
|
||||||
|
endpointURL, err := url.Parse("http://10.1.10.1:9000")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal("Unexpected error:", err)
|
||||||
|
}
|
||||||
|
endpointURLs := make([]*url.URL, len(storageDisks))
|
||||||
|
for idx := 0; idx < len(endpointURLs); idx++ {
|
||||||
|
endpointURLs[idx] = endpointURL
|
||||||
|
}
|
||||||
|
|
||||||
testCases := []struct {
|
testCases := []struct {
|
||||||
endPoint string
|
endPoints []*url.URL
|
||||||
storageDisks []StorageAPI
|
storageDisks []StorageAPI
|
||||||
serrs []error
|
serrs []error
|
||||||
}{
|
}{
|
||||||
// Test - 1 for valid disks and errors.
|
// Test - 1 for valid disks and errors.
|
||||||
{
|
{
|
||||||
endPoint: "http://10.1.10.1:9000",
|
endPoints: endpointURLs,
|
||||||
storageDisks: storageDisks,
|
storageDisks: storageDisks,
|
||||||
serrs: errs,
|
serrs: errs,
|
||||||
},
|
},
|
||||||
// Test - 2 for one of the disks is nil.
|
// Test - 2 for one of the disks is nil.
|
||||||
{
|
{
|
||||||
endPoint: "http://10.1.10.1:9000",
|
endPoints: endpointURLs,
|
||||||
storageDisks: nilDisks,
|
storageDisks: nilDisks,
|
||||||
serrs: errs,
|
serrs: errs,
|
||||||
},
|
},
|
||||||
// Test - 3 for one of the errs is authentication.
|
// Test - 3 for one of the errs is authentication.
|
||||||
{
|
{
|
||||||
endPoint: "http://10.1.10.1:9000",
|
endPoints: endpointURLs,
|
||||||
storageDisks: nilDisks,
|
storageDisks: nilDisks,
|
||||||
serrs: authErrs,
|
serrs: authErrs,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
for i, testCase := range testCases {
|
for i, testCase := range testCases {
|
||||||
msg := getHealMsg(testCase.endPoint, testCase.storageDisks)
|
msg := getHealMsg(testCase.endPoints[0].String(), testCase.storageDisks)
|
||||||
if msg == "" {
|
if msg == "" {
|
||||||
t.Fatalf("Test: %d Unable to get heal message.", i+1)
|
t.Fatalf("Test: %d Unable to get heal message.", i+1)
|
||||||
}
|
}
|
||||||
msg = getRegularMsg(testCase.storageDisks)
|
msg = getStorageInitMsg("init", testCase.endPoints, testCase.storageDisks)
|
||||||
if msg == "" {
|
if msg == "" {
|
||||||
t.Fatalf("Test: %d Unable to get regular message.", i+1)
|
t.Fatalf("Test: %d Unable to get regular message.", i+1)
|
||||||
}
|
}
|
||||||
msg = getFormatMsg(testCase.storageDisks)
|
|
||||||
if msg == "" {
|
|
||||||
t.Fatalf("Test: %d Unable to get format message.", i+1)
|
|
||||||
}
|
|
||||||
msg = getConfigErrMsg(testCase.storageDisks, testCase.serrs)
|
msg = getConfigErrMsg(testCase.storageDisks, testCase.serrs)
|
||||||
if msg == "" {
|
if msg == "" {
|
||||||
t.Fatalf("Test: %d Unable to get config error message.", i+1)
|
t.Fatalf("Test: %d Unable to get config error message.", i+1)
|
||||||
|
@ -185,7 +185,11 @@ func prepForInitXL(firstDisk bool, sErrs []error, diskCount int) InitActions {
|
|||||||
|
|
||||||
// Implements a jitter backoff loop for formatting all disks during
|
// Implements a jitter backoff loop for formatting all disks during
|
||||||
// initialization of the server.
|
// initialization of the server.
|
||||||
func retryFormattingDisks(firstDisk bool, firstEndpoint *url.URL, storageDisks []StorageAPI) error {
|
func retryFormattingDisks(firstDisk bool, endpoints []*url.URL, storageDisks []StorageAPI) error {
|
||||||
|
if len(endpoints) == 0 {
|
||||||
|
return errInvalidArgument
|
||||||
|
}
|
||||||
|
firstEndpoint := endpoints[0]
|
||||||
if firstEndpoint == nil {
|
if firstEndpoint == nil {
|
||||||
return errInvalidArgument
|
return errInvalidArgument
|
||||||
}
|
}
|
||||||
@ -217,14 +221,14 @@ func retryFormattingDisks(firstDisk bool, firstEndpoint *url.URL, storageDisks [
|
|||||||
return errCorruptedFormat
|
return errCorruptedFormat
|
||||||
case FormatDisks:
|
case FormatDisks:
|
||||||
console.Eraseline()
|
console.Eraseline()
|
||||||
printFormatMsg(storageDisks, printOnceFn())
|
printFormatMsg(endpoints, storageDisks, printOnceFn())
|
||||||
return initFormatXL(storageDisks)
|
return initFormatXL(storageDisks)
|
||||||
case InitObjectLayer:
|
case InitObjectLayer:
|
||||||
console.Eraseline()
|
console.Eraseline()
|
||||||
// Validate formats load before proceeding forward.
|
// Validate formats load before proceeding forward.
|
||||||
err := genericFormatCheck(formatConfigs, sErrs)
|
err := genericFormatCheck(formatConfigs, sErrs)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
printRegularMsg(storageDisks, printOnceFn())
|
printRegularMsg(endpoints, storageDisks, printOnceFn())
|
||||||
}
|
}
|
||||||
return err
|
return err
|
||||||
case WaitForHeal:
|
case WaitForHeal:
|
||||||
@ -303,7 +307,11 @@ func initStorageDisks(endpoints, ignoredEndpoints []*url.URL) ([]StorageAPI, err
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Format disks before initialization object layer.
|
// Format disks before initialization object layer.
|
||||||
func waitForFormatDisks(firstDisk bool, firstEndpoint *url.URL, storageDisks []StorageAPI) (err error) {
|
func waitForFormatDisks(firstDisk bool, endpoints []*url.URL, storageDisks []StorageAPI) (err error) {
|
||||||
|
if len(endpoints) == 0 {
|
||||||
|
return errInvalidArgument
|
||||||
|
}
|
||||||
|
firstEndpoint := endpoints[0]
|
||||||
if firstEndpoint == nil {
|
if firstEndpoint == nil {
|
||||||
return errInvalidArgument
|
return errInvalidArgument
|
||||||
}
|
}
|
||||||
@ -312,7 +320,7 @@ func waitForFormatDisks(firstDisk bool, firstEndpoint *url.URL, storageDisks []S
|
|||||||
}
|
}
|
||||||
// Start retry loop retrying until disks are formatted properly, until we have reached
|
// Start retry loop retrying until disks are formatted properly, until we have reached
|
||||||
// a conditional quorum of formatted disks.
|
// a conditional quorum of formatted disks.
|
||||||
err = retryFormattingDisks(firstDisk, firstEndpoint, storageDisks)
|
err = retryFormattingDisks(firstDisk, endpoints, storageDisks)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -474,7 +474,7 @@ func serverMain(c *cli.Context) {
|
|||||||
}(tls)
|
}(tls)
|
||||||
|
|
||||||
// Wait for formatting of disks.
|
// Wait for formatting of disks.
|
||||||
err = waitForFormatDisks(firstDisk, endpoints[0], storageDisks)
|
err = waitForFormatDisks(firstDisk, endpoints, storageDisks)
|
||||||
fatalIf(err, "formatting storage disks failed")
|
fatalIf(err, "formatting storage disks failed")
|
||||||
|
|
||||||
// Once formatted, initialize object layer.
|
// Once formatted, initialize object layer.
|
||||||
|
@ -1560,7 +1560,7 @@ func initObjectLayer(endpoints, ignoredEndpoints []*url.URL) (ObjectLayer, []Sto
|
|||||||
return nil, nil, err
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
err = waitForFormatDisks(true, endpoints[0], storageDisks)
|
err = waitForFormatDisks(true, endpoints, storageDisks)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, err
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
|
@ -161,7 +161,7 @@ func TestNewXL(t *testing.T) {
|
|||||||
t.Fatal("Unexpected error: ", err)
|
t.Fatal("Unexpected error: ", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
err = waitForFormatDisks(true, endpoints[0], nil)
|
err = waitForFormatDisks(true, endpoints, nil)
|
||||||
if err != errInvalidArgument {
|
if err != errInvalidArgument {
|
||||||
t.Fatalf("Expecting error, got %s", err)
|
t.Fatalf("Expecting error, got %s", err)
|
||||||
}
|
}
|
||||||
@ -172,7 +172,7 @@ func TestNewXL(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Initializes all erasure disks
|
// Initializes all erasure disks
|
||||||
err = waitForFormatDisks(true, endpoints[0], storageDisks)
|
err = waitForFormatDisks(true, endpoints, storageDisks)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("Unable to format disks for erasure, %s", err)
|
t.Fatalf("Unable to format disks for erasure, %s", err)
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user