From 877b425fb140bc7ecf9d59e3913404594ce24a2f Mon Sep 17 00:00:00 2001 From: Daniel Widdis Date: Mon, 10 Jul 2023 09:46:28 -0700 Subject: [PATCH] Force DOCUMENT replication on lock index (#417) * Force DOCUMENT replication on lock index Signed-off-by: Daniel Widdis * Test releasing lock to avoid any query cache issues Signed-off-by: Daniel Widdis * Restore original test config Signed-off-by: Daniel Widdis --------- Signed-off-by: Daniel Widdis --- .../jobscheduler/spi/utils/LockService.java | 9 ++++++++- .../multinode/GetLockMultiNodeRestIT.java | 18 +++++++++++++++--- 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/spi/src/main/java/org/opensearch/jobscheduler/spi/utils/LockService.java b/spi/src/main/java/org/opensearch/jobscheduler/spi/utils/LockService.java index 96a0b87b..d133d7b1 100644 --- a/spi/src/main/java/org/opensearch/jobscheduler/spi/utils/LockService.java +++ b/spi/src/main/java/org/opensearch/jobscheduler/spi/utils/LockService.java @@ -24,6 +24,7 @@ import org.opensearch.action.update.UpdateRequest; import org.opensearch.client.Client; import org.opensearch.cluster.service.ClusterService; +import org.opensearch.common.settings.Settings; import org.opensearch.common.xcontent.LoggingDeprecationHandler; import org.opensearch.core.xcontent.NamedXContentRegistry; import org.opensearch.core.xcontent.ToXContent; @@ -42,6 +43,9 @@ import java.nio.charset.StandardCharsets; import java.time.Instant; +import static org.opensearch.indices.replication.common.ReplicationType.DOCUMENT; +import static org.opensearch.cluster.metadata.IndexMetadata.SETTING_REPLICATION_TYPE; + public final class LockService { private static final Logger logger = LogManager.getLogger(LockService.class); private static final String LOCK_INDEX_NAME = ".opendistro-job-scheduler-lock"; @@ -80,7 +84,10 @@ void createLockIndex(ActionListener listener) { if (lockIndexExist()) { listener.onResponse(true); } else { - final CreateIndexRequest request = new CreateIndexRequest(LOCK_INDEX_NAME).mapping(lockMapping()); + // Temporarily force DOCUMENT replication until SEGMENT supports GET by id + // https://github.com/opensearch-project/OpenSearch/issues/8536 + Settings replicationSettings = Settings.builder().put(SETTING_REPLICATION_TYPE, DOCUMENT.name()).build(); + final CreateIndexRequest request = new CreateIndexRequest(LOCK_INDEX_NAME, replicationSettings).mapping(lockMapping()); client.admin() .indices() .create(request, ActionListener.wrap(response -> listener.onResponse(response.isAcknowledged()), exception -> { diff --git a/src/test/java/org/opensearch/jobscheduler/multinode/GetLockMultiNodeRestIT.java b/src/test/java/org/opensearch/jobscheduler/multinode/GetLockMultiNodeRestIT.java index 986dfead..65edd5e3 100644 --- a/src/test/java/org/opensearch/jobscheduler/multinode/GetLockMultiNodeRestIT.java +++ b/src/test/java/org/opensearch/jobscheduler/multinode/GetLockMultiNodeRestIT.java @@ -8,8 +8,6 @@ */ package org.opensearch.jobscheduler.multinode; -import com.google.common.collect.ImmutableMap; - import java.io.IOException; import org.junit.Before; @@ -23,6 +21,8 @@ import org.opensearch.jobscheduler.transport.AcquireLockResponse; import org.opensearch.test.OpenSearchIntegTestCase; +import com.google.common.collect.ImmutableMap; + @OpenSearchIntegTestCase.ClusterScope(scope = OpenSearchIntegTestCase.Scope.SUITE, numDataNodes = 2) public class GetLockMultiNodeRestIT extends ODFERestTestCase { @@ -30,6 +30,7 @@ public class GetLockMultiNodeRestIT extends ODFERestTestCase { private String initialJobIndexName; private Response initialGetLockResponse; + @Override @Before public void setUp() throws Exception { super.setUp(); @@ -53,6 +54,7 @@ public void testGetLockRestAPI() throws Exception { // Submit 10 requests to generate new lock models for different job indexes for (int i = 0; i < 10; i++) { + String expectedLockId = TestHelpers.generateExpectedLockId(String.valueOf(i), String.valueOf(i)); Response getLockResponse = TestHelpers.makeRequest( client(), "GET", @@ -61,10 +63,20 @@ public void testGetLockRestAPI() throws Exception { TestHelpers.toHttpEntity(TestHelpers.generateAcquireLockRequestBody(String.valueOf(i), String.valueOf(i))), null ); + // Releasing lock will test that it exists (Get by ID) + Response releaseLockResponse = TestHelpers.makeRequest( + client(), + "PUT", + TestHelpers.RELEASE_LOCK_BASE_URI + "/" + expectedLockId, + ImmutableMap.of(), + null, + null + ); + assertEquals("success", entityAsMap(releaseLockResponse).get("release-lock")); String lockId = validateResponseAndGetLockId(getLockResponse); - assertEquals(TestHelpers.generateExpectedLockId(String.valueOf(i), String.valueOf(i)), lockId); + assertEquals(expectedLockId, lockId); } }