Forráskód Böngészése

daemon/config: remove uses of pointers for ints

Use the default (0) value to indicate "not set", which simplifies
working with these configuration options, preventing the need to
use intermediate variables etc.

While changing this code, also making some small cleanups, such
as replacing "fmt.Sprintf()" for "strconv" variants.

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
Sebastiaan van Stijn 3 éve
szülő
commit
e62382d014

+ 3 - 8
cmd/dockerd/config.go

@@ -12,7 +12,6 @@ const defaultTrustKeyFile = "key.json"
 
 
 // installCommonConfigFlags adds flags to the pflag.FlagSet to configure the daemon
 // installCommonConfigFlags adds flags to the pflag.FlagSet to configure the daemon
 func installCommonConfigFlags(conf *config.Config, flags *pflag.FlagSet) error {
 func installCommonConfigFlags(conf *config.Config, flags *pflag.FlagSet) error {
-	var maxConcurrentDownloads, maxConcurrentUploads, maxDownloadAttempts int
 	var err error
 	var err error
 	conf.Pidfile, err = getDefaultPidFile()
 	conf.Pidfile, err = getDefaultPidFile()
 	if err != nil {
 	if err != nil {
@@ -60,9 +59,9 @@ func installCommonConfigFlags(conf *config.Config, flags *pflag.FlagSet) error {
 	flags.Var(opts.NewNamedMapOpts("log-opts", conf.LogConfig.Config, nil), "log-opt", "Default log driver options for containers")
 	flags.Var(opts.NewNamedMapOpts("log-opts", conf.LogConfig.Config, nil), "log-opt", "Default log driver options for containers")
 
 
 	flags.StringVar(&conf.CorsHeaders, "api-cors-header", "", "Set CORS headers in the Engine API")
 	flags.StringVar(&conf.CorsHeaders, "api-cors-header", "", "Set CORS headers in the Engine API")
-	flags.IntVar(&maxConcurrentDownloads, "max-concurrent-downloads", config.DefaultMaxConcurrentDownloads, "Set the max concurrent downloads for each pull")
-	flags.IntVar(&maxConcurrentUploads, "max-concurrent-uploads", config.DefaultMaxConcurrentUploads, "Set the max concurrent uploads for each push")
-	flags.IntVar(&maxDownloadAttempts, "max-download-attempts", config.DefaultDownloadAttempts, "Set the max download attempts for each pull")
+	flags.IntVar(&conf.MaxConcurrentDownloads, "max-concurrent-downloads", config.DefaultMaxConcurrentDownloads, "Set the max concurrent downloads for each pull")
+	flags.IntVar(&conf.MaxConcurrentUploads, "max-concurrent-uploads", config.DefaultMaxConcurrentUploads, "Set the max concurrent uploads for each push")
+	flags.IntVar(&conf.MaxDownloadAttempts, "max-download-attempts", config.DefaultDownloadAttempts, "Set the max download attempts for each pull")
 	flags.IntVar(&conf.ShutdownTimeout, "shutdown-timeout", config.DefaultShutdownTimeout, "Set the default shutdown timeout")
 	flags.IntVar(&conf.ShutdownTimeout, "shutdown-timeout", config.DefaultShutdownTimeout, "Set the default shutdown timeout")
 
 
 	flags.StringVar(&conf.SwarmDefaultAdvertiseAddr, "swarm-default-advertise-addr", "", "Set default address or interface for swarm advertised address")
 	flags.StringVar(&conf.SwarmDefaultAdvertiseAddr, "swarm-default-advertise-addr", "", "Set default address or interface for swarm advertised address")
@@ -70,10 +69,6 @@ func installCommonConfigFlags(conf *config.Config, flags *pflag.FlagSet) error {
 	flags.StringVar(&conf.MetricsAddress, "metrics-addr", "", "Set default address and port to serve the metrics api on")
 	flags.StringVar(&conf.MetricsAddress, "metrics-addr", "", "Set default address and port to serve the metrics api on")
 	flags.Var(opts.NewNamedListOptsRef("node-generic-resources", &conf.NodeGenericResources, opts.ValidateSingleGenericResource), "node-generic-resource", "Advertise user-defined resource")
 	flags.Var(opts.NewNamedListOptsRef("node-generic-resources", &conf.NodeGenericResources, opts.ValidateSingleGenericResource), "node-generic-resource", "Advertise user-defined resource")
 
 
-	conf.MaxConcurrentDownloads = &maxConcurrentDownloads
-	conf.MaxConcurrentUploads = &maxConcurrentUploads
-	conf.MaxDownloadAttempts = &maxDownloadAttempts
-
 	flags.StringVar(&conf.ContainerdNamespace, "containerd-namespace", config.DefaultContainersNamespace, "Containerd namespace to use")
 	flags.StringVar(&conf.ContainerdNamespace, "containerd-namespace", config.DefaultContainersNamespace, "Containerd namespace to use")
 	flags.StringVar(&conf.ContainerdPluginNamespace, "containerd-plugins-namespace", config.DefaultPluginNamespace, "Containerd namespace to use for plugins")
 	flags.StringVar(&conf.ContainerdPluginNamespace, "containerd-plugins-namespace", config.DefaultPluginNamespace, "Containerd namespace to use for plugins")
 	flags.StringVar(&conf.DefaultRuntime, "default-runtime", config.StockRuntimeName, "Default OCI runtime for containers")
 	flags.StringVar(&conf.DefaultRuntime, "default-runtime", config.StockRuntimeName, "Default OCI runtime for containers")

+ 9 - 9
daemon/config/config.go

@@ -200,15 +200,15 @@ type CommonConfig struct {
 
 
 	// MaxConcurrentDownloads is the maximum number of downloads that
 	// MaxConcurrentDownloads is the maximum number of downloads that
 	// may take place at a time for each pull.
 	// may take place at a time for each pull.
-	MaxConcurrentDownloads *int `json:"max-concurrent-downloads,omitempty"`
+	MaxConcurrentDownloads int `json:"max-concurrent-downloads,omitempty"`
 
 
 	// MaxConcurrentUploads is the maximum number of uploads that
 	// MaxConcurrentUploads is the maximum number of uploads that
 	// may take place at a time for each push.
 	// may take place at a time for each push.
-	MaxConcurrentUploads *int `json:"max-concurrent-uploads,omitempty"`
+	MaxConcurrentUploads int `json:"max-concurrent-uploads,omitempty"`
 
 
 	// MaxDownloadAttempts is the maximum number of attempts that
 	// MaxDownloadAttempts is the maximum number of attempts that
 	// may take place at a time for each push.
 	// may take place at a time for each push.
-	MaxDownloadAttempts *int `json:"max-download-attempts,omitempty"`
+	MaxDownloadAttempts int `json:"max-download-attempts,omitempty"`
 
 
 	// ShutdownTimeout is the timeout value (in seconds) the daemon will wait for the container
 	// ShutdownTimeout is the timeout value (in seconds) the daemon will wait for the container
 	// to stop when daemon is being shutdown
 	// to stop when daemon is being shutdown
@@ -602,14 +602,14 @@ func Validate(config *Config) error {
 	}
 	}
 
 
 	// TODO(thaJeztah) Validations below should not accept "0" to be valid; see Validate() for a more in-depth description of this problem
 	// TODO(thaJeztah) Validations below should not accept "0" to be valid; see Validate() for a more in-depth description of this problem
-	if config.MaxConcurrentDownloads != nil && *config.MaxConcurrentDownloads < 0 {
-		return fmt.Errorf("invalid max concurrent downloads: %d", *config.MaxConcurrentDownloads)
+	if config.MaxConcurrentDownloads < 0 {
+		return fmt.Errorf("invalid max concurrent downloads: %d", config.MaxConcurrentDownloads)
 	}
 	}
-	if config.MaxConcurrentUploads != nil && *config.MaxConcurrentUploads < 0 {
-		return fmt.Errorf("invalid max concurrent uploads: %d", *config.MaxConcurrentUploads)
+	if config.MaxConcurrentUploads < 0 {
+		return fmt.Errorf("invalid max concurrent uploads: %d", config.MaxConcurrentUploads)
 	}
 	}
-	if config.MaxDownloadAttempts != nil && *config.MaxDownloadAttempts < 0 {
-		return fmt.Errorf("invalid max download attempts: %d", *config.MaxDownloadAttempts)
+	if config.MaxDownloadAttempts < 0 {
+		return fmt.Errorf("invalid max download attempts: %d", config.MaxDownloadAttempts)
 	}
 	}
 
 
 	// validate that "default" runtime is not reset
 	// validate that "default" runtime is not reset

+ 7 - 11
daemon/config/config_test.go

@@ -213,8 +213,6 @@ func TestFindConfigurationConflictsWithMergedValues(t *testing.T) {
 }
 }
 
 
 func TestValidateConfigurationErrors(t *testing.T) {
 func TestValidateConfigurationErrors(t *testing.T) {
-	intPtr := func(i int) *int { return &i }
-
 	testCases := []struct {
 	testCases := []struct {
 		name        string
 		name        string
 		config      *Config
 		config      *Config
@@ -286,7 +284,7 @@ func TestValidateConfigurationErrors(t *testing.T) {
 			name: "negative max-concurrent-downloads",
 			name: "negative max-concurrent-downloads",
 			config: &Config{
 			config: &Config{
 				CommonConfig: CommonConfig{
 				CommonConfig: CommonConfig{
-					MaxConcurrentDownloads: intPtr(-10),
+					MaxConcurrentDownloads: -10,
 				},
 				},
 			},
 			},
 			expectedErr: "invalid max concurrent downloads: -10",
 			expectedErr: "invalid max concurrent downloads: -10",
@@ -295,7 +293,7 @@ func TestValidateConfigurationErrors(t *testing.T) {
 			name: "negative max-concurrent-uploads",
 			name: "negative max-concurrent-uploads",
 			config: &Config{
 			config: &Config{
 				CommonConfig: CommonConfig{
 				CommonConfig: CommonConfig{
-					MaxConcurrentUploads: intPtr(-10),
+					MaxConcurrentUploads: -10,
 				},
 				},
 			},
 			},
 			expectedErr: "invalid max concurrent uploads: -10",
 			expectedErr: "invalid max concurrent uploads: -10",
@@ -304,7 +302,7 @@ func TestValidateConfigurationErrors(t *testing.T) {
 			name: "negative max-download-attempts",
 			name: "negative max-download-attempts",
 			config: &Config{
 			config: &Config{
 				CommonConfig: CommonConfig{
 				CommonConfig: CommonConfig{
-					MaxDownloadAttempts: intPtr(-10),
+					MaxDownloadAttempts: -10,
 				},
 				},
 			},
 			},
 			expectedErr: "invalid max download attempts: -10",
 			expectedErr: "invalid max download attempts: -10",
@@ -315,7 +313,7 @@ func TestValidateConfigurationErrors(t *testing.T) {
 				name: "zero max-download-attempts",
 				name: "zero max-download-attempts",
 				config: &Config{
 				config: &Config{
 					CommonConfig: CommonConfig{
 					CommonConfig: CommonConfig{
-						MaxDownloadAttempts: intPtr(0),
+						MaxDownloadAttempts: 0,
 					},
 					},
 				},
 				},
 				expectedErr: "invalid max download attempts: 0",
 				expectedErr: "invalid max download attempts: 0",
@@ -367,8 +365,6 @@ func TestValidateConfigurationErrors(t *testing.T) {
 }
 }
 
 
 func TestValidateConfiguration(t *testing.T) {
 func TestValidateConfiguration(t *testing.T) {
-	intPtr := func(i int) *int { return &i }
-
 	testCases := []struct {
 	testCases := []struct {
 		name   string
 		name   string
 		config *Config
 		config *Config
@@ -405,7 +401,7 @@ func TestValidateConfiguration(t *testing.T) {
 			name: "with max-concurrent-downloads",
 			name: "with max-concurrent-downloads",
 			config: &Config{
 			config: &Config{
 				CommonConfig: CommonConfig{
 				CommonConfig: CommonConfig{
-					MaxConcurrentDownloads: intPtr(4),
+					MaxConcurrentDownloads: 4,
 				},
 				},
 			},
 			},
 		},
 		},
@@ -413,7 +409,7 @@ func TestValidateConfiguration(t *testing.T) {
 			name: "with max-concurrent-uploads",
 			name: "with max-concurrent-uploads",
 			config: &Config{
 			config: &Config{
 				CommonConfig: CommonConfig{
 				CommonConfig: CommonConfig{
-					MaxConcurrentUploads: intPtr(4),
+					MaxConcurrentUploads: 4,
 				},
 				},
 			},
 			},
 		},
 		},
@@ -421,7 +417,7 @@ func TestValidateConfiguration(t *testing.T) {
 			name: "with max-download-attempts",
 			name: "with max-download-attempts",
 			config: &Config{
 			config: &Config{
 				CommonConfig: CommonConfig{
 				CommonConfig: CommonConfig{
-					MaxDownloadAttempts: intPtr(4),
+					MaxDownloadAttempts: 4,
 				},
 				},
 			},
 			},
 		},
 		},

+ 3 - 3
daemon/daemon.go

@@ -1038,9 +1038,9 @@ func NewDaemon(ctx context.Context, config *config.Config, pluginStore *plugin.S
 		EventsService:             d.EventsService,
 		EventsService:             d.EventsService,
 		ImageStore:                imageStore,
 		ImageStore:                imageStore,
 		LayerStore:                layerStore,
 		LayerStore:                layerStore,
-		MaxConcurrentDownloads:    *config.MaxConcurrentDownloads,
-		MaxConcurrentUploads:      *config.MaxConcurrentUploads,
-		MaxDownloadAttempts:       *config.MaxDownloadAttempts,
+		MaxConcurrentDownloads:    config.MaxConcurrentDownloads,
+		MaxConcurrentUploads:      config.MaxConcurrentUploads,
+		MaxDownloadAttempts:       config.MaxDownloadAttempts,
 		ReferenceStore:            rs,
 		ReferenceStore:            rs,
 		RegistryService:           registryService,
 		RegistryService:           registryService,
 		TrustKey:                  trustKey,
 		TrustKey:                  trustKey,

+ 5 - 5
daemon/images/service.go

@@ -271,11 +271,11 @@ func (i *ImageService) ImageDiskUsage(ctx context.Context) ([]*types.ImageSummar
 // UpdateConfig values
 // UpdateConfig values
 //
 //
 // called from reload.go
 // called from reload.go
-func (i *ImageService) UpdateConfig(maxDownloads, maxUploads *int) {
-	if i.downloadManager != nil && maxDownloads != nil {
-		i.downloadManager.SetConcurrency(*maxDownloads)
+func (i *ImageService) UpdateConfig(maxDownloads, maxUploads int) {
+	if i.downloadManager != nil && maxDownloads != 0 {
+		i.downloadManager.SetConcurrency(maxDownloads)
 	}
 	}
-	if i.uploadManager != nil && maxUploads != nil {
-		i.uploadManager.SetConcurrency(*maxUploads)
+	if i.uploadManager != nil && maxUploads != 0 {
+		i.uploadManager.SetConcurrency(maxUploads)
 	}
 	}
 }
 }

+ 23 - 27
daemon/reload.go

@@ -3,6 +3,7 @@ package daemon // import "github.com/docker/docker/daemon"
 import (
 import (
 	"encoding/json"
 	"encoding/json"
 	"fmt"
 	"fmt"
+	"strconv"
 
 
 	"github.com/docker/docker/daemon/config"
 	"github.com/docker/docker/daemon/config"
 	"github.com/sirupsen/logrus"
 	"github.com/sirupsen/logrus"
@@ -86,52 +87,47 @@ func (daemon *Daemon) reloadDebug(conf *config.Config, attributes map[string]str
 		daemon.configStore.Debug = conf.Debug
 		daemon.configStore.Debug = conf.Debug
 	}
 	}
 	// prepare reload event attributes with updatable configurations
 	// prepare reload event attributes with updatable configurations
-	attributes["debug"] = fmt.Sprintf("%t", daemon.configStore.Debug)
+	attributes["debug"] = strconv.FormatBool(daemon.configStore.Debug)
 }
 }
 
 
 // reloadMaxConcurrentDownloadsAndUploads updates configuration with max concurrent
 // reloadMaxConcurrentDownloadsAndUploads updates configuration with max concurrent
 // download and upload options and updates the passed attributes
 // download and upload options and updates the passed attributes
 func (daemon *Daemon) reloadMaxConcurrentDownloadsAndUploads(conf *config.Config, attributes map[string]string) {
 func (daemon *Daemon) reloadMaxConcurrentDownloadsAndUploads(conf *config.Config, attributes map[string]string) {
-	// If no value is set for max-concurrent-downloads we assume it is the default value
 	// We always "reset" as the cost is lightweight and easy to maintain.
 	// We always "reset" as the cost is lightweight and easy to maintain.
-	maxConcurrentDownloads := config.DefaultMaxConcurrentDownloads
-	if conf.IsValueSet("max-concurrent-downloads") && conf.MaxConcurrentDownloads != nil {
-		maxConcurrentDownloads = *conf.MaxConcurrentDownloads
-	}
-	daemon.configStore.MaxConcurrentDownloads = &maxConcurrentDownloads
-	logrus.Debugf("Reset Max Concurrent Downloads: %d", *daemon.configStore.MaxConcurrentDownloads)
+	daemon.configStore.MaxConcurrentDownloads = config.DefaultMaxConcurrentDownloads
+	daemon.configStore.MaxConcurrentUploads = config.DefaultMaxConcurrentUploads
 
 
-	// If no value is set for max-concurrent-upload we assume it is the default value
-	// We always "reset" as the cost is lightweight and easy to maintain.
-	maxConcurrentUploads := config.DefaultMaxConcurrentUploads
-	if conf.IsValueSet("max-concurrent-uploads") && conf.MaxConcurrentUploads != nil {
-		maxConcurrentUploads = *conf.MaxConcurrentUploads
+	if conf.IsValueSet("max-concurrent-downloads") && conf.MaxConcurrentDownloads != 0 {
+		daemon.configStore.MaxConcurrentDownloads = conf.MaxConcurrentDownloads
+	}
+	if conf.IsValueSet("max-concurrent-uploads") && conf.MaxConcurrentUploads != 0 {
+		daemon.configStore.MaxConcurrentUploads = conf.MaxConcurrentUploads
 	}
 	}
-	daemon.configStore.MaxConcurrentUploads = &maxConcurrentUploads
-	logrus.Debugf("Reset Max Concurrent Uploads: %d", *daemon.configStore.MaxConcurrentUploads)
-
 	if daemon.imageService != nil {
 	if daemon.imageService != nil {
-		daemon.imageService.UpdateConfig(&maxConcurrentDownloads, &maxConcurrentUploads)
+		daemon.imageService.UpdateConfig(
+			daemon.configStore.MaxConcurrentDownloads,
+			daemon.configStore.MaxConcurrentUploads,
+		)
 	}
 	}
 
 
 	// prepare reload event attributes with updatable configurations
 	// prepare reload event attributes with updatable configurations
-	attributes["max-concurrent-downloads"] = fmt.Sprintf("%d", *daemon.configStore.MaxConcurrentDownloads)
-	// prepare reload event attributes with updatable configurations
-	attributes["max-concurrent-uploads"] = fmt.Sprintf("%d", *daemon.configStore.MaxConcurrentUploads)
+	attributes["max-concurrent-downloads"] = strconv.Itoa(daemon.configStore.MaxConcurrentDownloads)
+	attributes["max-concurrent-uploads"] = strconv.Itoa(daemon.configStore.MaxConcurrentUploads)
+	logrus.Debug("Reset Max Concurrent Downloads: ", attributes["max-concurrent-downloads"])
+	logrus.Debug("Reset Max Concurrent Uploads: ", attributes["max-concurrent-uploads"])
 }
 }
 
 
 // reloadMaxDownloadAttempts updates configuration with max concurrent
 // reloadMaxDownloadAttempts updates configuration with max concurrent
 // download attempts when a connection is lost and updates the passed attributes
 // download attempts when a connection is lost and updates the passed attributes
 func (daemon *Daemon) reloadMaxDownloadAttempts(conf *config.Config, attributes map[string]string) {
 func (daemon *Daemon) reloadMaxDownloadAttempts(conf *config.Config, attributes map[string]string) {
 	// We always "reset" as the cost is lightweight and easy to maintain.
 	// We always "reset" as the cost is lightweight and easy to maintain.
-	maxDownloadAttempts := config.DefaultDownloadAttempts
-	if conf.IsValueSet("max-download-attempts") && conf.MaxDownloadAttempts != nil {
-		maxDownloadAttempts = *conf.MaxDownloadAttempts
+	daemon.configStore.MaxDownloadAttempts = config.DefaultDownloadAttempts
+	if conf.IsValueSet("max-download-attempts") && conf.MaxDownloadAttempts != 0 {
+		daemon.configStore.MaxDownloadAttempts = conf.MaxDownloadAttempts
 	}
 	}
-	daemon.configStore.MaxDownloadAttempts = &maxDownloadAttempts
 
 
 	// prepare reload event attributes with updatable configurations
 	// prepare reload event attributes with updatable configurations
-	attributes["max-download-attempts"] = fmt.Sprintf("%d", *daemon.configStore.MaxDownloadAttempts)
+	attributes["max-download-attempts"] = strconv.Itoa(daemon.configStore.MaxDownloadAttempts)
 	logrus.Debug("Reset Max Download Attempts: ", attributes["max-download-attempts"])
 	logrus.Debug("Reset Max Download Attempts: ", attributes["max-download-attempts"])
 }
 }
 
 
@@ -145,7 +141,7 @@ func (daemon *Daemon) reloadShutdownTimeout(conf *config.Config, attributes map[
 	}
 	}
 
 
 	// prepare reload event attributes with updatable configurations
 	// prepare reload event attributes with updatable configurations
-	attributes["shutdown-timeout"] = fmt.Sprintf("%d", daemon.configStore.ShutdownTimeout)
+	attributes["shutdown-timeout"] = strconv.Itoa(daemon.configStore.ShutdownTimeout)
 }
 }
 
 
 // reloadLabels updates configuration with engine labels
 // reloadLabels updates configuration with engine labels
@@ -254,7 +250,7 @@ func (daemon *Daemon) reloadLiveRestore(conf *config.Config, attributes map[stri
 	}
 	}
 
 
 	// prepare reload event attributes with updatable configurations
 	// prepare reload event attributes with updatable configurations
-	attributes["live-restore"] = fmt.Sprintf("%t", daemon.configStore.LiveRestoreEnabled)
+	attributes["live-restore"] = strconv.FormatBool(daemon.configStore.LiveRestoreEnabled)
 	return nil
 	return nil
 }
 }