From ba291605626594b6bf0ea06b8061547aa4231799 Mon Sep 17 00:00:00 2001 From: Shay Banon Date: Thu, 8 Dec 2011 12:07:55 +0200 Subject: [PATCH] allow to enabled/disable gc deletes internally --- .../org/elasticsearch/index/engine/Engine.java | 2 ++ .../index/engine/robin/RobinEngine.java | 15 +++++++++++---- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/elasticsearch/index/engine/Engine.java b/src/main/java/org/elasticsearch/index/engine/Engine.java index 1fef90482dd..37f358cf7a9 100644 --- a/src/main/java/org/elasticsearch/index/engine/Engine.java +++ b/src/main/java/org/elasticsearch/index/engine/Engine.java @@ -56,6 +56,8 @@ public interface Engine extends IndexShardComponent, CloseableComponent { */ TimeValue defaultRefreshInterval(); + void enableGcDeletes(boolean enableGcDeletes); + void updateIndexingBufferSize(ByteSizeValue indexingBufferSize); void addFailedEngineListener(FailedEngineListener listener); diff --git a/src/main/java/org/elasticsearch/index/engine/robin/RobinEngine.java b/src/main/java/org/elasticsearch/index/engine/robin/RobinEngine.java index 334782e32cc..2a285d33c73 100644 --- a/src/main/java/org/elasticsearch/index/engine/robin/RobinEngine.java +++ b/src/main/java/org/elasticsearch/index/engine/robin/RobinEngine.java @@ -92,6 +92,8 @@ public class RobinEngine extends AbstractIndexShardComponent implements Engine { private long gcDeletesInMillis; + private volatile boolean enableGcDeletes = true; + private final ThreadPool threadPool; private final IndexSettingsService indexSettingsService; @@ -286,6 +288,11 @@ public class RobinEngine extends AbstractIndexShardComponent implements Engine { return new TimeValue(1, TimeUnit.SECONDS); } + @Override + public void enableGcDeletes(boolean enableGcDeletes) { + this.enableGcDeletes = enableGcDeletes; + } + public GetResult get(Get get) throws EngineException { rwl.readLock().lock(); try { @@ -386,7 +393,7 @@ public class RobinEngine extends AbstractIndexShardComponent implements Engine { if (versionValue == null) { currentVersion = loadCurrentVersionFromIndex(create.uid()); } else { - if (versionValue.delete() && (threadPool.estimatedTimeInMillis() - versionValue.time()) > gcDeletesInMillis) { + if (enableGcDeletes && versionValue.delete() && (threadPool.estimatedTimeInMillis() - versionValue.time()) > gcDeletesInMillis) { currentVersion = -1; // deleted, and GC } else { currentVersion = versionValue.version(); @@ -510,7 +517,7 @@ public class RobinEngine extends AbstractIndexShardComponent implements Engine { if (versionValue == null) { currentVersion = loadCurrentVersionFromIndex(index.uid()); } else { - if (versionValue.delete() && (threadPool.estimatedTimeInMillis() - versionValue.time()) > gcDeletesInMillis) { + if (enableGcDeletes && versionValue.delete() && (threadPool.estimatedTimeInMillis() - versionValue.time()) > gcDeletesInMillis) { currentVersion = -1; // deleted, and GC } else { currentVersion = versionValue.version(); @@ -625,7 +632,7 @@ public class RobinEngine extends AbstractIndexShardComponent implements Engine { if (versionValue == null) { currentVersion = loadCurrentVersionFromIndex(delete.uid()); } else { - if (versionValue.delete() && (threadPool.estimatedTimeInMillis() - versionValue.time()) > gcDeletesInMillis) { + if (enableGcDeletes && versionValue.delete() && (threadPool.estimatedTimeInMillis() - versionValue.time()) > gcDeletesInMillis) { currentVersion = -1; // deleted, and GC } else { currentVersion = versionValue.version(); @@ -940,7 +947,7 @@ public class RobinEngine extends AbstractIndexShardComponent implements Engine { continue; // its a newer value, from after/during we refreshed, don't clear it } if (versionValue.delete()) { - if ((time - versionValue.time()) > gcDeletesInMillis) { + if (enableGcDeletes && (time - versionValue.time()) > gcDeletesInMillis) { versionMap.remove(id); } } else {