Skip to content

Commit 1b961d8

Browse files
aidando73kiview
andauthored
Set default elasticsearch heap size to 2GB (#5684)
Co-authored-by: Kevin Wittek <[email protected]>
1 parent f639960 commit 1b961d8

File tree

4 files changed

+62
-0
lines changed

4 files changed

+62
-0
lines changed

modules/elasticsearch/src/main/java/org/testcontainers/elasticsearch/ElasticsearchContainer.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import lombok.extern.slf4j.Slf4j;
66
import org.apache.commons.io.IOUtils;
77
import org.apache.commons.lang3.StringUtils;
8+
import org.testcontainers.containers.BindMode;
89
import org.testcontainers.containers.GenericContainer;
910
import org.testcontainers.containers.wait.strategy.LogMessageWaitStrategy;
1011
import org.testcontainers.utility.Base58;
@@ -98,6 +99,13 @@ public ElasticsearchContainer(final DockerImageName dockerImageName) {
9899
logger().info("Starting an elasticsearch container using [{}]", dockerImageName);
99100
withNetworkAliases("elasticsearch-" + Base58.randomString(6));
100101
withEnv("discovery.type", "single-node");
102+
// Sets default memory of elasticsearch instance to 2GB
103+
// Spaces are deliberate to allow user to define additional jvm options as elasticsearch resolves option files lexicographically
104+
withClasspathResourceMapping(
105+
"elasticsearch-default-memory-vm.options",
106+
"/usr/share/elasticsearch/config/jvm.options.d/ elasticsearch-default-memory-vm.options",
107+
BindMode.READ_ONLY
108+
);
101109
addExposedPorts(ELASTICSEARCH_DEFAULT_PORT, ELASTICSEARCH_DEFAULT_TCP_PORT);
102110
this.isAtLeastMajorVersion8 =
103111
new ComparableVersion(dockerImageName.getVersionPart()).isGreaterThanOrEqualTo("8.0.0");
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
-Xms2147483648
2+
-Xmx2147483648

modules/elasticsearch/src/test/java/org/testcontainers/elasticsearch/ElasticsearchContainerTest.java

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import org.junit.After;
2020
import org.junit.Test;
2121
import org.testcontainers.DockerClientFactory;
22+
import org.testcontainers.containers.BindMode;
2223
import org.testcontainers.containers.wait.strategy.HttpWaitStrategy;
2324
import org.testcontainers.containers.wait.strategy.Wait;
2425
import org.testcontainers.images.RemoteDockerImage;
@@ -375,6 +376,46 @@ public void testElasticsearch8SecureByDefaultFailsSilentlyOnLatestImages() throw
375376
}
376377
}
377378

379+
@Test
380+
public void testElasticsearchDefaultMaxHeapSize() throws Exception {
381+
long defaultHeapSize = 2147483648L;
382+
383+
try (ElasticsearchContainer container = new ElasticsearchContainer(ELASTICSEARCH_IMAGE)) {
384+
container.start();
385+
assertElasticsearchContainerHasHeapSize(container, defaultHeapSize);
386+
}
387+
}
388+
389+
@Test
390+
public void testElasticsearchCustomMaxHeapSizeInEnvironmentVariable() throws Exception {
391+
long customHeapSize = 1574961152;
392+
393+
try (
394+
ElasticsearchContainer container = new ElasticsearchContainer(ELASTICSEARCH_IMAGE)
395+
.withEnv("ES_JAVA_OPTS", String.format("-Xms%d -Xmx%d", customHeapSize, customHeapSize))
396+
) {
397+
container.start();
398+
assertElasticsearchContainerHasHeapSize(container, customHeapSize);
399+
}
400+
}
401+
402+
@Test
403+
public void testElasticsearchCustomMaxHeapSizeInJvmOptionsFile() throws Exception {
404+
long customHeapSize = 1574961152;
405+
406+
try (
407+
ElasticsearchContainer container = new ElasticsearchContainer(ELASTICSEARCH_IMAGE)
408+
.withClasspathResourceMapping(
409+
"test-custom-memory-jvm.options",
410+
"/usr/share/elasticsearch/config/jvm.options.d/a-user-defined-jvm.options",
411+
BindMode.READ_ONLY
412+
);
413+
) {
414+
container.start();
415+
assertElasticsearchContainerHasHeapSize(container, customHeapSize);
416+
}
417+
}
418+
378419
private void tagImage(String sourceImage, String targetImage, String targetTag) throws InterruptedException {
379420
DockerClient dockerClient = DockerClientFactory.instance().client();
380421
dockerClient
@@ -438,4 +479,13 @@ private RestClient getAnonymousClient(ElasticsearchContainer container) {
438479

439480
return anonymousClient;
440481
}
482+
483+
private void assertElasticsearchContainerHasHeapSize(ElasticsearchContainer container, long heapSizeInBytes)
484+
throws Exception {
485+
Response response = getClient(container).performRequest(new Request("GET", "/_nodes/_all/jvm"));
486+
String responseBody = EntityUtils.toString(response.getEntity());
487+
assertThat(response.getStatusLine().getStatusCode()).isEqualTo(200);
488+
assertThat(responseBody).contains("\"heap_init_in_bytes\":" + heapSizeInBytes);
489+
assertThat(responseBody).contains("\"heap_max_in_bytes\":" + heapSizeInBytes);
490+
}
441491
}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
-Xms1574961152
2+
-Xmx1574961152

0 commit comments

Comments
 (0)