From 298a07bed8af79ebbd6ab9b0ea351d6d2db2529d Mon Sep 17 00:00:00 2001 From: Rassyan Date: Tue, 8 Jul 2025 19:37:41 +0800 Subject: [PATCH] Make acquireHistoryRetentionLock Releasable instead of Closeable --- .../elasticsearch/index/seqno/RetentionLeaseIT.java | 7 ++++--- .../java/org/elasticsearch/index/engine/Engine.java | 2 +- .../org/elasticsearch/index/engine/InternalEngine.java | 2 +- .../org/elasticsearch/index/engine/ReadOnlyEngine.java | 3 ++- .../java/org/elasticsearch/index/shard/IndexShard.java | 10 +++------- .../indices/recovery/RecoverySourceHandler.java | 4 ++-- 6 files changed, 13 insertions(+), 15 deletions(-) diff --git a/server/src/internalClusterTest/java/org/elasticsearch/index/seqno/RetentionLeaseIT.java b/server/src/internalClusterTest/java/org/elasticsearch/index/seqno/RetentionLeaseIT.java index 1f0495a846fb8..d54955639b038 100644 --- a/server/src/internalClusterTest/java/org/elasticsearch/index/seqno/RetentionLeaseIT.java +++ b/server/src/internalClusterTest/java/org/elasticsearch/index/seqno/RetentionLeaseIT.java @@ -18,6 +18,7 @@ import org.elasticsearch.common.settings.Setting; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.util.Maps; +import org.elasticsearch.core.Releasable; import org.elasticsearch.core.TimeValue; import org.elasticsearch.index.IndexService; import org.elasticsearch.index.IndexSettings; @@ -96,7 +97,7 @@ public void testRetentionLeasesSyncedOnAdd() throws Exception { final CountDownLatch latch = new CountDownLatch(1); final ActionListener listener = countDownLatchListener(latch); // simulate a peer recovery which locks the soft deletes policy on the primary - final Closeable retentionLock = randomBoolean() ? primary.acquireHistoryRetentionLock() : () -> {}; + final Releasable retentionLock = randomBoolean() ? primary.acquireHistoryRetentionLock() : () -> {}; currentRetentionLeases.put(id, primary.addRetentionLease(id, retainingSequenceNumber, source, listener)); latch.await(); retentionLock.close(); @@ -145,7 +146,7 @@ public void testRetentionLeaseSyncedOnRemove() throws Exception { final CountDownLatch latch = new CountDownLatch(1); final ActionListener listener = countDownLatchListener(latch); // simulate a peer recovery which locks the soft deletes policy on the primary - final Closeable retentionLock = randomBoolean() ? primary.acquireHistoryRetentionLock() : () -> {}; + final Releasable retentionLock = randomBoolean() ? primary.acquireHistoryRetentionLock() : () -> {}; currentRetentionLeases.put(id, primary.addRetentionLease(id, retainingSequenceNumber, source, listener)); latch.await(); retentionLock.close(); @@ -156,7 +157,7 @@ public void testRetentionLeaseSyncedOnRemove() throws Exception { final CountDownLatch latch = new CountDownLatch(1); primary.removeRetentionLease(id, countDownLatchListener(latch)); // simulate a peer recovery which locks the soft deletes policy on the primary - final Closeable retentionLock = randomBoolean() ? primary.acquireHistoryRetentionLock() : () -> {}; + final Releasable retentionLock = randomBoolean() ? primary.acquireHistoryRetentionLock() : () -> {}; currentRetentionLeases.remove(id); latch.await(); retentionLock.close(); diff --git a/server/src/main/java/org/elasticsearch/index/engine/Engine.java b/server/src/main/java/org/elasticsearch/index/engine/Engine.java index 881de29c435db..d8c99cfdadfa5 100644 --- a/server/src/main/java/org/elasticsearch/index/engine/Engine.java +++ b/server/src/main/java/org/elasticsearch/index/engine/Engine.java @@ -1050,7 +1050,7 @@ public boolean allowSearchIdleOptimization() { /** * Acquires a lock on Lucene soft-deleted documents to prevent them from being trimmed */ - public abstract Closeable acquireHistoryRetentionLock(); + public abstract Releasable acquireHistoryRetentionLock(); /** * Counts the number of operations in the range of the given sequence numbers. diff --git a/server/src/main/java/org/elasticsearch/index/engine/InternalEngine.java b/server/src/main/java/org/elasticsearch/index/engine/InternalEngine.java index 170ccc2cc7bbb..c3bfb9c995dd4 100644 --- a/server/src/main/java/org/elasticsearch/index/engine/InternalEngine.java +++ b/server/src/main/java/org/elasticsearch/index/engine/InternalEngine.java @@ -3318,7 +3318,7 @@ public final long getMinRetainedSeqNo() { } @Override - public Closeable acquireHistoryRetentionLock() { + public Releasable acquireHistoryRetentionLock() { return softDeletesPolicy.acquireRetentionLock(); } diff --git a/server/src/main/java/org/elasticsearch/index/engine/ReadOnlyEngine.java b/server/src/main/java/org/elasticsearch/index/engine/ReadOnlyEngine.java index 2388154494ad4..ef573aad78f7b 100644 --- a/server/src/main/java/org/elasticsearch/index/engine/ReadOnlyEngine.java +++ b/server/src/main/java/org/elasticsearch/index/engine/ReadOnlyEngine.java @@ -26,6 +26,7 @@ import org.elasticsearch.common.lucene.index.ElasticsearchDirectoryReader; import org.elasticsearch.core.IOUtils; import org.elasticsearch.core.Nullable; +import org.elasticsearch.core.Releasable; import org.elasticsearch.index.IndexVersion; import org.elasticsearch.index.IndexVersions; import org.elasticsearch.index.mapper.DocumentParser; @@ -345,7 +346,7 @@ public void asyncEnsureGlobalCheckpointSynced(long globalCheckpoint, Consumer {}; } diff --git a/server/src/main/java/org/elasticsearch/index/shard/IndexShard.java b/server/src/main/java/org/elasticsearch/index/shard/IndexShard.java index 76ecd8141f79d..47693b44d052e 100644 --- a/server/src/main/java/org/elasticsearch/index/shard/IndexShard.java +++ b/server/src/main/java/org/elasticsearch/index/shard/IndexShard.java @@ -2669,7 +2669,7 @@ public void onSettingsChanged() { /** * Acquires a lock on Lucene soft-deleted documents to prevent them from being trimmed */ - public Closeable acquireHistoryRetentionLock() { + public Releasable acquireHistoryRetentionLock() { return getEngine().acquireHistoryRetentionLock(); } @@ -2900,13 +2900,11 @@ public RetentionLease addRetentionLease( assert assertPrimaryMode(); verifyNotClosed(); ensureSoftDeletesEnabled(); - try (Closeable ignore = acquireHistoryRetentionLock()) { + try (Releasable ignore = acquireHistoryRetentionLock()) { final long actualRetainingSequenceNumber = retainingSequenceNumber == RETAIN_ALL ? getMinRetainedSeqNo() : retainingSequenceNumber; return replicationTracker.addRetentionLease(id, actualRetainingSequenceNumber, source, listener); - } catch (final IOException e) { - throw new AssertionError(e); } } @@ -2923,13 +2921,11 @@ public RetentionLease renewRetentionLease(final String id, final long retainingS assert assertPrimaryMode(); verifyNotClosed(); ensureSoftDeletesEnabled(); - try (Closeable ignore = acquireHistoryRetentionLock()) { + try (Releasable ignore = acquireHistoryRetentionLock()) { final long actualRetainingSequenceNumber = retainingSequenceNumber == RETAIN_ALL ? getMinRetainedSeqNo() : retainingSequenceNumber; return replicationTracker.renewRetentionLease(id, actualRetainingSequenceNumber, source); - } catch (final IOException e) { - throw new AssertionError(e); } } diff --git a/server/src/main/java/org/elasticsearch/indices/recovery/RecoverySourceHandler.java b/server/src/main/java/org/elasticsearch/indices/recovery/RecoverySourceHandler.java index 622e56f596e19..452f6eda35897 100644 --- a/server/src/main/java/org/elasticsearch/indices/recovery/RecoverySourceHandler.java +++ b/server/src/main/java/org/elasticsearch/indices/recovery/RecoverySourceHandler.java @@ -204,7 +204,7 @@ public void recoverToTarget(ActionListener listener) { } private void recoverToTarget(RetentionLease retentionLease, Consumer onFailure) throws IOException { - final Closeable retentionLock = shard.acquireHistoryRetentionLock(); + final Releasable retentionLock = shard.acquireHistoryRetentionLock(); resources.add(retentionLock); final long startingSeqNo; final boolean isSequenceNumberBasedRecovery = request.startingSeqNo() != SequenceNumbers.UNASSIGNED_SEQ_NO @@ -1234,7 +1234,7 @@ void finalizeRecovery(long targetLocalCheckpoint, long trimAboveSeqNo, ActionLis ); /* * if the recovery process fails after disabling primary mode on the source shard, both relocation source and - * target are failed (see {@link IndexShard#updateRoutingEntry}). + * target are failed (see {@link IndexShard#updateShardState}). */ })); } else {