Class MergePolicy.OneMerge

java.lang.Object
org.apache.lucene.index.MergePolicy.OneMerge
Enclosing class:
MergePolicy

public static class MergePolicy.OneMerge extends Object
OneMerge provides the information necessary to perform an individual primitive merge operation, resulting in a single new segment. The merge spec includes the subset of segments to be merged as well as whether the new segment should use the compound file format.
  • Field Details

    • mergeCompleted

      private final CompletableFuture<Boolean> mergeCompleted
    • info

    • registerDone

      boolean registerDone
    • mergeGen

      long mergeGen
    • isExternal

      boolean isExternal
    • maxNumSegments

      int maxNumSegments
    • estimatedMergeBytes

      public volatile long estimatedMergeBytes
      Estimated size in bytes of the merged segment.
    • totalMergeBytes

      volatile long totalMergeBytes
    • mergeReaders

      private List<MergePolicy.MergeReader> mergeReaders
    • segments

      public final List<SegmentCommitInfo> segments
      Segments to be merged.
    • mergeProgress

      private final MergePolicy.OneMergeProgress mergeProgress
      Control used to pause/stop/resume the merge thread.
    • mergeStartNS

      volatile long mergeStartNS
    • totalMaxDoc

      final int totalMaxDoc
      Total number of documents in segments to be merged, not accounting for deletions.
    • error

      Throwable error
  • Constructor Details

  • Method Details

    • mergeInit

      public void mergeInit() throws IOException
      Called by IndexWriter after the merge started and from the thread that will be executing the merge.
      Throws:
      IOException
    • mergeFinished

      public void mergeFinished(boolean success, boolean segmentDropped) throws IOException
      Called by IndexWriter after the merge is done and all readers have been closed.
      Parameters:
      success - true iff the merge finished successfully ie. was committed
      segmentDropped - true iff the merged segment was dropped since it was fully deleted
      Throws:
      IOException
    • close

      final void close(boolean success, boolean segmentDropped, IOConsumer<MergePolicy.MergeReader> readerConsumer) throws IOException
      Closes this merge and releases all merge readers
      Throws:
      IOException
    • wrapForMerge

      public CodecReader wrapForMerge(CodecReader reader) throws IOException
      Wrap the reader in order to add/remove information to the merged segment.
      Throws:
      IOException
    • setMergeInfo

      public void setMergeInfo(SegmentCommitInfo info)
      Expert: Sets the SegmentCommitInfo of the merged segment. Allows sub-classes to e.g. add diagnostic properties.
    • getMergeInfo

      public SegmentCommitInfo getMergeInfo()
      Returns the SegmentCommitInfo for the merged segment, or null if it hasn't been set yet.
    • setException

      void setException(Throwable error)
      Record that an exception occurred while executing this merge
    • getException

      Throwable getException()
      Retrieve previous exception set by setException(java.lang.Throwable).
    • segString

      public String segString()
      Returns a readable description of the current merge state.
    • totalBytesSize

      public long totalBytesSize()
      Returns the total size in bytes of this merge. Note that this does not indicate the size of the merged segment, but the input total size. This is only set once the merge is initialized by IndexWriter.
    • totalNumDocs

      public int totalNumDocs()
      Returns the total number of documents that are included with this merge. Note that this does not indicate the number of documents after the merge.
    • getStoreMergeInfo

      public MergeInfo getStoreMergeInfo()
      Return MergeInfo describing this merge.
    • isAborted

      public boolean isAborted()
      Returns true if this merge was or should be aborted.
    • setAborted

      public void setAborted()
      Marks this merge as aborted. The merge thread should terminate at the soonest possible moment.
    • checkAborted

      public void checkAborted() throws MergePolicy.MergeAbortedException
      Checks if merge has been aborted and throws a merge exception if so.
      Throws:
      MergePolicy.MergeAbortedException
    • getMergeProgress

      public MergePolicy.OneMergeProgress getMergeProgress()
      Returns a MergePolicy.OneMergeProgress instance for this merge, which provides statistics of the merge threads (run time vs. sleep time) if merging is throttled.
    • await

      boolean await(long timeout, TimeUnit timeUnit)
      Waits for this merge to be completed
      Returns:
      true if the merge finished within the specified timeout
    • hasFinished

      boolean hasFinished()
      Returns true if the merge has finished or false if it's still running or has not been started. This method will not block.
    • hasCompletedSuccessfully

      Optional<Boolean> hasCompletedSuccessfully()
      Returns true iff the merge completed successfully or false if the merge succeeded with a failure. This method will not block and return an empty Optional if the merge has not finished yet
    • onMergeComplete

      void onMergeComplete() throws IOException
      Called just before the merge is applied to IndexWriter's SegmentInfos
      Throws:
      IOException
    • initMergeReaders

      void initMergeReaders(IOFunction<SegmentCommitInfo,MergePolicy.MergeReader> readerFactory) throws IOException
      Sets the merge readers for this merge.
      Throws:
      IOException
    • getMergeReader

      List<MergePolicy.MergeReader> getMergeReader()
      Returns the merge readers or an empty list if the readers were not initialized yet.