From 6d2e70b34d0bf2c97db338a15952ad94bb0933a8 Mon Sep 17 00:00:00 2001 From: Ryan Ernst Date: Tue, 13 Aug 2024 17:19:24 -0700 Subject: [PATCH 1/6] Fix windows memory locking Memory locking on Windows with the bundled jdk was broken by native access refactoring. This commit fixes the linking issue, as well as adds a packaging test to ensure memory locking is invoked on all supported platforms. --- .../nativeaccess/jdk/JdkKernel32Library.java | 2 +- .../packaging/test/MemoryLockingTests.java | 46 +++++++++++++++++++ 2 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 qa/packaging/src/test/java/org/elasticsearch/packaging/test/MemoryLockingTests.java diff --git a/libs/native/src/main21/java/org/elasticsearch/nativeaccess/jdk/JdkKernel32Library.java b/libs/native/src/main21/java/org/elasticsearch/nativeaccess/jdk/JdkKernel32Library.java index a3ddc0d59890d..5edc31d2e1e7b 100644 --- a/libs/native/src/main21/java/org/elasticsearch/nativeaccess/jdk/JdkKernel32Library.java +++ b/libs/native/src/main21/java/org/elasticsearch/nativeaccess/jdk/JdkKernel32Library.java @@ -56,7 +56,7 @@ class JdkKernel32Library implements Kernel32Library { ); private static final MethodHandle SetProcessWorkingSetSize$mh = downcallHandleWithError( "SetProcessWorkingSetSize", - FunctionDescriptor.of(ADDRESS, JAVA_LONG, JAVA_LONG) + FunctionDescriptor.of(JAVA_BOOLEAN, ADDRESS, JAVA_LONG, JAVA_LONG) ); private static final MethodHandle GetCompressedFileSizeW$mh = downcallHandleWithError( "GetCompressedFileSizeW", diff --git a/qa/packaging/src/test/java/org/elasticsearch/packaging/test/MemoryLockingTests.java b/qa/packaging/src/test/java/org/elasticsearch/packaging/test/MemoryLockingTests.java new file mode 100644 index 0000000000000..63fc79e0f94f1 --- /dev/null +++ b/qa/packaging/src/test/java/org/elasticsearch/packaging/test/MemoryLockingTests.java @@ -0,0 +1,46 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +package org.elasticsearch.packaging.test; + +import org.elasticsearch.packaging.util.ServerUtils; +import org.elasticsearch.packaging.util.docker.DockerRun; + +import java.util.Map; + +import static org.elasticsearch.packaging.util.docker.Docker.runContainer; +import static org.elasticsearch.packaging.util.docker.DockerRun.builder; + +public class MemoryLockingTests extends PackagingTestCase { + + public void test10Install() throws Exception { + install(); + } + + public void test20MemoryLockingEnabled() throws Exception { + configureAndRun(Map.of("bootstrap.memory_lock", "true")); + // TODO: very locking worked. logs? check memory of process? at least we know the process started successfully + stopElasticsearch(); + } + + public void configureAndRun(Map settings) throws Exception { + if (distribution().isDocker()) { + DockerRun builder = builder(); + settings.forEach(builder::envVar); + runContainer(distribution(), builder); + } else { + + for (var setting : settings.entrySet()) { + ServerUtils.addSettingToExistingConfiguration(installation.config, setting.getKey(), setting.getValue()); + } + ServerUtils.removeSettingFromExistingConfiguration(installation.config, "cluster.initial_master_nodes"); + } + + startElasticsearch(); + } +} From 01422e780b59df727fae8cf53c94df9da0d9c7c6 Mon Sep 17 00:00:00 2001 From: Ryan Ernst Date: Tue, 13 Aug 2024 17:22:07 -0700 Subject: [PATCH 2/6] Update docs/changelog/111866.yaml --- docs/changelog/111866.yaml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 docs/changelog/111866.yaml diff --git a/docs/changelog/111866.yaml b/docs/changelog/111866.yaml new file mode 100644 index 0000000000000..ee9aeb119167d --- /dev/null +++ b/docs/changelog/111866.yaml @@ -0,0 +1,5 @@ +pr: 111866 +summary: Fix windows memory locking +area: Infra/Core +type: bug +issues: [] From 67e39916af8cdcf770b57ff6765bcf8080e8a035 Mon Sep 17 00:00:00 2001 From: Ryan Ernst Date: Tue, 13 Aug 2024 19:59:57 -0700 Subject: [PATCH 3/6] try to avoid security auto configuration --- .../packaging/test/MemoryLockingTests.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/qa/packaging/src/test/java/org/elasticsearch/packaging/test/MemoryLockingTests.java b/qa/packaging/src/test/java/org/elasticsearch/packaging/test/MemoryLockingTests.java index 63fc79e0f94f1..0d32622be5e12 100644 --- a/qa/packaging/src/test/java/org/elasticsearch/packaging/test/MemoryLockingTests.java +++ b/qa/packaging/src/test/java/org/elasticsearch/packaging/test/MemoryLockingTests.java @@ -23,7 +23,17 @@ public void test10Install() throws Exception { } public void test20MemoryLockingEnabled() throws Exception { - configureAndRun(Map.of("bootstrap.memory_lock", "true")); + configureAndRun(Map.of( + "bootstrap.memory_lock", + "true", + "xpack.security.enabled", + "false", + "xpack.security.http.ssl.enabled", + "false", + "xpack.security.enrollment.enabled", + "false", + "discovery.type", + "single-node")); // TODO: very locking worked. logs? check memory of process? at least we know the process started successfully stopElasticsearch(); } From ef7d63a01d7821e90276a95c2a385ad985559896 Mon Sep 17 00:00:00 2001 From: Ryan Ernst Date: Wed, 14 Aug 2024 05:33:18 -0700 Subject: [PATCH 4/6] Update docs/changelog/111866.yaml --- docs/changelog/111866.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/changelog/111866.yaml b/docs/changelog/111866.yaml index ee9aeb119167d..34bf56da4dc9e 100644 --- a/docs/changelog/111866.yaml +++ b/docs/changelog/111866.yaml @@ -2,4 +2,5 @@ pr: 111866 summary: Fix windows memory locking area: Infra/Core type: bug -issues: [] +issues: + - 111847 From e5ff9f94bb578dcc40326bb1c304a50682ac3c89 Mon Sep 17 00:00:00 2001 From: Ryan Ernst Date: Wed, 14 Aug 2024 06:40:45 -0700 Subject: [PATCH 5/6] spotless --- .../packaging/test/MemoryLockingTests.java | 25 +++++++++++-------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/qa/packaging/src/test/java/org/elasticsearch/packaging/test/MemoryLockingTests.java b/qa/packaging/src/test/java/org/elasticsearch/packaging/test/MemoryLockingTests.java index 0d32622be5e12..82a17c54b6d69 100644 --- a/qa/packaging/src/test/java/org/elasticsearch/packaging/test/MemoryLockingTests.java +++ b/qa/packaging/src/test/java/org/elasticsearch/packaging/test/MemoryLockingTests.java @@ -23,17 +23,20 @@ public void test10Install() throws Exception { } public void test20MemoryLockingEnabled() throws Exception { - configureAndRun(Map.of( - "bootstrap.memory_lock", - "true", - "xpack.security.enabled", - "false", - "xpack.security.http.ssl.enabled", - "false", - "xpack.security.enrollment.enabled", - "false", - "discovery.type", - "single-node")); + configureAndRun( + Map.of( + "bootstrap.memory_lock", + "true", + "xpack.security.enabled", + "false", + "xpack.security.http.ssl.enabled", + "false", + "xpack.security.enrollment.enabled", + "false", + "discovery.type", + "single-node" + ) + ); // TODO: very locking worked. logs? check memory of process? at least we know the process started successfully stopElasticsearch(); } From bc8d5eee2823b0c9bc4815178b2ee6a6c0505899 Mon Sep 17 00:00:00 2001 From: Ryan Ernst Date: Thu, 15 Aug 2024 10:56:48 -0700 Subject: [PATCH 6/6] fix jdk address to add offset --- .../org/elasticsearch/nativeaccess/jdk/JdkKernel32Library.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/native/src/main21/java/org/elasticsearch/nativeaccess/jdk/JdkKernel32Library.java b/libs/native/src/main21/java/org/elasticsearch/nativeaccess/jdk/JdkKernel32Library.java index 5edc31d2e1e7b..0294b721aa6a8 100644 --- a/libs/native/src/main21/java/org/elasticsearch/nativeaccess/jdk/JdkKernel32Library.java +++ b/libs/native/src/main21/java/org/elasticsearch/nativeaccess/jdk/JdkKernel32Library.java @@ -115,7 +115,7 @@ static class JdkAddress implements Address { @Override public Address add(long offset) { - return new JdkAddress(MemorySegment.ofAddress(address.address())); + return new JdkAddress(MemorySegment.ofAddress(address.address() + offset)); } }