hbase-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Mingjie Lai" <mjla...@gmail.com>
Subject Re: Review Request: HBase-2001: Coprocessors: Colocate user code with regions
Date Fri, 19 Nov 2010 22:39:18 GMT

This is an automatically generated e-mail. To reply, visit:

(Updated 2010-11-19 14:39:18.378849)

Review request for hbase, stack, Andrew Purtell, and Jonathan Gray.


Final patch, ready to be checked in:
- Truncated white space at line end
- Rebuilt the patch after HBase-2002 checked in. 


The diff actually contains 2 seperate patches: HBase-2001 and the one for (HBASE-2002+HBASE-2321).
The reason is that HBase-2001's CommandTarget relies on HBASE-2002 + HBASE-2321 which patches
are still under review. I have to include Gary's HBASE-2002, HBASE-2321 with this diff, since
reviewboard is so powerful :) and it disallow my diff to be based on some unchecked in patch.

Eventually the patch here should be committed after 2001 and 2321. I will make another patch
after they got checked in. 

Both HBase-2001 and the dynamic RPC stuff are quite big patches. Total number of lines are
more than 7k. I turned back and forth, but still don't have a good idea to create the patch
in order to reduce the review pain. However right now I'm putting the whole patch for all
the 3 issues. Here the list of file which are only related to coprocessor:



(Here is a brief description. Please find much more details at the package-info.java in the
diff. I also post the package-info.html to https://issues.apache.org/jira/browse/HBASE-2001
as an attachment.)

Coprocessors are code that runs in-process on each region server. Regions contain references
to the coprocessor implementation classes associated with them. Coprocessor classes will be
loaded either from local jars on the region server's classpath or via the HDFS classloader.

Multiple types of coprocessors are provided to provide sufficient flexibility for potential
use cases. Right now there are:

* Coprocessor: provides region lifecycle management hooks, e.g., region open/close/split/flush/compact
* RegionObserver: provides hook for monitor table operations from client side, such as table
get/put/scan/delete, etc.
* Endpoint: provides on demand triggers for any arbitrary function executed at a region. One
use case is column aggregation at region server.

A coprocessor is required to implement Coprocessor interface so that coprocessor framework
can manage it internally.

Another design goal of this interface is to provide simple features for making coprocessors
useful, while exposing no more internal state or control actions of the region server than
necessary and not exposing them directly. 

If the coprocessor implements the RegionObserver interface it can observe and mediate client
actions on the region. 

Coprocessor and RegionObserver provide certain hooks for injecting user code running at each
region. These code will be triggerd with existing HTable and HBaseAdmin operations at the
certain hook points.

Through Endpoint and dynamic RPC protocol, you can define your own interface communicated
between client and region server, i.e., you can create a new method, specify passed parameters
and return types for the method. And the new Endpoint methods can be triggered by calling
client side dynamic RPC functions -- HTable.exec(...). 

Coprocess loading
A customized coprocessor can be loaded by two different ways, by configuration, or by HTableDescriptor
for a newly created table.

(Currently we don't really have an on demand coprocessor loading machanism for opened regions.
However it should be easy to create a dedicated CommandTarget for coprocessor loading) 

This addresses bug HBase-2001.

Diffs (updated)

  src/main/java/org/apache/hadoop/hbase/coprocessor/BaseEndpointCoprocessor.java PRE-CREATION

  src/main/java/org/apache/hadoop/hbase/coprocessor/BaseRegionObserverCoprocessor.java PRE-CREATION

  src/main/java/org/apache/hadoop/hbase/coprocessor/Coprocessor.java PRE-CREATION 
  src/main/java/org/apache/hadoop/hbase/coprocessor/CoprocessorEnvironment.java PRE-CREATION

  src/main/java/org/apache/hadoop/hbase/coprocessor/CoprocessorException.java PRE-CREATION

  src/main/java/org/apache/hadoop/hbase/coprocessor/RegionObserver.java PRE-CREATION 
  src/main/java/org/apache/hadoop/hbase/coprocessor/package-info.java PRE-CREATION 
  src/main/java/org/apache/hadoop/hbase/regionserver/CoprocessorHost.java PRE-CREATION 
  src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java d669de1 
  src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java 2ef6432 
  src/main/java/org/apache/hadoop/hbase/regionserver/RegionServerServices.java 1309f93 
  src/main/java/org/apache/hadoop/hbase/regionserver/SplitTransaction.java 1bcde8c 
  src/main/java/org/apache/hadoop/hbase/regionserver/handler/OpenRegionHandler.java ace7997

  src/main/resources/hbase-default.xml 630c041 
  src/test/java/org/apache/hadoop/hbase/coprocessor/ColumnAggregationEndpoint.java PRE-CREATION

  src/test/java/org/apache/hadoop/hbase/coprocessor/ColumnAggregationProtocol.java PRE-CREATION

  src/test/java/org/apache/hadoop/hbase/coprocessor/SimpleRegionObserver.java PRE-CREATION

  src/test/java/org/apache/hadoop/hbase/coprocessor/TestCoprocessorEndpoint.java PRE-CREATION

  src/test/java/org/apache/hadoop/hbase/coprocessor/TestCoprocessorInterface.java PRE-CREATION

  src/test/java/org/apache/hadoop/hbase/coprocessor/TestRegionObserverInterface.java PRE-CREATION

  src/test/java/org/apache/hadoop/hbase/coprocessor/TestRegionObserverStacking.java PRE-CREATION

Diff: http://review.cloudera.org/r/876/diff




View raw message