2020import org .apache .lucene .index .LeafReaderContext ;
2121import org .apache .lucene .index .LiveIndexWriterConfig ;
2222import org .apache .lucene .index .MergePolicy ;
23+ import org .apache .lucene .index .MergeScheduler ;
2324import org .apache .lucene .index .SegmentCommitInfo ;
2425import org .apache .lucene .index .SegmentInfos ;
2526import org .apache .lucene .index .SoftDeletesRetentionMergePolicy ;
@@ -139,7 +140,7 @@ public class InternalEngine extends Engine {
139140 private volatile long lastDeleteVersionPruneTimeMSec ;
140141
141142 private final Translog translog ;
142- private final ElasticsearchConcurrentMergeScheduler mergeScheduler ;
143+ private final ElasticsearchMergeScheduler mergeScheduler ;
143144
144145 private final IndexWriter indexWriter ;
145146
@@ -248,11 +249,12 @@ public InternalEngine(EngineConfig engineConfig) {
248249 Translog translog = null ;
249250 ExternalReaderManager externalReaderManager = null ;
250251 ElasticsearchReaderManager internalReaderManager = null ;
251- EngineMergeScheduler scheduler = null ;
252+ MergeScheduler scheduler = null ;
252253 boolean success = false ;
253254 try {
254255 this .lastDeleteVersionPruneTimeMSec = engineConfig .getThreadPool ().relativeTimeInMillis ();
255- mergeScheduler = scheduler = new EngineMergeScheduler (engineConfig .getShardId (), engineConfig .getIndexSettings ());
256+ mergeScheduler = createMergeScheduler (engineConfig .getShardId (), engineConfig .getIndexSettings ());
257+ scheduler = mergeScheduler .getMergeScheduler ();
256258 throttle = new IndexThrottle ();
257259 try {
258260 store .trimUnsafeCommits (config ().getTranslogConfig ().getTranslogPath ());
@@ -383,7 +385,7 @@ private SoftDeletesPolicy newSoftDeletesPolicy() throws IOException {
383385
384386 @ Nullable
385387 private CombinedDeletionPolicy .CommitsListener newCommitsListener () {
386- Engine . IndexCommitListener listener = engineConfig .getIndexCommitListener ();
388+ IndexCommitListener listener = engineConfig .getIndexCommitListener ();
387389 if (listener != null ) {
388390 final IndexCommitListener wrappedListener = Assertions .ENABLED ? assertingCommitsOrderListener (listener ) : listener ;
389391 return new CombinedDeletionPolicy .CommitsListener () {
@@ -824,7 +826,7 @@ private GetResult getFromTranslog(
824826 config (),
825827 translogInMemorySegmentsCount ::incrementAndGet
826828 );
827- final Engine . Searcher searcher = new Engine . Searcher (
829+ final Searcher searcher = new Searcher (
828830 "realtime_get" ,
829831 ElasticsearchDirectoryReader .wrap (inMemoryReader , shardId ),
830832 config ().getSimilarity (),
@@ -841,7 +843,7 @@ public GetResult get(
841843 Get get ,
842844 MappingLookup mappingLookup ,
843845 DocumentParser documentParser ,
844- Function <Engine . Searcher , Engine . Searcher > searcherWrapper
846+ Function <Searcher , Searcher > searcherWrapper
845847 ) {
846848 try (var ignored = acquireEnsureOpenRef ()) {
847849 if (get .realtime ()) {
@@ -875,7 +877,7 @@ protected GetResult realtimeGetUnderLock(
875877 Get get ,
876878 MappingLookup mappingLookup ,
877879 DocumentParser documentParser ,
878- Function <Engine . Searcher , Engine . Searcher > searcherWrapper ,
880+ Function <Searcher , Searcher > searcherWrapper ,
879881 boolean getFromSearcher
880882 ) {
881883 assert isDrainedForClose () == false ;
@@ -1098,7 +1100,7 @@ protected boolean assertPrimaryCanOptimizeAddDocument(final Index index) {
10981100 return true ;
10991101 }
11001102
1101- private boolean assertIncomingSequenceNumber (final Engine . Operation .Origin origin , final long seqNo ) {
1103+ private boolean assertIncomingSequenceNumber (final Operation .Origin origin , final long seqNo ) {
11021104 if (origin == Operation .Origin .PRIMARY ) {
11031105 assert assertPrimaryIncomingSequenceNumber (origin , seqNo );
11041106 } else {
@@ -1108,7 +1110,7 @@ private boolean assertIncomingSequenceNumber(final Engine.Operation.Origin origi
11081110 return true ;
11091111 }
11101112
1111- protected boolean assertPrimaryIncomingSequenceNumber (final Engine . Operation .Origin origin , final long seqNo ) {
1113+ protected boolean assertPrimaryIncomingSequenceNumber (final Operation .Origin origin , final long seqNo ) {
11121114 // sequence number should not be set when operation origin is primary
11131115 assert seqNo == SequenceNumbers .UNASSIGNED_SEQ_NO
11141116 : "primary operations must never have an assigned sequence number but was [" + seqNo + "]" ;
@@ -2700,7 +2702,7 @@ private IndexWriterConfig getIndexWriterConfig() {
27002702 iwc .setOpenMode (IndexWriterConfig .OpenMode .APPEND );
27012703 iwc .setIndexDeletionPolicy (combinedDeletionPolicy );
27022704 iwc .setInfoStream (TESTS_VERBOSE ? InfoStream .getDefault () : new LoggerInfoStream (logger ));
2703- iwc .setMergeScheduler (mergeScheduler );
2705+ iwc .setMergeScheduler (mergeScheduler . getMergeScheduler () );
27042706 // Give us the opportunity to upgrade old segments while performing
27052707 // background merges
27062708 MergePolicy mergePolicy = config ().getMergePolicy ();
@@ -2753,7 +2755,7 @@ private IndexWriterConfig getIndexWriterConfig() {
27532755
27542756 /** A listener that warms the segments if needed when acquiring a new reader */
27552757 static final class RefreshWarmerListener implements BiConsumer <ElasticsearchDirectoryReader , ElasticsearchDirectoryReader > {
2756- private final Engine . Warmer warmer ;
2758+ private final Warmer warmer ;
27572759 private final Logger logger ;
27582760 private final AtomicBoolean isEngineClosed ;
27592761
@@ -2817,6 +2819,10 @@ LiveIndexWriterConfig getCurrentIndexWriterConfig() {
28172819 return indexWriter .getConfig ();
28182820 }
28192821
2822+ protected ElasticsearchMergeScheduler createMergeScheduler (ShardId shardId , IndexSettings indexSettings ) {
2823+ return new EngineMergeScheduler (shardId , indexSettings );
2824+ }
2825+
28202826 private final class EngineMergeScheduler extends ElasticsearchConcurrentMergeScheduler {
28212827 private final AtomicInteger numMergesInFlight = new AtomicInteger (0 );
28222828 private final AtomicBoolean isThrottling = new AtomicBoolean ();
@@ -2827,7 +2833,7 @@ private final class EngineMergeScheduler extends ElasticsearchConcurrentMergeSch
28272833
28282834 @ Override
28292835 public synchronized void beforeMerge (OnGoingMerge merge ) {
2830- int maxNumMerges = mergeScheduler . getMaxMergeCount ();
2836+ int maxNumMerges = getMaxMergeCount ();
28312837 if (numMergesInFlight .incrementAndGet () > maxNumMerges ) {
28322838 if (isThrottling .getAndSet (true ) == false ) {
28332839 logger .info ("now throttling indexing: numMergesInFlight={}, maxNumMerges={}" , numMergesInFlight , maxNumMerges );
@@ -2838,7 +2844,7 @@ public synchronized void beforeMerge(OnGoingMerge merge) {
28382844
28392845 @ Override
28402846 public synchronized void afterMerge (OnGoingMerge merge ) {
2841- int maxNumMerges = mergeScheduler . getMaxMergeCount ();
2847+ int maxNumMerges = getMaxMergeCount ();
28422848 if (numMergesInFlight .decrementAndGet () < maxNumMerges ) {
28432849 if (isThrottling .getAndSet (false )) {
28442850 logger .info ("stop throttling indexing: numMergesInFlight={}, maxNumMerges={}" , numMergesInFlight , maxNumMerges );
@@ -2876,25 +2882,29 @@ protected void doRun() {
28762882
28772883 @ Override
28782884 protected void handleMergeException (final Throwable exc ) {
2879- engineConfig .getThreadPool ().generic ().execute (new AbstractRunnable () {
2880- @ Override
2881- public void onFailure (Exception e ) {
2882- logger .debug ("merge failure action rejected" , e );
2883- }
2884-
2885- @ Override
2886- protected void doRun () throws Exception {
2887- /*
2888- * We do this on another thread rather than the merge thread that we are initially called on so that we have complete
2889- * confidence that the call stack does not contain catch statements that would cause the error that might be thrown
2890- * here from being caught and never reaching the uncaught exception handler.
2891- */
2892- failEngine ("merge failed" , new MergePolicy .MergeException (exc ));
2893- }
2894- });
2885+ mergeException (exc );
28952886 }
28962887 }
28972888
2889+ protected void mergeException (final Throwable exc ) {
2890+ engineConfig .getThreadPool ().generic ().execute (new AbstractRunnable () {
2891+ @ Override
2892+ public void onFailure (Exception e ) {
2893+ logger .debug ("merge failure action rejected" , e );
2894+ }
2895+
2896+ @ Override
2897+ protected void doRun () throws Exception {
2898+ /*
2899+ * We do this on another thread rather than the merge thread that we are initially called on so that we have complete
2900+ * confidence that the call stack does not contain catch statements that would cause the error that might be thrown
2901+ * here from being caught and never reaching the uncaught exception handler.
2902+ */
2903+ failEngine ("merge failed" , new MergePolicy .MergeException (exc ));
2904+ }
2905+ });
2906+ }
2907+
28982908 /**
28992909 * Commits the specified index writer.
29002910 *
0 commit comments