hbase-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Gary Helmling <ghelml...@gmail.com>
Subject Coprocessor Endpoint RPC and 0.96 backwards compatibility
Date Thu, 20 Sep 2012 19:02:37 GMT
Now that HBASE-5448 is in trunk, we have support for defining
coprocessor endpoints as protocol buffer based Services, using PB
serialization for the endpoint RPC calls.  This is accomplished via a
new set of HTable methods (HTable.coprocessorService*).  As part of
the initial implementation, AccessControllerProtocol was converted to
a PB-based Service, and individual JIRA issues have been opened to
convert the remaining CoprocessorProtocol-based implementations that
we ship.

The HBASE-5448 implementation allows Service based endpoints to be
registered alongside CoprocessorProtocol based endpoints, but
deprecates the CoprocessorProtocol based support:

CoprocessorProtocol - base interface for endpoint RPC protocols
HTable.coprocessorProxy()
HTable.coprocessorExec(*)
supporting classes like Exec, ExecResult, ExecRPCInvoker

This seemed like the cleanest path to upgrade, but if all of this code
is not removed until 0.98, it means that we will be dependent on
lingering usage of Writable serialization for CoprocessorProtocol
based RPC in the 0.96 release.

Given that 0.96 has been dubbed "the singularity", with some
acknowledgement that we will be breaking backward compatibility,
should we make an exception to the normal deprecation process and
completely remove the CoprocessorProtocol-based support in 0.96?  This
would allow us to drop Writable support from coprocessor endpoint
RPCs.  Or should we leave CoprocessorProtocol support deprecated, to
be removed in 0.98?

On the one hand, coprocessors and CoprocessorProtocol RPC have been
described as an experimental feature with an evolving interface.  On
the other hand, the switch over from CoprocessorProtocol to PB Service
implementations for anyone developing their own endpoints will be
semi-painful, with a new requirement to define a .proto file, compile
with protoc, and very different client usage exposing the PB
interfaces.

What are everyone's thoughts?

--gh

Mime
View raw message