You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@hbase.apache.org by Asaf Mesika <as...@gmail.com> on 2013/10/17 21:18:04 UTC

Endpoint Coprocessor Protocol and implementation versioning

Hi,

I'm writing an Endpoint Coprocessor for HBase v0.94.6 (cdh4.3.1).

I'm trying to understand how the CoprocessorProtocol and
CoprocessorEndPoint implementation versioning works, both backwards and
forward.

For instance, I have my protocol as:

public interface MyQueryProtocol extends CoprocessorProtocol{

    public static final long VERSION = 1L;

    public MyResult query(int x) throws IOException;
}

Let's say I have deployed them both at the client and at the Region Server
(and their respective implementation.
Now lets say after 0.5 year I've discovered I want to change the method by
adding another parameter y:

public interface MyQueryProtocol extends CoprocessorProtocol{

    public static final long VERSION = *2L*;

    public MyResult query(int x*, int y*) throws IOException;
}

Am I suppose to have both the old method and the new method in the
interface?
What happens if I update the client first - is it even possible, or is it
always the order of: server first and then client?

So in essence: How am I supposed to do both in the protocol and endpoint
implementation in terms of versioning.

Thanks!

Re: Endpoint Coprocessor Protocol and implementation versioning

Posted by Ted Yu <yu...@gmail.com>.
When cluster does rolling restart to upgrade servers, you would want to
keep clients working during that period of time.
This means version 2 of the endpoint should implement both methods.

Once cluster is fully upgraded, you can switch the clients over to using
the version 2 protocol.

Cheers


On Thu, Oct 17, 2013 at 12:18 PM, Asaf Mesika <as...@gmail.com> wrote:

> Hi,
>
> I'm writing an Endpoint Coprocessor for HBase v0.94.6 (cdh4.3.1).
>
> I'm trying to understand how the CoprocessorProtocol and
> CoprocessorEndPoint implementation versioning works, both backwards and
> forward.
>
> For instance, I have my protocol as:
>
> public interface MyQueryProtocol extends CoprocessorProtocol{
>
>     public static final long VERSION = 1L;
>
>     public MyResult query(int x) throws IOException;
> }
>
> Let's say I have deployed them both at the client and at the Region Server
> (and their respective implementation.
> Now lets say after 0.5 year I've discovered I want to change the method by
> adding another parameter y:
>
> public interface MyQueryProtocol extends CoprocessorProtocol{
>
>     public static final long VERSION = *2L*;
>
>     public MyResult query(int x*, int y*) throws IOException;
> }
>
> Am I suppose to have both the old method and the new method in the
> interface?
> What happens if I update the client first - is it even possible, or is it
> always the order of: server first and then client?
>
> So in essence: How am I supposed to do both in the protocol and endpoint
> implementation in terms of versioning.
>
> Thanks!
>