Support RPC interface changes at runtime
----------------------------------------

                 Key: HBASE-2321
                 URL: https://issues.apache.org/jira/browse/HBASE-2321
             Project: Hadoop HBase
          Issue Type: Improvement
            Reporter: Andrew Purtell
             Fix For: 0.21.0


Now we are able to append methods to interfaces without breaking RPC 
compatibility with earlier releases. However there is no way that I am aware of 
to dynamically add entire new RPC interfaces. Methods/parameters are fixed to 
the class used to instantiate the server at that time. Coprocessors need this. 
They will extend functionality on regions in arbitrary ways. How to support 
that on the client side? A couple of options:

1. New RPC from scratch.

2. Modify HBaseServer such that multiple interface objects can be used for 
reflection and objects can be added or removed at runtime. 

3. Have the coprocessor host instantiate new HBaseServer instances on ephemeral 
ports and publish the endpoints to clients via Zookeeper. Couple this with a 
small modification to HBaseServer to support elastic thread pools to minimize 
the number of threads that might be kept around in the JVM. 

4. Add a generic method to HRegionInterface, an ioctl-like construction, which 
accepts a ImmutableBytesWritable key and an array of Writable as parameters. 

My opinion is we should opt for #4 as it is the simplest and most expedient 
approach. I could also do #3 if consensus prefers. Really we should do #1 but 
it's not clear who has the time for that at the moment. 

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

Reply via email to