- java.lang.Object
-
- org.apache.lucene.index.MergeScheduler
-
- All Implemented Interfaces:
java.io.Closeable
,java.lang.AutoCloseable
- Direct Known Subclasses:
ConcurrentMergeScheduler
,NoMergeScheduler
,SerialMergeScheduler
public abstract class MergeScheduler extends java.lang.Object implements java.io.Closeable
Expert:IndexWriter
uses an instance implementing this interface to execute the merges selected by aMergePolicy
. The default MergeScheduler isConcurrentMergeScheduler
.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static interface
MergeScheduler.MergeSource
Provides access to new merges and executes the actual merge
-
Field Summary
Fields Modifier and Type Field Description private java.util.concurrent.ExecutorService
executor
protected InfoStream
infoStream
For messages about merge scheduling
-
Constructor Summary
Constructors Modifier Constructor Description protected
MergeScheduler()
Sole constructor.
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description void
close()
Close this MergeScheduler.java.util.concurrent.Executor
getIntraMergeExecutor(MergePolicy.OneMerge merge)
Provides an executor for parallelism during a single merge operation.(package private) void
initialize(InfoStream infoStream, Directory directory)
IndexWriter calls this on init.abstract void
merge(MergeScheduler.MergeSource mergeSource, MergeTrigger trigger)
Run the merges provided byMergeScheduler.MergeSource.getNextMerge()
.protected void
message(java.lang.String message)
Outputs the given message - this method assumesverbose()
was called and returned true.protected boolean
verbose()
Returns true if infoStream messages are enabled.Directory
wrapForMerge(MergePolicy.OneMerge merge, Directory in)
Wraps the incomingDirectory
so that we can merge-throttle it usingRateLimitedIndexOutput
.
-
-
-
Field Detail
-
executor
private final java.util.concurrent.ExecutorService executor
-
infoStream
protected InfoStream infoStream
For messages about merge scheduling
-
-
Method Detail
-
merge
public abstract void merge(MergeScheduler.MergeSource mergeSource, MergeTrigger trigger) throws java.io.IOException
Run the merges provided byMergeScheduler.MergeSource.getNextMerge()
.- Parameters:
mergeSource
- theIndexWriter
to obtain the merges from.trigger
- theMergeTrigger
that caused this merge to happen- Throws:
java.io.IOException
-
wrapForMerge
public Directory wrapForMerge(MergePolicy.OneMerge merge, Directory in)
Wraps the incomingDirectory
so that we can merge-throttle it usingRateLimitedIndexOutput
.
-
getIntraMergeExecutor
public java.util.concurrent.Executor getIntraMergeExecutor(MergePolicy.OneMerge merge)
Provides an executor for parallelism during a single merge operation. By default, the method returns aSameThreadExecutorService
where all intra-merge actions occur in their calling thread.
-
close
public void close() throws java.io.IOException
Close this MergeScheduler.- Specified by:
close
in interfacejava.lang.AutoCloseable
- Specified by:
close
in interfacejava.io.Closeable
- Throws:
java.io.IOException
-
initialize
void initialize(InfoStream infoStream, Directory directory) throws java.io.IOException
IndexWriter calls this on init.- Throws:
java.io.IOException
-
verbose
protected boolean verbose()
Returns true if infoStream messages are enabled. This method is usually used in conjunction withmessage(String)
:if (verbose()) { message("your message"); }
-
message
protected void message(java.lang.String message)
Outputs the given message - this method assumesverbose()
was called and returned true.
-
-