hbase-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Solomon Duskis (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (HBASE-13271) Table#puts(List<Put>) operation is indeterminate; remove!
Date Wed, 18 Mar 2015 21:38:38 GMT

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

Solomon Duskis commented on HBASE-13271:

There shouldn't be a need to flush any buffer in Table.  Autoflush should always be true.
 The idea is that users who want autoflush=false should use the new BufferedMutator interface
rather than a table. 

The problem, it would seem, is that the behavior of getBufferedMutator().mutate(puts); is
indeterminate.  We should have more determinate behavior for exception cases in put(List<Put>).

I personally think that the put(List<Put>) method is useful.  There should be an efficient
(and determinate) method of doing a synchronous batch call.  

Maybe HTable.put(List<Put>) should use HTable.batch() rather than BufferedMutator.mutate
for the autoflush=true case.  If autoflush=false, then someone must have accessed an HTable
class rather than a Table interface, in which case they have access to the flush() method
on HTable, and using a BufferedMutator should be safe.

> Table#puts(List<Put>) operation is indeterminate; remove!
> ---------------------------------------------------------
>                 Key: HBASE-13271
>                 URL: https://issues.apache.org/jira/browse/HBASE-13271
>             Project: HBase
>          Issue Type: Improvement
>          Components: API
>    Affects Versions: 1.0.0
>            Reporter: stack
> Another API issue found by [~larsgeorge]:
> "Table.put(List<Put) is questionable after the API change."
> {code}
> [Mar-17 9:21 AM] Lars George: Table.put(List<Put>) is weird since you cannot flush
partial lists
> [Mar-17 9:21 AM] Lars George: Say out of 5 the third is broken, then the put() call returns
with a local exception (say empty Put) and then you have 2 that are in the buffer
> [Mar-17 9:21 AM] Lars George: but how to you force commit them?
> [Mar-17 9:22 AM] Lars George: In the past you would call flushCache(), but that is "gone"
> [Mar-17 9:22 AM] Lars George: and flush() is not available on a Table
> [Mar-17 9:22 AM] Lars George: And you cannot access the underlying BufferedMutation neither
> [Mar-17 9:23 AM] Lars George: You can *only* add more Puts if you can, or call close()
> [Mar-17 9:23 AM] Lars George: that is just weird to explain
> {code}
> So, Table needs to get flush back or we deprecate this method or it flushes immediately
and does not return until complete in the implementation.

This message was sent by Atlassian JIRA

View raw message