Browse code

Move OomKillDisable to resource

1. It's a cgroup api, fit the general defination that we take
cgroup options as kind of resource options.
2. It's common usage and very helpful as explained here:
https://github.com/docker/docker/pull/18270#issuecomment-160561316
3. It's already in `Resource` struct in
daemon/execdriver/driver_unix.go

Signed-off-by: Qiang Huang <h.huangqiang@huawei.com>

Qiang Huang authored on 2015/12/22 17:08:04
Showing 3 changed files
... ...
@@ -265,6 +265,10 @@ func verifyContainerResources(resources *runconfig.Resources) ([]string, error)
265 265
 		warnings = append(warnings, "You specified a kernel memory limit on a kernel older than 4.0. Kernel memory limits are experimental on older kernels, it won't work as expected and can cause your system to be unstable.")
266 266
 		logrus.Warnf("You specified a kernel memory limit on a kernel older than 4.0. Kernel memory limits are experimental on older kernels, it won't work as expected and can cause your system to be unstable.")
267 267
 	}
268
+	if resources.OomKillDisable && !sysInfo.OomKillDisable {
269
+		resources.OomKillDisable = false
270
+		return warnings, fmt.Errorf("Your kernel does not support oom kill disable.")
271
+	}
268 272
 
269 273
 	// cpu subsystem checks and adjustments
270 274
 	if resources.CPUShares > 0 && !sysInfo.CPUShares {
... ...
@@ -364,10 +368,6 @@ func verifyPlatformContainerSettings(daemon *Daemon, hostConfig *runconfig.HostC
364 364
 		return warnings, fmt.Errorf("SHM size must be greater then 0")
365 365
 	}
366 366
 
367
-	if hostConfig.OomKillDisable && !sysInfo.OomKillDisable {
368
-		hostConfig.OomKillDisable = false
369
-		return warnings, fmt.Errorf("Your kernel does not support oom kill disable.")
370
-	}
371 367
 	if hostConfig.OomScoreAdj < -1000 || hostConfig.OomScoreAdj > 1000 {
372 368
 		return warnings, fmt.Errorf("Invalid value %d, range for oom score adj is [-1000, 1000].", hostConfig.OomScoreAdj)
373 369
 	}
... ...
@@ -188,6 +188,7 @@ type Resources struct {
188 188
 	MemoryReservation    int64            // Memory soft limit (in bytes)
189 189
 	MemorySwap           int64            // Total memory usage (memory + swap); set `-1` to disable swap
190 190
 	MemorySwappiness     *int64           // Tuning container memory swappiness behaviour
191
+	OomKillDisable       bool             // Whether to disable OOM Killer or not
191 192
 	Ulimits              []*ulimit.Ulimit // List of ulimits to be set in the container
192 193
 }
193 194
 
... ...
@@ -216,7 +217,6 @@ type HostConfig struct {
216 216
 	IpcMode         IpcMode               // IPC namespace to use for the container
217 217
 	Links           []string              // List of links (in the name:alias form)
218 218
 	OomScoreAdj     int                   // Container preference for OOM-killing
219
-	OomKillDisable  bool                  // Whether to disable OOM Killer or not
220 219
 	PidMode         PidMode               // PID namespace to use for the container
221 220
 	Privileged      bool                  // Is the container in privileged mode
222 221
 	PublishAllPorts bool                  // Should docker publish all exposed port for the container
... ...
@@ -353,6 +353,7 @@ func Parse(cmd *flag.FlagSet, args []string) (*Config, *HostConfig, *flag.FlagSe
353 353
 		MemorySwap:           memorySwap,
354 354
 		MemorySwappiness:     flSwappiness,
355 355
 		KernelMemory:         KernelMemory,
356
+		OomKillDisable:       *flOomKillDisable,
356 357
 		CPUShares:            *flCPUShares,
357 358
 		CPUPeriod:            *flCPUPeriod,
358 359
 		CpusetCpus:           *flCpusetCpus,
... ...
@@ -397,7 +398,6 @@ func Parse(cmd *flag.FlagSet, args []string) (*Config, *HostConfig, *flag.FlagSe
397 397
 		Binds:           binds,
398 398
 		ContainerIDFile: *flContainerIDFile,
399 399
 		OomScoreAdj:     *flOomScoreAdj,
400
-		OomKillDisable:  *flOomKillDisable,
401 400
 		Privileged:      *flPrivileged,
402 401
 		PortBindings:    portBindings,
403 402
 		Links:           flLinks.GetAll(),