hbase-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Neil Bartlett (JIRA)" <j...@apache.org>
Subject [jira] Commented: (HBASE-3260) Coprocessors: Lifecycle management
Date Wed, 01 Dec 2010 21:07:15 GMT

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

Neil Bartlett commented on HBASE-3260:

I was directed to this JIRA by a Twitter conversation between Gary and @asynchronaut (Holger

If you are looking for a lightweight library that can help to provide OSGi-like lifecycle
management, there is an obvious answer: OSGi itself. Apache Felix is a fully certified OSGi
implementation and it is just a 300k JAR file. It can be embedded in a Java application with
literally five lines of code.

You seem to be concerned that OSGi is heavyweight. While it's true that it is used in many
heavyweight servers including e.g. IBM WebSphere, the core of OSGi is very tight indeed, consisting
of only 15 interfaces and 16 classes (of which 9 are "Permission" classes for Java 2 security).

By embedding OSGi you will benefit from existing tools and skills, in addition to opening
up the possibility for users to use many higher level frameworks that build on top of OSGi.
Also you will be using lifecycle management code that is very well tested and proven.

> Coprocessors: Lifecycle management
> ----------------------------------
>                 Key: HBASE-3260
>                 URL: https://issues.apache.org/jira/browse/HBASE-3260
>             Project: HBase
>          Issue Type: Sub-task
>            Reporter: Andrew Purtell
>             Fix For: 0.92.0
>         Attachments: statechart.png
> Considering extending CPs to the master, we have no equivalent to pre/postOpen and pre/postClose
as on the regionserver. We also should consider how to resolve dependencies and initialization
ordering if loading coprocessors that depend on others. 
> OSGi (http://en.wikipedia.org/wiki/OSGi) has a lifecycle API and is familiar to many
Java programmers, so we propose to borrow its terminology and state machine.
> A lifecycle layer manages coprocessors as they are dynamically installed, started, stopped,
updated and uninstalled. Coprocessors rely on the framework for dependency resolution and
class loading. In turn, the framework calls up to lifecycle management methods in the coprocessor
as needed.
> A coprocessor transitions between the below states over its lifetime:
> ||State||Description||
> |UNINSTALLED|The coprocessor implementation is not installed. This is the default implicit
> |INSTALLED|The coprocessor implementation has been successfully installed|
> |STARTING|A coprocessor instance is being started.|
> |ACTIVE|The coprocessor instance has been successfully activated and is running.|
> |STOPPING|A coprocessor instance is being stopped.|
> See attached state diagram. Transitions to STOPPING will only happen as the region is
being closed. If a coprocessor throws an unhandled exception, this will cause the RegionServer
to close the region, stopping all coprocessor instances on it. 
> Transitions from INSTALLED->STARTING and ACTIVE->STOPPING would go through upcall
methods into the coprocessor via the CoprocessorLifecycle interface:
> {code:java}
> public interface CoprocessorLifecycle {
>   void start(CoprocessorEnvironment env) throws IOException; 
>   void stop(CoprocessorEnvironment env) throws IOException;
> }
> {code}

This message is automatically generated by JIRA.
You can reply to this email to add a comment to the issue online.

View raw message