瀏覽代碼

Do not set -1 for swappiness

Do not set a default value for swappiness as the default value should be
`nil`

Signed-off-by: Michael Crosby <crosbymichael@gmail.com>
Michael Crosby 8 年之前
父節點
當前提交
9d87e6e0fb
共有 5 個文件被更改,包括 16 次插入10 次删除
  1. 8 0
      daemon/daemon.go
  2. 2 1
      daemon/daemon_solaris.go
  3. 3 6
      daemon/daemon_unix.go
  4. 2 2
      daemon/daemon_windows.go
  5. 1 1
      integration-cli/docker_api_containers_test.go

+ 8 - 0
daemon/daemon.go

@@ -1243,3 +1243,11 @@ func (daemon *Daemon) checkpointAndSave(container *container.Container) error {
 	}
 	}
 	return nil
 	return nil
 }
 }
+
+// because the CLI sends a -1 when it wants to unset the swappiness value
+// we need to clear it on the server side
+func fixMemorySwappiness(resources *containertypes.Resources) {
+	if resources.MemorySwappiness != nil && *resources.MemorySwappiness == -1 {
+		resources.MemorySwappiness = nil
+	}
+}

+ 2 - 1
daemon/daemon_solaris.go

@@ -143,6 +143,7 @@ func UsingSystemd(config *Config) bool {
 // verifyPlatformContainerSettings performs platform-specific validation of the
 // verifyPlatformContainerSettings performs platform-specific validation of the
 // hostconfig and config structures.
 // hostconfig and config structures.
 func verifyPlatformContainerSettings(daemon *Daemon, hostConfig *containertypes.HostConfig, config *containertypes.Config, update bool) ([]string, error) {
 func verifyPlatformContainerSettings(daemon *Daemon, hostConfig *containertypes.HostConfig, config *containertypes.Config, update bool) ([]string, error) {
+	fixMemorySwappiness(resources)
 	warnings := []string{}
 	warnings := []string{}
 	sysInfo := sysinfo.New(true)
 	sysInfo := sysinfo.New(true)
 	// NOTE: We do not enforce a minimum value for swap limits for zones on Solaris and
 	// NOTE: We do not enforce a minimum value for swap limits for zones on Solaris and
@@ -163,7 +164,7 @@ func verifyPlatformContainerSettings(daemon *Daemon, hostConfig *containertypes.
 	}
 	}
 	// Solaris NOTE: We allow and encourage setting the swap without setting the memory limit.
 	// Solaris NOTE: We allow and encourage setting the swap without setting the memory limit.
 
 
-	if hostConfig.MemorySwappiness != nil && *hostConfig.MemorySwappiness != -1 && !sysInfo.MemorySwappiness {
+	if hostConfig.MemorySwappiness != nil && !sysInfo.MemorySwappiness {
 		warnings = append(warnings, "Your kernel does not support memory swappiness capabilities, memory swappiness discarded.")
 		warnings = append(warnings, "Your kernel does not support memory swappiness capabilities, memory swappiness discarded.")
 		logrus.Warnf("Your kernel does not support memory swappiness capabilities, memory swappiness discarded.")
 		logrus.Warnf("Your kernel does not support memory swappiness capabilities, memory swappiness discarded.")
 		hostConfig.MemorySwappiness = nil
 		hostConfig.MemorySwappiness = nil

+ 3 - 6
daemon/daemon_unix.go

@@ -282,10 +282,6 @@ func (daemon *Daemon) adaptContainerSettings(hostConfig *containertypes.HostConf
 		return err
 		return err
 	}
 	}
 	hostConfig.SecurityOpt = append(hostConfig.SecurityOpt, opts...)
 	hostConfig.SecurityOpt = append(hostConfig.SecurityOpt, opts...)
-	if hostConfig.MemorySwappiness == nil {
-		defaultSwappiness := int64(-1)
-		hostConfig.MemorySwappiness = &defaultSwappiness
-	}
 	if hostConfig.OomKillDisable == nil {
 	if hostConfig.OomKillDisable == nil {
 		defaultOomKillDisable := false
 		defaultOomKillDisable := false
 		hostConfig.OomKillDisable = &defaultOomKillDisable
 		hostConfig.OomKillDisable = &defaultOomKillDisable
@@ -296,6 +292,7 @@ func (daemon *Daemon) adaptContainerSettings(hostConfig *containertypes.HostConf
 
 
 func verifyContainerResources(resources *containertypes.Resources, sysInfo *sysinfo.SysInfo, update bool) ([]string, error) {
 func verifyContainerResources(resources *containertypes.Resources, sysInfo *sysinfo.SysInfo, update bool) ([]string, error) {
 	warnings := []string{}
 	warnings := []string{}
+	fixMemorySwappiness(resources)
 
 
 	// memory subsystem checks and adjustments
 	// memory subsystem checks and adjustments
 	if resources.Memory != 0 && resources.Memory < linuxMinMemory {
 	if resources.Memory != 0 && resources.Memory < linuxMinMemory {
@@ -318,14 +315,14 @@ func verifyContainerResources(resources *containertypes.Resources, sysInfo *sysi
 	if resources.Memory == 0 && resources.MemorySwap > 0 && !update {
 	if resources.Memory == 0 && resources.MemorySwap > 0 && !update {
 		return warnings, fmt.Errorf("You should always set the Memory limit when using Memoryswap limit, see usage")
 		return warnings, fmt.Errorf("You should always set the Memory limit when using Memoryswap limit, see usage")
 	}
 	}
-	if resources.MemorySwappiness != nil && *resources.MemorySwappiness != -1 && !sysInfo.MemorySwappiness {
+	if resources.MemorySwappiness != nil && !sysInfo.MemorySwappiness {
 		warnings = append(warnings, "Your kernel does not support memory swappiness capabilities or the cgroup is not mounted. Memory swappiness discarded.")
 		warnings = append(warnings, "Your kernel does not support memory swappiness capabilities or the cgroup is not mounted. Memory swappiness discarded.")
 		logrus.Warn("Your kernel does not support memory swappiness capabilities, or the cgroup is not mounted. Memory swappiness discarded.")
 		logrus.Warn("Your kernel does not support memory swappiness capabilities, or the cgroup is not mounted. Memory swappiness discarded.")
 		resources.MemorySwappiness = nil
 		resources.MemorySwappiness = nil
 	}
 	}
 	if resources.MemorySwappiness != nil {
 	if resources.MemorySwappiness != nil {
 		swappiness := *resources.MemorySwappiness
 		swappiness := *resources.MemorySwappiness
-		if swappiness < -1 || swappiness > 100 {
+		if swappiness < 0 || swappiness > 100 {
 			return warnings, fmt.Errorf("Invalid value: %v, valid memory swappiness range is 0-100", swappiness)
 			return warnings, fmt.Errorf("Invalid value: %v, valid memory swappiness range is 0-100", swappiness)
 		}
 		}
 	}
 	}

+ 2 - 2
daemon/daemon_windows.go

@@ -100,7 +100,7 @@ func (daemon *Daemon) adaptContainerSettings(hostConfig *containertypes.HostConf
 
 
 func verifyContainerResources(resources *containertypes.Resources, isHyperv bool) ([]string, error) {
 func verifyContainerResources(resources *containertypes.Resources, isHyperv bool) ([]string, error) {
 	warnings := []string{}
 	warnings := []string{}
-
+	fixMemorySwappiness(resources)
 	if !isHyperv {
 	if !isHyperv {
 		// The processor resource controls are mutually exclusive on
 		// The processor resource controls are mutually exclusive on
 		// Windows Server Containers, the order of precedence is
 		// Windows Server Containers, the order of precedence is
@@ -197,7 +197,7 @@ func verifyContainerResources(resources *containertypes.Resources, isHyperv bool
 	if resources.MemorySwap != 0 {
 	if resources.MemorySwap != 0 {
 		return warnings, fmt.Errorf("invalid option: Windows does not support MemorySwap")
 		return warnings, fmt.Errorf("invalid option: Windows does not support MemorySwap")
 	}
 	}
-	if resources.MemorySwappiness != nil && *resources.MemorySwappiness != -1 {
+	if resources.MemorySwappiness != nil {
 		return warnings, fmt.Errorf("invalid option: Windows does not support MemorySwappiness")
 		return warnings, fmt.Errorf("invalid option: Windows does not support MemorySwappiness")
 	}
 	}
 	if resources.OomKillDisable != nil && *resources.OomKillDisable {
 	if resources.OomKillDisable != nil && *resources.OomKillDisable {

+ 1 - 1
integration-cli/docker_api_containers_test.go

@@ -1448,7 +1448,7 @@ func (s *DockerSuite) TestPostContainersCreateMemorySwappinessHostConfigOmitted(
 	var containerJSON types.ContainerJSON
 	var containerJSON types.ContainerJSON
 	c.Assert(json.Unmarshal(body, &containerJSON), check.IsNil)
 	c.Assert(json.Unmarshal(body, &containerJSON), check.IsNil)
 
 
-	c.Assert(*containerJSON.HostConfig.MemorySwappiness, check.Equals, int64(-1))
+	c.Assert(containerJSON.HostConfig.MemorySwappiness, check.IsNil)
 }
 }
 
 
 // check validation is done daemon side and not only in cli
 // check validation is done daemon side and not only in cli