[ 
https://issues.apache.org/jira/browse/HBASE-15089?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15094431#comment-15094431
 ] 

Josh Elser commented on HBASE-15089:
------------------------------------

[~ndimiduk] asked if I could take a look here because we had talked about 
compat in earlier 1.1 releases.

bq.  The change went in with out any deprecation path as we dont have 
compatibility guidelines for older versions like 98? It was intended?

>From the book:

bq. There are no known issues running a rolling upgrade from HBase 0.98.x to 
HBase 1.0.0.

Which implies to me that the only binary compatibility, not source 
compatibility, is guaranteed between 0.98 and 1.0. Looking at the original 
changes: (for context, I'm looking at 
https://issues.apache.org/jira/secure/attachment/12694007/HBASE-12728.06-branch-1.0.patch
 as the basis of my opinion).

{code}
-  public void put(final List<Put> puts)
-      throws InterruptedIOException, RetriesExhaustedWithDetailsException {
-    for (Put put : puts) {
-      doPut(put);
-    }
+  public void put(final List<Put> puts) throws IOException {
+    getBufferedMutator().mutate(puts);
{code}

This is definitely an issue with source compatibility on HTable only because 
callers who were catching IIOException and REWDException would now fail because 
of the more general IOException being thrown instead. However, there is binary 
compatibility with 0.98 as long as these methods whose "throws" signature was 
changed did not actually throw any IOExceptions than the IIOException and 
REWDException. I feel good about this because I see the original two exceptions 
being thrown on BufferedMutatorImpl.

The changes to BufferedMutator are just fine. It was a new API addition. There 
are no expectations on its compatibility for this change going into 1.0.0.

As such, I don't think this actually violated any compatibility agreements 
between 0.98 and 1.0 (explicitly -- binary compatibility is retained, so 
rolling upgrades are possible). I think these changes adhered to the policy 
that HBase intended to adhere to. I understand the pain, but this cross-over 
period was bound to have some issues like this. 1.0+ compatibility has more 
stringent requirements than before which is a step in the right direction.

Would be nice if [~enis] and [~busbey] could verify this too (to make sure I'm 
not talking out of turn).

> Compatibility issue on flushCommits and put methods in HTable
> -------------------------------------------------------------
>
>                 Key: HBASE-15089
>                 URL: https://issues.apache.org/jira/browse/HBASE-15089
>             Project: HBase
>          Issue Type: Bug
>    Affects Versions: 1.1.2
>            Reporter: Yu Li
>            Assignee: Yu Li
>            Priority: Minor
>         Attachments: HBASE-15089.patch, HBASE-15089.v2.patch
>
>
> Previously in 0.98 HTable#flushCommits throws InterruptedIOException and 
> RetriesExhaustedWithDetailsException, but now in 1.1.2 this method signature 
> has been changed to throw IOException, which will force application code 
> changes for exception handling (previous catch on InterruptedIOException and 
> RetriesExhaustedWithDetailsException become invalid). HTable#put has the same 
> problem.
> After a check, the compatibility issue was introduced by HBASE-12728. Will 
> recover the compatibility In this JIRA.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to