From 29cf87fcee64cef936b052b5f499acc373707b32 Mon Sep 17 00:00:00 2001 From: Ashish Singh Date: Thu, 19 Sep 2024 15:27:54 +0530 Subject: [PATCH] Fix issue of red index on close for remote enabled clusters Signed-off-by: Ashish Singh --- .../close/TransportVerifyShardBeforeCloseAction.java | 2 +- .../main/java/org/opensearch/index/shard/IndexShard.java | 6 +++++- .../opensearch/index/translog/InternalTranslogManager.java | 7 ++++++- .../org/opensearch/index/translog/NoOpTranslogManager.java | 3 +++ .../org/opensearch/index/translog/RemoteFsTranslog.java | 7 ++++++- .../main/java/org/opensearch/index/translog/Translog.java | 7 +++++++ .../org/opensearch/index/translog/TranslogManager.java | 6 ++++++ 7 files changed, 34 insertions(+), 4 deletions(-) diff --git a/server/src/main/java/org/opensearch/action/admin/indices/close/TransportVerifyShardBeforeCloseAction.java b/server/src/main/java/org/opensearch/action/admin/indices/close/TransportVerifyShardBeforeCloseAction.java index a8a512a5ad05a..fca3f2c8837ea 100644 --- a/server/src/main/java/org/opensearch/action/admin/indices/close/TransportVerifyShardBeforeCloseAction.java +++ b/server/src/main/java/org/opensearch/action/admin/indices/close/TransportVerifyShardBeforeCloseAction.java @@ -160,7 +160,7 @@ private void executeShardOperation(final ShardRequest request, final IndexShard // to the primary (we call this phase1), and phase2 can then use the fact that the global checkpoint has moved to the maximum // sequence number to pass the verifyShardBeforeIndexClosing check and create a safe commit where the maximum sequence number // is equal to the global checkpoint. - indexShard.sync(); + indexShard.sync(true); } else { indexShard.verifyShardBeforeIndexClosing(); indexShard.flush(new FlushRequest().force(true).waitIfOngoing(true)); diff --git a/server/src/main/java/org/opensearch/index/shard/IndexShard.java b/server/src/main/java/org/opensearch/index/shard/IndexShard.java index 6e12e4ed3da1a..b0e6bea390695 100644 --- a/server/src/main/java/org/opensearch/index/shard/IndexShard.java +++ b/server/src/main/java/org/opensearch/index/shard/IndexShard.java @@ -4507,8 +4507,12 @@ public final void sync(Translog.Location location, Consumer syncListe } public void sync() throws IOException { + sync(false); + } + + public void sync(boolean force) throws IOException { verifyNotClosed(); - getEngine().translogManager().syncTranslog(); + getEngine().translogManager().syncTranslog(force); } /** diff --git a/server/src/main/java/org/opensearch/index/translog/InternalTranslogManager.java b/server/src/main/java/org/opensearch/index/translog/InternalTranslogManager.java index e2210217672ef..d03980b7810ec 100644 --- a/server/src/main/java/org/opensearch/index/translog/InternalTranslogManager.java +++ b/server/src/main/java/org/opensearch/index/translog/InternalTranslogManager.java @@ -195,7 +195,12 @@ public boolean ensureTranslogSynced(Stream locations) throws */ @Override public void syncTranslog() throws IOException { - translog.sync(); + syncTranslog(false); + } + + @Override + public void syncTranslog(boolean force) throws IOException { + translog.sync(force); translogEventListener.onAfterTranslogSync(); } diff --git a/server/src/main/java/org/opensearch/index/translog/NoOpTranslogManager.java b/server/src/main/java/org/opensearch/index/translog/NoOpTranslogManager.java index b4aa7865570a6..8debc90893782 100644 --- a/server/src/main/java/org/opensearch/index/translog/NoOpTranslogManager.java +++ b/server/src/main/java/org/opensearch/index/translog/NoOpTranslogManager.java @@ -72,6 +72,9 @@ public boolean ensureTranslogSynced(Stream locations) { @Override public void syncTranslog() throws IOException {} + @Override + public void syncTranslog(boolean force) throws IOException {} + @Override public TranslogStats getTranslogStats() { return translogStats; diff --git a/server/src/main/java/org/opensearch/index/translog/RemoteFsTranslog.java b/server/src/main/java/org/opensearch/index/translog/RemoteFsTranslog.java index 812852d107682..65f7816024cc6 100644 --- a/server/src/main/java/org/opensearch/index/translog/RemoteFsTranslog.java +++ b/server/src/main/java/org/opensearch/index/translog/RemoteFsTranslog.java @@ -463,7 +463,12 @@ private boolean syncToDisk() throws IOException { @Override public void sync() throws IOException { - if (syncToDisk() || syncNeeded()) { + sync(false); + } + + @Override + public void sync(boolean force) throws IOException { + if (syncToDisk() || syncNeeded() || force) { prepareAndUpload(primaryTermSupplier.getAsLong(), null); } } diff --git a/server/src/main/java/org/opensearch/index/translog/Translog.java b/server/src/main/java/org/opensearch/index/translog/Translog.java index 4b4ceb7444471..60e86da8cd220 100644 --- a/server/src/main/java/org/opensearch/index/translog/Translog.java +++ b/server/src/main/java/org/opensearch/index/translog/Translog.java @@ -751,6 +751,13 @@ private Closeable acquireTranslogGenFromDeletionPolicy(long viewGen) { * Sync's the translog. */ public void sync() throws IOException { + sync(false); + } + + /** + * Sync's the translog. + */ + public void sync(boolean ignored) throws IOException { try (ReleasableLock lock = readLock.acquire()) { if (closed.get() == false) { current.sync(); diff --git a/server/src/main/java/org/opensearch/index/translog/TranslogManager.java b/server/src/main/java/org/opensearch/index/translog/TranslogManager.java index e1a0b7d1c1293..f30e54c704b3e 100644 --- a/server/src/main/java/org/opensearch/index/translog/TranslogManager.java +++ b/server/src/main/java/org/opensearch/index/translog/TranslogManager.java @@ -58,6 +58,12 @@ public interface TranslogManager { */ void syncTranslog() throws IOException; + /** + * Syncs translog with option to force sync + * @throws IOException the exception while performing the sync operation + */ + void syncTranslog(boolean force) throws IOException; + /** * Translog operation stats * @return the translog stats