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
