[
https://issues.apache.org/jira/browse/LUCENE-847?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Michael McCandless updated LUCENE-847:
--------------------------------------
Attachment: LUCENE-847.take6.patch
OK, another rev of the patch (take6). I think it's close!
This patch passes all unit tests with SerialMergeScheduler (left as
the default for now) and also passes all unit tests once you switch
the default to ConcurrentMergeScheduler instead.
I made one simplification to the approach: IndexWriter now keeps track
of "pendingMerges" (merges that mergePolicy has declared are necessary
but have not yet been started), and "runningMerges" (merges currently
in flight). Then MergeScheduler just asks IndexWriter for the next
pending merge when it's ready to run it. This also cleaned up how
cascading works.
Other changes:
* Optimize: optimize is now fully concurrent (it can run multiple
merges at once, new segments can be flushed during an optimize,
etc). Optimize will optimize only those segments present when it
started (newly flushed segments may remain separate).
* New API: optimize(boolean doWait) allows you to not wait for
optimize to complete (it runs in background). This only works
when MergeScheduler uses threads.
* New API: close(boolean doWait) allows you to not wait for running
merges if you want to "close in a hurry". Also only works when
MergeScheduler uses threads.
* I fixed LogMergePolicy to expose merge concurrency during optimize
by first calling the "normal" merge policy to see if it requires
merges and returning those merges if so, and then falling back to
the normal "merge the tail <= mergeFactor segments until there is
only 1 left".
* Because IndexModifier synchronizes on directory, it can't use
ConcurrentMergeScheduler since this quickly leads to deadlock at
least during IndexWriter.close. So I set it back to
SerialMergeScheduler (it is deprecated anyway).
* Added private IndexWriter.message(...) that prints message to the
infoStream prefixed by the thread name and changed all
infoStream.print*'s to message(...). Also added more messages in
the exceptional cases to aid future diagnostics.
* Added more unit tests
> Factor merge policy out of IndexWriter
> --------------------------------------
>
> Key: LUCENE-847
> URL: https://issues.apache.org/jira/browse/LUCENE-847
> Project: Lucene - Java
> Issue Type: Improvement
> Components: Index
> Reporter: Steven Parkes
> Assignee: Steven Parkes
> Fix For: 2.3
>
> Attachments: concurrentMerge.patch, LUCENE-847.patch.txt,
> LUCENE-847.patch.txt, LUCENE-847.take3.patch, LUCENE-847.take4.patch,
> LUCENE-847.take5.patch, LUCENE-847.take6.patch, LUCENE-847.txt
>
>
> If we factor the merge policy out of IndexWriter, we can make it pluggable,
> making it possible for apps to choose a custom merge policy and for easier
> experimenting with merge policy variants.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]