From a8ef03d97997c1331179a79f1d76a2b7c6d04e7f Mon Sep 17 00:00:00 2001 From: Adrien Grand Date: Wed, 11 Jan 2023 09:57:13 +0100 Subject: [PATCH] Never throttle creation of compound files. (#12070) `ConcurrentMergeScheduler` uses the rate at which a merge writes bytes as a proxy for CPU usage, in order to prevent merging from disrupting searches too much. However creating compound files are lightweight CPU-wise and do not need throttling. Closes #12068 --- lucene/CHANGES.txt | 3 +++ .../core/src/java/org/apache/lucene/index/IndexWriter.java | 5 ++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/lucene/CHANGES.txt b/lucene/CHANGES.txt index 6017ca66652..fdc9d05734b 100644 --- a/lucene/CHANGES.txt +++ b/lucene/CHANGES.txt @@ -199,6 +199,9 @@ Improvements * GITHUB#12034: Remove null check in IndexReaderContext#leaves() usages (Erik Pellizzon) +* GITHUB#12070: Compound file creation is no longer subject to merge throttling. + (Adrien Grand) + Bug Fixes --------------------- * GITHUB#11726: Indexing term vectors on large documents could fail due to diff --git a/lucene/core/src/java/org/apache/lucene/index/IndexWriter.java b/lucene/core/src/java/org/apache/lucene/index/IndexWriter.java index f8a0ab389c9..c089cda0f6f 100644 --- a/lucene/core/src/java/org/apache/lucene/index/IndexWriter.java +++ b/lucene/core/src/java/org/apache/lucene/index/IndexWriter.java @@ -5210,7 +5210,10 @@ public class IndexWriter success = false; Collection filesToRemove = merge.info.files(); - TrackingDirectoryWrapper trackingCFSDir = new TrackingDirectoryWrapper(mergeDirectory); + // NOTE: Creation of the CFS file must be performed with the original + // directory rather than with the merging directory, so that it is not + // subject to merge throttling. + TrackingDirectoryWrapper trackingCFSDir = new TrackingDirectoryWrapper(directory); try { createCompoundFile( infoStream, trackingCFSDir, merge.info.info, context, this::deleteNewFiles);