diff --git a/weed/command/mini.go b/weed/command/mini.go index 815eba72a..e12cab35e 100644 --- a/weed/command/mini.go +++ b/weed/command/mini.go @@ -58,6 +58,7 @@ var ( // Track which port flags were explicitly passed on CLI before config file is applied explicitPortFlags map[string]bool miniEnableWebDAV *bool + miniEnableS3 *bool miniEnableAdminUI *bool ) @@ -138,6 +139,7 @@ func initMiniCommonFlags() { miniOptions.debug = cmdMini.Flag.Bool("debug", false, "serves runtime profiling data, e.g., http://localhost:6060/debug/pprof/goroutine?debug=2") miniOptions.debugPort = cmdMini.Flag.Int("debug.port", 6060, "http port for debugging") miniEnableWebDAV = cmdMini.Flag.Bool("webdav", true, "enable WebDAV server") + miniEnableS3 = cmdMini.Flag.Bool("s3", true, "enable S3 server") miniEnableAdminUI = cmdMini.Flag.Bool("admin.ui", true, "enable Admin UI") } @@ -450,10 +452,27 @@ func ensureAllPortsAvailableOnIP(bindIp string) error { {miniMasterOptions.port, "Master", "master.port", miniMasterOptions.portGrpc}, {miniFilerOptions.port, "Filer", "filer.port", miniFilerOptions.portGrpc}, {miniOptions.v.port, "Volume", "volume.port", miniOptions.v.portGrpc}, - {miniS3Options.port, "S3", "s3.port", miniS3Options.portGrpc}, - {miniWebDavOptions.port, "WebDAV", "webdav.port", nil}, - {miniAdminOptions.port, "Admin", "admin.port", miniAdminOptions.grpcPort}, } + if *miniEnableS3 { + portConfigs = append(portConfigs, struct { + port *int + name string + flagName string + grpcPtr *int + }{miniS3Options.port, "S3", "s3.port", miniS3Options.portGrpc}) + } + portConfigs = append(portConfigs, struct { + port *int + name string + flagName string + grpcPtr *int + }{miniWebDavOptions.port, "WebDAV", "webdav.port", nil}, + struct { + port *int + name string + flagName string + grpcPtr *int + }{miniAdminOptions.port, "Admin", "admin.port", miniAdminOptions.grpcPort}) // First, reserve all gRPC ports that will be calculated to prevent HTTP port allocation from using them // This prevents collisions like: HTTP port moves to X, then gRPC port is calculated as Y where Y == X @@ -516,9 +535,19 @@ func initializeGrpcPortsOnIP(bindIp string) { {miniMasterOptions.port, miniMasterOptions.portGrpc, "Master"}, {miniFilerOptions.port, miniFilerOptions.portGrpc, "Filer"}, {miniOptions.v.port, miniOptions.v.portGrpc, "Volume"}, - {miniS3Options.port, miniS3Options.portGrpc, "S3"}, - {miniAdminOptions.port, miniAdminOptions.grpcPort, "Admin"}, } + if *miniEnableS3 { + grpcConfigs = append(grpcConfigs, struct { + httpPort *int + grpcPort *int + name string + }{miniS3Options.port, miniS3Options.portGrpc, "S3"}) + } + grpcConfigs = append(grpcConfigs, struct { + httpPort *int + grpcPort *int + name string + }{miniAdminOptions.port, miniAdminOptions.grpcPort, "Admin"}) for _, config := range grpcConfigs { if config.grpcPort == nil { @@ -825,9 +854,11 @@ func startMiniServices(miniWhiteList []string, allServicesReady chan struct{}) { waitForServiceReady("Filer", *miniFilerOptions.port, bindIp) // Start S3 and WebDAV in parallel (both depend on filer) - go startMiniService("S3", func() { - startS3Service() - }, *miniS3Options.port) + if *miniEnableS3 { + go startMiniService("S3", func() { + startS3Service() + }, *miniS3Options.port) + } if *miniEnableWebDAV { go startMiniService("WebDAV", func() { @@ -836,7 +867,9 @@ func startMiniServices(miniWhiteList []string, allServicesReady chan struct{}) { } // Wait for both S3 and WebDAV to be ready - waitForServiceReady("S3", *miniS3Options.port, bindIp) + if *miniEnableS3 { + waitForServiceReady("S3", *miniS3Options.port, bindIp) + } if *miniEnableWebDAV { waitForServiceReady("WebDAV", *miniWebDavOptions.port, bindIp) } @@ -1135,7 +1168,9 @@ func printWelcomeMessage() { sb.WriteString(" All enabled components are running and ready to use:\n\n") fmt.Fprintf(&sb, " Master UI: http://%s:%d\n", *miniIp, *miniMasterOptions.port) fmt.Fprintf(&sb, " Filer UI: http://%s:%d\n", *miniIp, *miniFilerOptions.port) - fmt.Fprintf(&sb, " S3 Endpoint: http://%s:%d\n", *miniIp, *miniS3Options.port) + if *miniEnableS3 { + fmt.Fprintf(&sb, " S3 Endpoint: http://%s:%d\n", *miniIp, *miniS3Options.port) + } if *miniEnableWebDAV { fmt.Fprintf(&sb, " WebDAV: http://%s:%d\n", *miniIp, *miniWebDavOptions.port)