[ 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)