[ 
https://issues.apache.org/jira/browse/LUCENE-2320?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12845930#action_12845930
 ] 

Shai Erera commented on LUCENE-2320:
------------------------------------

But it's MP which requires IW. So how will your policeman (like the name :)) 
proposal prevent it? I think that setting IW on MP is not such a bad thing. If 
MP needs it then it needs. The question now is to what length do we want to go 
w/ it: make it sort of final (in which case SetOnce makes sense) or settle w/ a 
setIW which is simpler.

This issue is more about moving MP into IWC than refactor MP. I'd like to keep 
it focused on that as much as possible. I don't mean that we should stop 
discussing the refactoring, just to say it can be done separately. After MP 
moves to IWC and all code is converted to use the new API, refactoring MP 
internally should not affect the API level, right?

If u agree w/ that, then how do u propose to continue? W/ SetOnce or a simple 
setter?  

> 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

Reply via email to