[ 
https://issues.apache.org/jira/browse/HBASE-8607?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13672006#comment-13672006
 ] 

Andrew Purtell commented on HBASE-8607:
---------------------------------------

As far as I know, OSGi does not support hot class replacement, but you can shut 
down, reload, and restart bundles/subsystems. This will only work as far as the 
interfaces and objects exchanged between the bundle and everything else doesn't 
change. For this to be possible with coprocessors, we would need to I guess 
refactor the server into a bundle then have coprocessors and filters also be 
structured and loaded as a bundle. As an alternative to hosting HBase itself in 
an OSGi runtime, we might embed the runtime as the coprocessor host and 
refactor only coprocessors and filters as bundles. So that would imply some 
kind of filter host environment too or a merging of filters and coprocessors. 

That is not a problem per se but an incompatible change and major surgery. We 
should prototype this if serious to see if an OSGi runtime (such as Apache 
Felix) can actually reliably do this. I look at Eclipse as an example of OSGi 
in action and wonder. When designing coprocessors we felt it easier and more 
reliable to require a process reload - guaranteed to work under every 
circumstance. 

As to whether or not we should do a quick reload, which might possibly be 
minimized to a close then reopen of a region when a coprocessor is reloaded, 
consider the circumstances of hot reload of a coprocessor in a regionserver 
with many ops in flight. What will the internal state of the coprocessor look 
like? Will there be cross-op dependencies? Currently at the hook points we 
enumerate a CopyOnWriteList to find installed coprocessors. The swap of the old 
coprocessor instance for the new will be fast and lockless but will happen at 
an arbitrary point in the op stream and for some brief period of time old and 
new instances will be simultaneously active. Replace this with OSGi particulars 
and the coprocessor side issues don't change. For this reason I think it best 
to have the coprocessor lifecycle tied to the region or regionserver lifecycle 
anyway. 

                
> Run HBase server in an OSGi container
> -------------------------------------
>
>                 Key: HBASE-8607
>                 URL: https://issues.apache.org/jira/browse/HBASE-8607
>             Project: HBase
>          Issue Type: New Feature
>          Components: regionserver
>            Reporter: James Taylor
>
> Run the HBase server in an OSGi container to support updating custom filters 
> and coprocessor updates without requiring a region server reboot. Typically, 
> applications that use coprocessors and custom filters also have shared 
> classes underneath, so putting the burden on the user to include some kind of 
> version name in the class is not adequate. Including the version name in the 
> package might work in some cases (at least until dependent jars start to 
> change as well), but is cumbersome and overburdens the app developer.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to