hbase-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Josh Elser (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (HBASE-15089) Compatibility issue on flushCommits and put methods in HTable
Date Tue, 12 Jan 2016 18:23:39 GMT

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

Mime
View raw message