Skip to content

Commit c5dbede

Browse files
committed
move refreshing version table to be done right after the commit within the respective lock, for full flush (rarely used) its needed...
1 parent 263b3fc commit c5dbede

File tree

1 file changed

+13
-7
lines changed
  • modules/elasticsearch/src/main/java/org/elasticsearch/index/engine/robin

1 file changed

+13
-7
lines changed

modules/elasticsearch/src/main/java/org/elasticsearch/index/engine/robin/RobinEngine.java

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -249,6 +249,8 @@ public class RobinEngine extends AbstractIndexShardComponent implements Engine {
249249
}
250250

251251
try {
252+
// commit on a just opened writer will commit even if there are no changes done to it
253+
// we rely on that for the commit data translog id key
252254
if (IndexReader.indexExists(store.directory())) {
253255
Map<String, String> commitUserData = IndexReader.getCommitUserData(store.directory());
254256
if (commitUserData.containsKey(Translog.TRANSLOG_ID_KEY)) {
@@ -803,6 +805,8 @@ private void innerDelete(Delete delete, IndexWriter writer) throws IOException {
803805
indexWriter.close(false);
804806
indexWriter = createWriter();
805807

808+
// commit on a just opened writer will commit even if there are no changes done to it
809+
// we rely on that for the commit data translog id key
806810
if (flushNeeded || flush.force()) {
807811
flushNeeded = false;
808812
long translogId = translogIdGenerator.incrementAndGet();
@@ -813,6 +817,8 @@ private void innerDelete(Delete delete, IndexWriter writer) throws IOException {
813817
AcquirableResource<ReaderSearcherHolder> current = nrtResource;
814818
nrtResource = buildNrtResource(indexWriter);
815819
current.markForClose();
820+
821+
refreshVersioningTable(threadPool.estimatedTimeInMillis());
816822
} catch (Exception e) {
817823
throw new FlushFailedEngineException(shardId, e);
818824
} catch (OutOfMemoryError e) {
@@ -851,6 +857,13 @@ private void innerDelete(Delete delete, IndexWriter writer) throws IOException {
851857
} else {
852858
makeTransientCurrent = true;
853859
}
860+
if (makeTransientCurrent) {
861+
refreshVersioningTable(threadPool.estimatedTimeInMillis());
862+
// we need to move transient to current only after we refresh
863+
// so items added to current will still be around for realtime get
864+
// when tans overrides it
865+
translog.makeTransientCurrent();
866+
}
854867
} catch (Exception e) {
855868
translog.revertTransient();
856869
throw new FlushFailedEngineException(shardId, e);
@@ -864,13 +877,6 @@ private void innerDelete(Delete delete, IndexWriter writer) throws IOException {
864877
rwl.readLock().unlock();
865878
}
866879
}
867-
refreshVersioningTable(threadPool.estimatedTimeInMillis());
868-
// we need to move transient to current only after we refresh
869-
// so items added to current will still be around for realtime get
870-
// when tans overrides it
871-
if (makeTransientCurrent) {
872-
translog.makeTransientCurrent();
873-
}
874880
try {
875881
SegmentInfos infos = new SegmentInfos();
876882
infos.read(store.directory());

0 commit comments

Comments
 (0)