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

Tim Smith commented on LUCENE-2345:
-----------------------------------

bq. I think we should only commit this only on 3.1 (new feature)? 

3.1 only of course (just posted a 3.0 patch now as that's what i'm using and i 
need the functionality now)

bq. Tim, do you think the plugin model ("extension by composition") would be 
workable for your use case? Ie, instead of a factory enabling subclasses of 
SegmentReader?

As long as the plugin model allows the same capabilities, that could work just 
fine and could be the final solution for this ticket.

I mainly need the ability to add data structures to a SegmentReader that will 
be shared for all SegmentReader's for a segment, and then add some extra meta 
information on a per instance basis

Is there a ticket or wiki page that details the "plugin" architecture/design so 
i could take a look?

However, would the plugins allow overriding specific IndexReader methods?

I still would see the need to be able to override specific methods for a 
SegmentReader (in order to track statistics/provide 
changed/different/faster/more feature rich implementations)
I don't have a direct need for this right now, however i could envision needing 
this in the future

Here's a few requirements i would pose for the plugin model (maybe they are 
already though of):
* Plugins have hooks to "reopen" themselves (some plugins can be shared across 
all instances of a SegmentReader)
** These reopen hooks would be called during SegmentReader.reopen()
* Plugins are initialized during "SegmentReader.get/SegmentReader.reopen"
** plugins should not have to be added after the fact, as this would not allow 
proper warming/initializing of plugins inside the NRT indexing
** i assume this would need be added as some list of PluginFactories added to 
the IndexWriter/IndexReader.open()?
* Plugins should have a "close" method that is called in SegmentReader.close()
** This will allow proper release of any resources
* Plugins are passed an instance of the SegmentReader they are for
** Plugins should be able to access all methods on a SegmentReader
** This would effectively allow overriding a SegmentReader by having a plugin 
provide the functionality instead (however only people explicitly calling the 
plugin would get this benefit)





> Make it possible to subclass SegmentReader
> ------------------------------------------
>
>                 Key: LUCENE-2345
>                 URL: https://issues.apache.org/jira/browse/LUCENE-2345
>             Project: Lucene - Java
>          Issue Type: Wish
>          Components: Index
>            Reporter: Tim Smith
>             Fix For: 3.1
>
>         Attachments: LUCENE-2345_3.0.patch
>
>
> I would like the ability to subclass SegmentReader for numerous reasons:
> * to capture initialization/close events
> * attach custom objects to an instance of a segment reader (caches, 
> statistics, so on and so forth)
> * override methods on segment reader as needed
> currently this isn't really possible
> I propose adding a SegmentReaderFactory that would allow creating custom 
> subclasses of SegmentReader
> default implementation would be something like:
> {code}
> public class SegmentReaderFactory {
>   public SegmentReader get(boolean readOnly) {
>     return readOnly ? new ReadOnlySegmentReader() : new SegmentReader();
>   }
>   public SegmentReader reopen(SegmentReader reader, boolean readOnly) {
>     return newSegmentReader(readOnly);
>   }
> }
> {code}
> It would then be made possible to pass a SegmentReaderFactory to IndexWriter 
> (for pooled readers) as well as to SegmentReader.get() (DirectoryReader.open, 
> etc)
> I could prepare a patch if others think this has merit
> Obviously, this API would be "experimental/advanced/will change in future"

-- 
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