From 1c865e967c1dec60e5eaecbb4d8f9a22fd63e7f0 Mon Sep 17 00:00:00 2001 From: Ant Kutschera <1108507+maxant@users.noreply.github.com> Date: Tue, 26 Apr 2022 21:13:06 +0200 Subject: [PATCH 1/3] 1546 suggested feature --- .../inc/external/_property_configuration.adoc | 3 + .../asciidoc/inc/start/_configuration.adoc | 3 + .../docker/access/ContainerHostConfig.java | 13 ++-- .../docker/config/RunImageConfiguration.java | 13 ++++ .../compose/DockerComposeConfigHandler.java | 17 ++++- .../compose/DockerComposeServiceWrapper.java | 23 ++---- .../config/handler/property/ConfigKey.java | 1 + .../property/PropertyConfigHandler.java | 28 ++----- .../maven/docker/service/RunService.java | 74 ++++--------------- .../fabric8/maven/docker/UrlBuilderTest.java | 20 +++-- .../handler/AbstractConfigHandlerTest.java | 1 + .../DockerComposeConfigHandlerTest.java | 1 + .../property/PropertyConfigHandlerTest.java | 38 +++------- .../maven/docker/service/RunServiceTest.java | 47 +++--------- src/test/resources/compose/docker-compose.yml | 1 + .../docker/containerCreateConfigAll.json | 1 + .../docker/containerHostConfigAll.json | 1 + 17 files changed, 106 insertions(+), 179 deletions(-) diff --git a/src/main/asciidoc/inc/external/_property_configuration.adoc b/src/main/asciidoc/inc/external/_property_configuration.adoc index 9f3b7a942..e4aec68c0 100644 --- a/src/main/asciidoc/inc/external/_property_configuration.adoc +++ b/src/main/asciidoc/inc/external/_property_configuration.adoc @@ -231,6 +231,9 @@ See <>. | *docker.memorySwap* | Total memory limit (memory + swap) in bytes. Set `docker.memorySwap` equal to `docker.memory` to disable swap. Set to `-1` to allow unlimited swap. +| *docker.memorySwappiness* +| Tune a container's memory swappiness behavior. Accepts an integer between 0 and 100. + | *docker.name* | Image name diff --git a/src/main/asciidoc/inc/start/_configuration.adoc b/src/main/asciidoc/inc/start/_configuration.adoc index 11f794ad8..a58cbb4dd 100644 --- a/src/main/asciidoc/inc/start/_configuration.adoc +++ b/src/main/asciidoc/inc/start/_configuration.adoc @@ -92,6 +92,9 @@ The `` configuration element knows the following sub elements: | *memorySwap* | Total memory limit (memory + swap) in bytes. Set `memorySwap` equal to `memory` to disable swap. Set to `-1` to allow unlimited swap. +| *memorySwappiness* +| Tune a container's memory swappiness behavior. Accepts an integer between 0 and 100. + | *namingStrategy* a| *This option is deprecated, please use a `containerNamePattern` instead* Naming strategy for how the container name is created: diff --git a/src/main/java/io/fabric8/maven/docker/access/ContainerHostConfig.java b/src/main/java/io/fabric8/maven/docker/access/ContainerHostConfig.java index c688c32e1..b251b63ba 100644 --- a/src/main/java/io/fabric8/maven/docker/access/ContainerHostConfig.java +++ b/src/main/java/io/fabric8/maven/docker/access/ContainerHostConfig.java @@ -2,6 +2,10 @@ import com.google.gson.JsonArray; import com.google.gson.JsonObject; +import io.fabric8.maven.docker.config.LogConfiguration; +import io.fabric8.maven.docker.config.UlimitConfig; +import io.fabric8.maven.docker.util.EnvUtil; +import io.fabric8.maven.docker.util.JsonFactory; import java.net.InetAddress; import java.net.UnknownHostException; @@ -9,11 +13,6 @@ import java.util.List; import java.util.Map; -import io.fabric8.maven.docker.config.LogConfiguration; -import io.fabric8.maven.docker.config.UlimitConfig; -import io.fabric8.maven.docker.util.EnvUtil; -import io.fabric8.maven.docker.util.JsonFactory; - public class ContainerHostConfig { final JsonObject startConfig = new JsonObject(); @@ -63,6 +62,10 @@ public ContainerHostConfig memorySwap(Long memorySwap) { return add("MemorySwap", memorySwap); } + public ContainerHostConfig memorySwappiness(Long memorySwappiness) { + return add("MemorySwappiness", memorySwappiness); + } + public ContainerHostConfig dns(List dns) { return addAsArray("Dns", dns); } diff --git a/src/main/java/io/fabric8/maven/docker/config/RunImageConfiguration.java b/src/main/java/io/fabric8/maven/docker/config/RunImageConfiguration.java index 6c7102496..2c73fa3c5 100644 --- a/src/main/java/io/fabric8/maven/docker/config/RunImageConfiguration.java +++ b/src/main/java/io/fabric8/maven/docker/config/RunImageConfiguration.java @@ -82,6 +82,10 @@ public boolean isDefault() { @Parameter private Long memorySwap; + // Tune a container's memory swappiness behavior. Accepts an integer between 0 and 100. + @Parameter + private Long memorySwappiness; + // Path to a file where the dynamically mapped properties are written to @Parameter private String portPropertyFile; @@ -275,6 +279,10 @@ public Long getMemorySwap() { return memorySwap; } + public Long getMemorySwappiness() { + return memorySwappiness; + } + public String getIsolation() { return isolation; } public Long getCpuShares() { @@ -537,6 +545,11 @@ public Builder memorySwap(Long memorySwap) { return this; } + public Builder memorySwappiness(Long memorySwappiness) { + config.memorySwappiness = memorySwappiness; + return this; + } + public Builder capAdd(List capAdd) { config.capAdd = capAdd; return this; diff --git a/src/main/java/io/fabric8/maven/docker/config/handler/compose/DockerComposeConfigHandler.java b/src/main/java/io/fabric8/maven/docker/config/handler/compose/DockerComposeConfigHandler.java index d22664271..0d0fcfca9 100644 --- a/src/main/java/io/fabric8/maven/docker/config/handler/compose/DockerComposeConfigHandler.java +++ b/src/main/java/io/fabric8/maven/docker/config/handler/compose/DockerComposeConfigHandler.java @@ -1,9 +1,8 @@ package io.fabric8.maven.docker.config.handler.compose; -import java.io.*; -import java.util.*; - -import io.fabric8.maven.docker.config.*; +import io.fabric8.maven.docker.config.BuildImageConfiguration; +import io.fabric8.maven.docker.config.ImageConfiguration; +import io.fabric8.maven.docker.config.RunImageConfiguration; import io.fabric8.maven.docker.config.handler.ExternalConfigHandler; import io.fabric8.maven.docker.config.handler.ExternalConfigHandlerException; import io.fabric8.maven.docker.util.DeepCopy; @@ -14,6 +13,15 @@ import org.apache.maven.shared.filtering.MavenReaderFilterRequest; import org.yaml.snakeyaml.Yaml; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileReader; +import java.io.Reader; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Map; + import static io.fabric8.maven.docker.config.handler.compose.ComposeUtils.resolveAbsolutely; import static io.fabric8.maven.docker.config.handler.compose.ComposeUtils.resolveComposeFileAbsolutely; @@ -205,6 +213,7 @@ private RunImageConfiguration createRunConfiguration(DockerComposeServiceWrapper // mac_address n.s. .memory(wrapper.getMemory()) .memorySwap(wrapper.getMemorySwap()) + .memorySwappiness(wrapper.getMemorySwappiness()) .privileged(wrapper.getPrivileged()) // read_only n.s. .restartPolicy(wrapper.getRestartPolicy()) diff --git a/src/main/java/io/fabric8/maven/docker/config/handler/compose/DockerComposeServiceWrapper.java b/src/main/java/io/fabric8/maven/docker/config/handler/compose/DockerComposeServiceWrapper.java index 8aae77a7e..bca70a8ad 100644 --- a/src/main/java/io/fabric8/maven/docker/config/handler/compose/DockerComposeServiceWrapper.java +++ b/src/main/java/io/fabric8/maven/docker/config/handler/compose/DockerComposeServiceWrapper.java @@ -1,22 +1,11 @@ package io.fabric8.maven.docker.config.handler.compose; -import java.io.File; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import io.fabric8.maven.docker.config.Arguments; -import io.fabric8.maven.docker.config.ImageConfiguration; -import io.fabric8.maven.docker.config.LogConfiguration; -import io.fabric8.maven.docker.config.NetworkConfig; -import io.fabric8.maven.docker.config.RestartPolicy; -import io.fabric8.maven.docker.config.RunVolumeConfiguration; -import io.fabric8.maven.docker.config.UlimitConfig; +import io.fabric8.maven.docker.config.*; import io.fabric8.maven.docker.util.VolumeBindingUtil; +import java.io.File; +import java.util.*; + class DockerComposeServiceWrapper { @@ -309,6 +298,10 @@ Long getMemorySwap() { return asLong("memswap_limit"); } + Long getMemorySwappiness() { + return asLong("mem_swappiness"); + } + Boolean getPrivileged() { return asBoolean("privileged"); } diff --git a/src/main/java/io/fabric8/maven/docker/config/handler/property/ConfigKey.java b/src/main/java/io/fabric8/maven/docker/config/handler/property/ConfigKey.java index 27bbb8086..37fd06bcb 100644 --- a/src/main/java/io/fabric8/maven/docker/config/handler/property/ConfigKey.java +++ b/src/main/java/io/fabric8/maven/docker/config/handler/property/ConfigKey.java @@ -91,6 +91,7 @@ public enum ConfigKey { MAINTAINER, MEMORY, MEMORY_SWAP, + MEMORY_SWAPPINESS, NAME, NAMING_STRATEGY, NET, diff --git a/src/main/java/io/fabric8/maven/docker/config/handler/property/PropertyConfigHandler.java b/src/main/java/io/fabric8/maven/docker/config/handler/property/PropertyConfigHandler.java index 937c7b73a..15276f7ac 100644 --- a/src/main/java/io/fabric8/maven/docker/config/handler/property/PropertyConfigHandler.java +++ b/src/main/java/io/fabric8/maven/docker/config/handler/property/PropertyConfigHandler.java @@ -15,34 +15,17 @@ * limitations under the License. */ -import java.io.File; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.Properties; -import java.util.function.Supplier; - -import io.fabric8.maven.docker.config.Arguments; -import io.fabric8.maven.docker.config.AssemblyConfiguration; -import io.fabric8.maven.docker.config.BuildImageConfiguration; -import io.fabric8.maven.docker.config.CopyConfiguration; -import io.fabric8.maven.docker.config.HealthCheckConfiguration; -import io.fabric8.maven.docker.config.ImageConfiguration; -import io.fabric8.maven.docker.config.LogConfiguration; -import io.fabric8.maven.docker.config.NetworkConfig; -import io.fabric8.maven.docker.config.RestartPolicy; -import io.fabric8.maven.docker.config.RunImageConfiguration; -import io.fabric8.maven.docker.config.RunVolumeConfiguration; -import io.fabric8.maven.docker.config.UlimitConfig; -import io.fabric8.maven.docker.config.WaitConfiguration; -import io.fabric8.maven.docker.config.WatchImageConfiguration; +import io.fabric8.maven.docker.config.*; import io.fabric8.maven.docker.config.handler.ExternalConfigHandler; import io.fabric8.maven.docker.util.EnvUtil; import org.apache.maven.execution.MavenSession; import org.apache.maven.project.MavenProject; import org.codehaus.plexus.util.CollectionUtils; +import java.io.File; +import java.util.*; +import java.util.function.Supplier; + import static io.fabric8.maven.docker.config.handler.property.ConfigKey.*; /** @@ -210,6 +193,7 @@ private RunImageConfiguration extractRunConfiguration(ImageConfiguration fromCon .links(valueProvider.getList(LINKS, config == null ? null : config.getLinks())) .memory(valueProvider.getLong(MEMORY, config == null ? null : config.getMemory())) .memorySwap(valueProvider.getLong(MEMORY_SWAP, config == null ? null : config.getMemorySwap())) + .memorySwappiness(valueProvider.getLong(MEMORY_SWAPPINESS, config == null ? null : config.getMemorySwappiness())) .namingStrategy(valueProvider.getString(NAMING_STRATEGY, config == null || config.getNamingStrategy() == null ? null : config.getNamingStrategy().name())) .exposedPropertyKey(valueProvider.getString(EXPOSED_PROPERTY_KEY, config == null ? null : config.getExposedPropertyKey())) .portPropertyFile(valueProvider.getString(PORT_PROPERTY_FILE, config == null ? null : config.getPortPropertyFile())) diff --git a/src/main/java/io/fabric8/maven/docker/service/RunService.java b/src/main/java/io/fabric8/maven/docker/service/RunService.java index 11cb2f563..5c2482a64 100644 --- a/src/main/java/io/fabric8/maven/docker/service/RunService.java +++ b/src/main/java/io/fabric8/maven/docker/service/RunService.java @@ -1,73 +1,24 @@ package io.fabric8.maven.docker.service; -import static io.fabric8.maven.docker.util.VolumeBindingUtil.resolveRelativeVolumeBindings; - -/* - * - * Copyright 2014 Roland Huss - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import java.io.File; -import java.time.temporal.ChronoUnit; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.Date; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Properties; -import java.util.Set; -import java.util.StringJoiner; -import java.util.concurrent.Callable; -import java.util.concurrent.ExecutionException; - -import io.fabric8.maven.docker.access.ContainerCreateConfig; -import io.fabric8.maven.docker.access.ContainerHostConfig; -import io.fabric8.maven.docker.access.ContainerNetworkingConfig; -import io.fabric8.maven.docker.access.DockerAccess; -import io.fabric8.maven.docker.access.DockerAccessException; -import io.fabric8.maven.docker.access.ExecException; -import io.fabric8.maven.docker.access.NetworkCreateConfig; -import io.fabric8.maven.docker.access.PortMapping; -import io.fabric8.maven.docker.config.Arguments; -import io.fabric8.maven.docker.config.ImageConfiguration; -import io.fabric8.maven.docker.config.NetworkConfig; -import io.fabric8.maven.docker.config.RestartPolicy; -import io.fabric8.maven.docker.config.RunImageConfiguration; -import io.fabric8.maven.docker.config.RunVolumeConfiguration; -import io.fabric8.maven.docker.config.StopMode; -import io.fabric8.maven.docker.config.VolumeConfiguration; +import io.fabric8.maven.docker.access.*; +import io.fabric8.maven.docker.config.*; import io.fabric8.maven.docker.log.LogOutputSpecFactory; -import io.fabric8.maven.docker.model.Container; -import io.fabric8.maven.docker.model.ContainerDetails; -import io.fabric8.maven.docker.model.ExecDetails; -import io.fabric8.maven.docker.model.Network; -import io.fabric8.maven.docker.model.PortBindingException; +import io.fabric8.maven.docker.model.*; import io.fabric8.maven.docker.service.ContainerTracker.ContainerShutdownDescriptor; -import io.fabric8.maven.docker.util.ContainerNamingUtil; -import io.fabric8.maven.docker.util.EnvUtil; -import io.fabric8.maven.docker.util.GavLabel; -import io.fabric8.maven.docker.util.Logger; -import io.fabric8.maven.docker.util.StartOrderResolver; +import io.fabric8.maven.docker.util.*; import io.fabric8.maven.docker.wait.WaitTimeoutException; import io.fabric8.maven.docker.wait.WaitUtil; import net.jodah.failsafe.Failsafe; import net.jodah.failsafe.RetryPolicy; +import java.io.File; +import java.time.temporal.ChronoUnit; +import java.util.*; +import java.util.concurrent.Callable; +import java.util.concurrent.ExecutionException; + +import static io.fabric8.maven.docker.util.VolumeBindingUtil.resolveRelativeVolumeBindings; + /** * Service class for helping in running containers. * @@ -430,6 +381,7 @@ ContainerHostConfig createContainerHostConfig(RunImageConfiguration runConfig, P .securityOpts(runConfig.getSecurityOpts()) .memory(runConfig.getMemory()) .memorySwap(runConfig.getMemorySwap()) + .memorySwappiness(runConfig.getMemorySwappiness()) .restartPolicy(restartPolicy.getName(), restartPolicy.getRetry()) .logConfig(runConfig.getLogConfiguration()) .tmpfs(runConfig.getTmpfs()) diff --git a/src/test/java/io/fabric8/maven/docker/UrlBuilderTest.java b/src/test/java/io/fabric8/maven/docker/UrlBuilderTest.java index 10b028e6c..8444ad7c6 100644 --- a/src/test/java/io/fabric8/maven/docker/UrlBuilderTest.java +++ b/src/test/java/io/fabric8/maven/docker/UrlBuilderTest.java @@ -16,16 +16,19 @@ * limitations under the License. */ -import java.io.UnsupportedEncodingException; -import java.net.*; -import java.util.HashMap; - import io.fabric8.maven.docker.access.BuildOptions; import io.fabric8.maven.docker.access.CreateImageOptions; import io.fabric8.maven.docker.access.UrlBuilder; import io.fabric8.maven.docker.util.ImageName; import org.junit.Test; +import java.io.UnsupportedEncodingException; +import java.net.MalformedURLException; +import java.net.URI; +import java.net.URISyntaxException; +import java.net.URLEncoder; +import java.util.HashMap; + import static org.junit.Assert.*; /** @@ -49,14 +52,15 @@ public void buildImage() throws URISyntaxException { HashMap options = new HashMap<>(); options.put("cpusetcpus", "1"); options.put("memswap", "-1"); - assertEquals("/1.0/build?buildargs=%7B%22k1%22%3A%22v1%22%2C%22k2%22%3A%22v2%22%7D&cpusetcpus=1&memswap=-1&t=image1", + options.put("memswappiness", "-1"); // TODO is this right? + assertEquals("/1.0/build?buildargs=%7B%22k1%22%3A%22v1%22%2C%22k2%22%3A%22v2%22%7D&cpusetcpus=1&memswap=-1&memswappiness=-1&t=image1", builder.buildImage("image1", new BuildOptions(options).buildArgs(m))); options.put("dockerfile","blub"); - assertEquals("/1.0/build?cpusetcpus=1&dockerfile=bla&memswap=-1&t=image1", + assertEquals("/1.0/build?cpusetcpus=1&dockerfile=bla&memswap=-1&memswappiness=-1&t=image1", builder.buildImage("image1", new BuildOptions(options).dockerfile("bla"))); - assertEquals("/1.0/build?cpusetcpus=1&dockerfile=holla&memswap=-1&t=image1", + assertEquals("/1.0/build?cpusetcpus=1&dockerfile=holla&memswap=-1&memswappiness=-1&t=image1", builder.buildImage("image1", new BuildOptions(options).dockerfile("bla").addOption("dockerfile","holla"))); - assertEquals("/1.0/build?cpusetcpus=1&dockerfile=bla&memswap=-1&squash=1&t=image1", + assertEquals("/1.0/build?cpusetcpus=1&dockerfile=bla&memswap=-1&memswappiness=-1&squash=1&t=image1", builder.buildImage("image1", new BuildOptions(options).dockerfile("bla").squash(true))); } diff --git a/src/test/java/io/fabric8/maven/docker/config/handler/AbstractConfigHandlerTest.java b/src/test/java/io/fabric8/maven/docker/config/handler/AbstractConfigHandlerTest.java index 58119b3e9..57d33058d 100644 --- a/src/test/java/io/fabric8/maven/docker/config/handler/AbstractConfigHandlerTest.java +++ b/src/test/java/io/fabric8/maven/docker/config/handler/AbstractConfigHandlerTest.java @@ -37,6 +37,7 @@ protected void validateRunConfiguration(RunImageConfiguration runConfig) { assertEquals(a("redis"), runConfig.getLinks()); assertEquals((Long) 1L, runConfig.getMemory()); assertEquals((Long) 1L, runConfig.getMemorySwap()); + assertEquals((Long) 1L, runConfig.getMemorySwappiness()); assertEquals((Long) 1000000000L, runConfig.getCpus()); assertEquals("default", runConfig.getIsolation()); assertEquals((Long) 1L, runConfig.getCpuShares()); diff --git a/src/test/java/io/fabric8/maven/docker/config/handler/compose/DockerComposeConfigHandlerTest.java b/src/test/java/io/fabric8/maven/docker/config/handler/compose/DockerComposeConfigHandlerTest.java index ebc66f5fd..7ba1e8980 100644 --- a/src/test/java/io/fabric8/maven/docker/config/handler/compose/DockerComposeConfigHandlerTest.java +++ b/src/test/java/io/fabric8/maven/docker/config/handler/compose/DockerComposeConfigHandlerTest.java @@ -164,6 +164,7 @@ void validateRunConfiguration(RunImageConfiguration runConfig) { assertEquals(a("redis","link1"), runConfig.getLinks()); assertEquals((Long) 1L, runConfig.getMemory()); assertEquals((Long) 1L, runConfig.getMemorySwap()); + assertEquals((Long) 1L, runConfig.getMemorySwappiness()); assertEquals("0,1", runConfig.getCpuSet()); assertEquals((Long)1000000000L, runConfig.getCpus()); assertEquals("default", runConfig.getIsolation()); diff --git a/src/test/java/io/fabric8/maven/docker/config/handler/property/PropertyConfigHandlerTest.java b/src/test/java/io/fabric8/maven/docker/config/handler/property/PropertyConfigHandlerTest.java index 27ecc327e..e5cb8e23f 100644 --- a/src/test/java/io/fabric8/maven/docker/config/handler/property/PropertyConfigHandlerTest.java +++ b/src/test/java/io/fabric8/maven/docker/config/handler/property/PropertyConfigHandlerTest.java @@ -15,29 +15,7 @@ * limitations under the License. */ -import java.io.File; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Properties; - -import io.fabric8.maven.docker.config.Arguments; -import io.fabric8.maven.docker.config.AssemblyConfiguration; -import io.fabric8.maven.docker.config.BuildImageConfiguration; -import io.fabric8.maven.docker.config.CleanupMode; -import io.fabric8.maven.docker.config.ConfigHelper; -import io.fabric8.maven.docker.config.CopyConfiguration; -import io.fabric8.maven.docker.config.ImageConfiguration; -import io.fabric8.maven.docker.config.LogConfiguration; -import io.fabric8.maven.docker.config.RestartPolicy; -import io.fabric8.maven.docker.config.RunImageConfiguration; -import io.fabric8.maven.docker.config.UlimitConfig; -import io.fabric8.maven.docker.config.WaitConfiguration; +import io.fabric8.maven.docker.config.*; import io.fabric8.maven.docker.config.handler.AbstractConfigHandlerTest; import mockit.Expectations; import mockit.Mocked; @@ -47,14 +25,14 @@ import org.junit.Before; import org.junit.Test; +import java.io.File; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.*; + import static io.fabric8.maven.docker.config.BuildImageConfiguration.DEFAULT_CLEANUP; import static io.fabric8.maven.docker.config.BuildImageConfiguration.DEFAULT_FILTER; -import static org.junit.Assert.assertArrayEquals; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertTrue; +import static org.junit.Assert.*; /** * @author roland @@ -1085,6 +1063,7 @@ protected void validateRunConfiguration(RunImageConfiguration runConfig) { assertEquals(a("redis"), runConfig.getLinks()); assertEquals((Long) 1L, runConfig.getMemory()); assertEquals((Long) 1L, runConfig.getMemorySwap()); + assertEquals((Long) 1L, runConfig.getMemorySwappiness()); assertEquals((Long) 1000000000L, runConfig.getCpus()); assertEquals("default",runConfig.getIsolation()); assertEquals((Long) 1L, runConfig.getCpuShares()); @@ -1212,6 +1191,7 @@ private String[] getTestData() { k(ConfigKey.MAINTAINER), "fabric8io@redhat.com", k(ConfigKey.MEMORY), "1", k(ConfigKey.MEMORY_SWAP), "1", + k(ConfigKey.MEMORY_SWAPPINESS), "1", k(ConfigKey.NAME), "image", k(ConfigKey.PORT_PROPERTY_FILE), "/tmp/props.txt", k(ConfigKey.PORTS) + ".1", "8081:8080", diff --git a/src/test/java/io/fabric8/maven/docker/service/RunServiceTest.java b/src/test/java/io/fabric8/maven/docker/service/RunServiceTest.java index 8cc970ebf..abccb96e2 100644 --- a/src/test/java/io/fabric8/maven/docker/service/RunServiceTest.java +++ b/src/test/java/io/fabric8/maven/docker/service/RunServiceTest.java @@ -3,13 +3,18 @@ import com.google.common.collect.ImmutableMap; import com.google.gson.Gson; import com.google.gson.JsonObject; - -import io.fabric8.maven.docker.access.ExecException; -import io.fabric8.maven.docker.config.StopMode; -import io.fabric8.maven.docker.config.VolumeConfiguration; +import io.fabric8.maven.docker.access.*; +import io.fabric8.maven.docker.config.*; +import io.fabric8.maven.docker.log.LogOutputSpec; +import io.fabric8.maven.docker.log.LogOutputSpecFactory; import io.fabric8.maven.docker.model.Container; import io.fabric8.maven.docker.model.PortBindingException; import io.fabric8.maven.docker.util.GavLabel; +import io.fabric8.maven.docker.util.JsonFactory; +import io.fabric8.maven.docker.util.Logger; +import mockit.Expectations; +import mockit.Mocked; +import mockit.Verifications; import org.apache.commons.io.IOUtils; import org.apache.maven.execution.MavenSession; import org.apache.maven.project.MavenProject; @@ -20,38 +25,9 @@ import java.io.File; import java.io.IOException; import java.lang.reflect.Field; -import java.util.Arrays; -import java.util.Collections; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Properties; - -import io.fabric8.maven.docker.access.ContainerCreateConfig; -import io.fabric8.maven.docker.access.ContainerHostConfig; -import io.fabric8.maven.docker.access.DockerAccess; -import io.fabric8.maven.docker.access.DockerAccessException; -import io.fabric8.maven.docker.access.PortMapping; -import io.fabric8.maven.docker.config.Arguments; -import io.fabric8.maven.docker.config.ImageConfiguration; -import io.fabric8.maven.docker.config.NetworkConfig; -import io.fabric8.maven.docker.config.RestartPolicy; -import io.fabric8.maven.docker.config.RunImageConfiguration; -import io.fabric8.maven.docker.config.RunVolumeConfiguration; -import io.fabric8.maven.docker.config.UlimitConfig; -import io.fabric8.maven.docker.config.WaitConfiguration; -import io.fabric8.maven.docker.log.LogOutputSpec; -import io.fabric8.maven.docker.log.LogOutputSpecFactory; -import io.fabric8.maven.docker.util.JsonFactory; -import io.fabric8.maven.docker.util.Logger; -import mockit.Expectations; -import mockit.Mocked; -import mockit.Verifications; +import java.util.*; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertThrows; -import static org.junit.Assert.assertTrue; +import static org.junit.Assert.*; /** * This test need to be refactored. In fact, testing Mojos must be setup correctly at all. Blame on me that there are so @@ -437,6 +413,7 @@ private void givenARunConfiguration() { .shmSize(1024L) .memory(1L) .memorySwap(1L) + .memorySwappiness(1L) .cpus(1000000000L) .cpuSet("0,1") .isolation("default") diff --git a/src/test/resources/compose/docker-compose.yml b/src/test/resources/compose/docker-compose.yml index 06fc482b7..84743c5f3 100644 --- a/src/test/resources/compose/docker-compose.yml +++ b/src/test/resources/compose/docker-compose.yml @@ -51,6 +51,7 @@ services: # key: value mem_limit: 1 memswap_limit: 1 + mem_swappiness: 1 # net: "host" # pid: "host" ports: diff --git a/src/test/resources/docker/containerCreateConfigAll.json b/src/test/resources/docker/containerCreateConfigAll.json index 00e4e30b7..7544f8583 100644 --- a/src/test/resources/docker/containerCreateConfigAll.json +++ b/src/test/resources/docker/containerCreateConfigAll.json @@ -56,6 +56,7 @@ ], "Memory":1, "MemorySwap":1, + "MemorySwappiness":60, "RestartPolicy":{ "Name":"on-failure", "MaximumRetryCount":1 diff --git a/src/test/resources/docker/containerHostConfigAll.json b/src/test/resources/docker/containerHostConfigAll.json index 02d5d5d31..27665f59e 100644 --- a/src/test/resources/docker/containerHostConfigAll.json +++ b/src/test/resources/docker/containerHostConfigAll.json @@ -36,6 +36,7 @@ ], "Memory":1, "MemorySwap":1, + "MemorySwappiness":60, "RestartPolicy":{ "Name":"on-failure", "MaximumRetryCount":1 From b43df2758f9de8b805ba162d90a169d9479a5ad2 Mon Sep 17 00:00:00 2001 From: Ant Kutschera <1108507+maxant@users.noreply.github.com> Date: Fri, 20 May 2022 22:25:50 +0200 Subject: [PATCH 2/3] 1546 fix test --- .../java/io/fabric8/maven/docker/service/RunServiceTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/io/fabric8/maven/docker/service/RunServiceTest.java b/src/test/java/io/fabric8/maven/docker/service/RunServiceTest.java index abccb96e2..6df709e5c 100644 --- a/src/test/java/io/fabric8/maven/docker/service/RunServiceTest.java +++ b/src/test/java/io/fabric8/maven/docker/service/RunServiceTest.java @@ -413,7 +413,7 @@ private void givenARunConfiguration() { .shmSize(1024L) .memory(1L) .memorySwap(1L) - .memorySwappiness(1L) + .memorySwappiness(60L) .cpus(1000000000L) .cpuSet("0,1") .isolation("default") From 80946a830a605eb33eb2b91c004b3e2185c6e815 Mon Sep 17 00:00:00 2001 From: Ant Kutschera <1108507+maxant@users.noreply.github.com> Date: Fri, 20 May 2022 22:40:14 +0200 Subject: [PATCH 3/3] 1546 address sonar issue after refactoring merged from main --- .../property/PropertyConfigHandler.java | 30 ++++--------------- 1 file changed, 6 insertions(+), 24 deletions(-) diff --git a/src/main/java/io/fabric8/maven/docker/config/handler/property/PropertyConfigHandler.java b/src/main/java/io/fabric8/maven/docker/config/handler/property/PropertyConfigHandler.java index 6f5d811e6..e9244d723 100644 --- a/src/main/java/io/fabric8/maven/docker/config/handler/property/PropertyConfigHandler.java +++ b/src/main/java/io/fabric8/maven/docker/config/handler/property/PropertyConfigHandler.java @@ -15,35 +15,17 @@ * limitations under the License. */ -import java.io.File; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.Properties; -import java.util.function.Supplier; - -import io.fabric8.maven.docker.config.Arguments; -import io.fabric8.maven.docker.config.AssemblyConfiguration; -import io.fabric8.maven.docker.config.BuildImageConfiguration; -import io.fabric8.maven.docker.config.BuildXConfiguration; -import io.fabric8.maven.docker.config.CopyConfiguration; -import io.fabric8.maven.docker.config.HealthCheckConfiguration; -import io.fabric8.maven.docker.config.ImageConfiguration; -import io.fabric8.maven.docker.config.LogConfiguration; -import io.fabric8.maven.docker.config.NetworkConfig; -import io.fabric8.maven.docker.config.RestartPolicy; -import io.fabric8.maven.docker.config.RunImageConfiguration; -import io.fabric8.maven.docker.config.RunVolumeConfiguration; -import io.fabric8.maven.docker.config.UlimitConfig; -import io.fabric8.maven.docker.config.WaitConfiguration; -import io.fabric8.maven.docker.config.WatchImageConfiguration; +import io.fabric8.maven.docker.config.*; import io.fabric8.maven.docker.config.handler.ExternalConfigHandler; import io.fabric8.maven.docker.util.EnvUtil; import org.apache.maven.execution.MavenSession; import org.apache.maven.project.MavenProject; import org.codehaus.plexus.util.CollectionUtils; +import java.io.File; +import java.util.*; +import java.util.function.Supplier; + import static io.fabric8.maven.docker.config.handler.property.ConfigKey.*; /** @@ -216,7 +198,7 @@ private RunImageConfiguration extractRunConfiguration(ImageConfiguration fromCon .links(valueProvider.getList(LINKS, config.getLinks())) .memory(valueProvider.getLong(MEMORY, config.getMemory())) .memorySwap(valueProvider.getLong(MEMORY_SWAP, config.getMemorySwap())) - .memorySwappiness(valueProvider.getLong(MEMORY_SWAPPINESS, config == null ? null : config.getMemorySwappiness())) + .memorySwappiness(valueProvider.getLong(MEMORY_SWAPPINESS, config.getMemorySwappiness())) .namingStrategy(valueProvider.getString(NAMING_STRATEGY, config.getNamingStrategy() == null ? null : config.getNamingStrategy().name())) .exposedPropertyKey(valueProvider.getString(EXPOSED_PROPERTY_KEY, config.getExposedPropertyKey())) .portPropertyFile(valueProvider.getString(PORT_PROPERTY_FILE, config.getPortPropertyFile()))