mirror of
https://github.com/minio/minio.git
synced 2025-04-18 17:55:28 -04:00
Complain if we detect sub-optimal ordering in distributed setup (#7576)
Fixes #6156
This commit is contained in:
parent
af6c6a2b35
commit
091b9b661f
@ -30,6 +30,7 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
humanize "github.com/dustin/go-humanize"
|
humanize "github.com/dustin/go-humanize"
|
||||||
|
"github.com/minio/cli"
|
||||||
"github.com/minio/minio-go/pkg/set"
|
"github.com/minio/minio-go/pkg/set"
|
||||||
"github.com/minio/minio/cmd/logger"
|
"github.com/minio/minio/cmd/logger"
|
||||||
"github.com/minio/minio/pkg/cpu"
|
"github.com/minio/minio/pkg/cpu"
|
||||||
@ -391,6 +392,26 @@ func NewEndpointList(args ...string) (endpoints EndpointList, err error) {
|
|||||||
return endpoints, nil
|
return endpoints, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func checkEndpointsSubOptimal(ctx *cli.Context, setupType SetupType, endpoints EndpointList) (err error) {
|
||||||
|
// Validate sub optimal ordering only for distributed setup.
|
||||||
|
if setupType != DistXLSetupType {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
var endpointOrder int
|
||||||
|
err = fmt.Errorf("Too many disk args are local, input is in sub-optimal order. Please review input args: %s", ctx.Args())
|
||||||
|
for _, endpoint := range endpoints {
|
||||||
|
if endpoint.IsLocal {
|
||||||
|
endpointOrder++
|
||||||
|
} else {
|
||||||
|
endpointOrder--
|
||||||
|
}
|
||||||
|
if endpointOrder >= 2 {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// Checks if there are any cross device mounts.
|
// Checks if there are any cross device mounts.
|
||||||
func checkCrossDeviceMounts(endpoints EndpointList) (err error) {
|
func checkCrossDeviceMounts(endpoints EndpointList) (err error) {
|
||||||
var absPaths []string
|
var absPaths []string
|
||||||
|
@ -17,13 +17,53 @@
|
|||||||
package cmd
|
package cmd
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"flag"
|
||||||
"fmt"
|
"fmt"
|
||||||
"net/url"
|
"net/url"
|
||||||
"reflect"
|
"reflect"
|
||||||
"strings"
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"github.com/minio/cli"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func TestSubOptimalEndpointInput(t *testing.T) {
|
||||||
|
args1 := []string{"http://localhost/d1", "http://localhost/d2", "http://localhost/d3", "http://localhost/d4"}
|
||||||
|
args2 := []string{"http://example.org/d1", "http://example.com/d1", "http://example.net/d1", "http://example.edu/d1"}
|
||||||
|
|
||||||
|
tests := []struct {
|
||||||
|
setupType SetupType
|
||||||
|
ctx *cli.Context
|
||||||
|
endpoints EndpointList
|
||||||
|
isErr bool
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
setupType: DistXLSetupType,
|
||||||
|
ctx: cli.NewContext(cli.NewApp(), flag.NewFlagSet("", flag.ContinueOnError), nil),
|
||||||
|
endpoints: mustGetNewEndpointList(args1...),
|
||||||
|
isErr: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
setupType: DistXLSetupType,
|
||||||
|
ctx: cli.NewContext(cli.NewApp(), flag.NewFlagSet("", flag.ContinueOnError), nil),
|
||||||
|
endpoints: mustGetNewEndpointList(args2...),
|
||||||
|
isErr: false,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
for i, test := range tests {
|
||||||
|
test := test
|
||||||
|
t.Run(fmt.Sprintf("Test%d", i+1), func(t *testing.T) {
|
||||||
|
err := checkEndpointsSubOptimal(test.ctx, test.setupType, test.endpoints)
|
||||||
|
if test.isErr && err == nil {
|
||||||
|
t.Error("expected err but found nil")
|
||||||
|
}
|
||||||
|
if !test.isErr && err != nil {
|
||||||
|
t.Errorf("expected err nil but found an err %s", err)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestNewEndpoint(t *testing.T) {
|
func TestNewEndpoint(t *testing.T) {
|
||||||
u1, _ := url.Parse("http://localhost/path")
|
u1, _ := url.Parse("http://localhost/path")
|
||||||
u2, _ := url.Parse("https://example.org/path")
|
u2, _ := url.Parse("https://example.org/path")
|
||||||
|
@ -167,6 +167,8 @@ func serverHandleCmdArgs(ctx *cli.Context) {
|
|||||||
}
|
}
|
||||||
logger.FatalIf(err, "Invalid command line arguments")
|
logger.FatalIf(err, "Invalid command line arguments")
|
||||||
|
|
||||||
|
logger.LogIf(context.Background(), checkEndpointsSubOptimal(ctx, setupType, globalEndpoints))
|
||||||
|
|
||||||
globalMinioHost, globalMinioPort = mustSplitHostPort(globalMinioAddr)
|
globalMinioHost, globalMinioPort = mustSplitHostPort(globalMinioAddr)
|
||||||
|
|
||||||
// On macOS, if a process already listens on LOCALIPADDR:PORT, net.Listen() falls back
|
// On macOS, if a process already listens on LOCALIPADDR:PORT, net.Listen() falls back
|
||||||
|
Loading…
x
Reference in New Issue
Block a user