[
https://issues.apache.org/jira/browse/LUCENE-2320?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12845530#action_12845530
]
Earwin Burrfoot commented on LUCENE-2320:
-----------------------------------------
We could split MergePolicy in two - class that represents the policy
(config/factory) and class that acts on that policy (instance).
So IW gets a MergePolicy that has no outside references, and creates a
MergePoliceman from it, supplying 'this' on construction.
Thus, circular reference still exists, but is contained for good.
Not sure I totally love the idea myself though.
> 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: [email protected]
For additional commands, e-mail: [email protected]