[ https://issues.apache.org/jira/browse/LUCENE-2320?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12845370#action_12845370 ]
Michael McCandless commented on LUCENE-2320: -------------------------------------------- bq. Or, maybe, we should think of MergePolicy API that doesn't require one to keep a reference to IW? Looks like IW is used pretty widely: for messaging (when infoStream is set), for retrieving the merges, for getting the Directory, and for getting number of deleted docs for a given segment. I guess an option would be to simply pass it around everywhere. Then we wouldn't have to break the circular dependendy. This is what MergeScheduler appears to do -- it's passed to .merge, and then each bg thread in CMS holds a reference to the writer (since it needs to ask for followon merges). > Add MergePolicy to IndexWriterConfig > ------------------------------------ > > Key: LUCENE-2320 > URL: https://issues.apache.org/jira/browse/LUCENE-2320 > Project: Lucene - Java > Issue Type: Improvement > Components: Index > Reporter: Shai Erera > Assignee: Michael McCandless > Fix For: 3.1 > > Attachments: LUCENE-2320.patch > > > Now that IndexWriterConfig is in place, I'd like to move MergePolicy to it as > well. The change is not straightforward and so I've kept it for a separate > issue. MergePolicy requires in its ctor an IndexWriter, however none can be > passed to it before an IndexWriter actually exists. And today IW may create > an MP just for it to be overridden by the application one line afterwards. I > don't want to make iw member of MP non-final, or settable by extending > classes, however it needs to remain protected so they can access it directly. > So the proposed changes are: > * Add a SetOnce object (to o.a.l.util), or Immutable, which can only be set > once (hence its name). It'll have the signature SetOnce<T> w/ *synchronized > set<T>* and *T get()*. T will be declared volatile, so that get() won't be > synchronized. > * MP will define a *protected final SetOnce<IndexWriter> writer* instead of > the current writer. *NOTE: this is a bw break*. any suggestions are welcomed. > * MP will offer a public default ctor, together with a set(IndexWriter). > * IndexWriter will set itself on MP using set(this). Note that if set will be > called more than once, it will throw an exception (AlreadySetException - or > does someone have a better suggestion, preferably an already existing Java > exception?). > That's the core idea. I'd like to post a patch soon, so I'd appreciate your > review and proposals. -- 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: java-dev-unsubscr...@lucene.apache.org For additional commands, e-mail: java-dev-h...@lucene.apache.org