You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@hbase.apache.org by "Nicolas Spiegelberg (JIRA)" <ji...@apache.org> on 2011/06/10 00:49:59 UTC

[jira] [Created] (HBASE-3974) Client: Ability to Discard Bad HTable Puts

Client: Ability to Discard Bad HTable Puts
------------------------------------------

                 Key: HBASE-3974
                 URL: https://issues.apache.org/jira/browse/HBASE-3974
             Project: HBase
          Issue Type: Bug
          Components: client
    Affects Versions: 0.90.3, 0.89.20100924, 0.92.0
            Reporter: Nicolas Spiegelberg
            Assignee: Nicolas Spiegelberg
            Priority: Critical
             Fix For: 0.90.4


While debugging an application consistency issue, we noticed that a single, synchronous Put request threw a NoServerForRegionException but eventually succeeded 90 seconds later.  The problem is that failed put requests are not actually removed from the HTable's writeBuffer.  This makes sense for asynchronous puts using setAutoFlush(false) but don't make sense for the default case where we expect synchronous operation.  We should discard all failed puts for the synchronous case and provide an API so asynchronous requests can have their failed puts cleared.

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

[jira] [Updated] (HBASE-3974) Client: Ability to Discard Bad HTable Puts

Posted by "Nicolas Spiegelberg (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/HBASE-3974?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Nicolas Spiegelberg updated HBASE-3974:
---------------------------------------

    Attachment: HBASE-3974.patch

patch should apply cleanly to 0.89, 0.90, & 0.92.  I strongly recommend anyone who needs reliable Puts apply this patch to their build.

> Client: Ability to Discard Bad HTable Puts
> ------------------------------------------
>
>                 Key: HBASE-3974
>                 URL: https://issues.apache.org/jira/browse/HBASE-3974
>             Project: HBase
>          Issue Type: Bug
>          Components: client
>    Affects Versions: 0.89.20100924, 0.90.3, 0.92.0
>            Reporter: Nicolas Spiegelberg
>            Assignee: Nicolas Spiegelberg
>            Priority: Critical
>             Fix For: 0.90.4, 0.92.0
>
>         Attachments: HBASE-3974.patch
>
>
> While debugging an application consistency issue, we noticed that a single, synchronous Put request threw a NoServerForRegionException but eventually succeeded 90 seconds later.  The problem is that failed put requests are not actually removed from the HTable's writeBuffer.  This makes sense for asynchronous puts using setAutoFlush(false) but don't make sense for the default case where we expect synchronous operation.  We should discard all failed puts for the synchronous case and provide an API so asynchronous requests can have their failed puts cleared.

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

[jira] [Commented] (HBASE-3974) Client: Ability to Discard Bad HTable Puts

Posted by "Dave Latham (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/jira/browse/HBASE-3974?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13047773#comment-13047773 ] 

Dave Latham commented on HBASE-3974:
------------------------------------

Thanks for taking on this issue, Nicolas.

I think it's good to change the default behavior for a synchronous Put to not hang around in the write buffer.  However, I also think the default behavior for when a client calls flushCommits should be that the buffered commits are successfully committed, or an exception is thrown.

What do you think about using a separate setClearBufferOnFail method rather than overloading setAutoFlush?

> Client: Ability to Discard Bad HTable Puts
> ------------------------------------------
>
>                 Key: HBASE-3974
>                 URL: https://issues.apache.org/jira/browse/HBASE-3974
>             Project: HBase
>          Issue Type: Bug
>          Components: client
>    Affects Versions: 0.89.20100924, 0.90.3, 0.92.0
>            Reporter: Nicolas Spiegelberg
>            Assignee: Nicolas Spiegelberg
>            Priority: Critical
>             Fix For: 0.90.4, 0.92.0
>
>         Attachments: HBASE-3974.patch
>
>
> While debugging an application consistency issue, we noticed that a single, synchronous Put request threw a NoServerForRegionException but eventually succeeded 90 seconds later.  The problem is that failed put requests are not actually removed from the HTable's writeBuffer.  This makes sense for asynchronous puts using setAutoFlush(false) but don't make sense for the default case where we expect synchronous operation.  We should discard all failed puts for the synchronous case and provide an API so asynchronous requests can have their failed puts cleared.

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

[jira] [Updated] (HBASE-3974) Client: Ability to Discard Bad HTable Puts

Posted by "Nicolas Spiegelberg (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/HBASE-3974?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Nicolas Spiegelberg updated HBASE-3974:
---------------------------------------

    Fix Version/s: 0.92.0
           Status: Patch Available  (was: Open)

> Client: Ability to Discard Bad HTable Puts
> ------------------------------------------
>
>                 Key: HBASE-3974
>                 URL: https://issues.apache.org/jira/browse/HBASE-3974
>             Project: HBase
>          Issue Type: Bug
>          Components: client
>    Affects Versions: 0.90.3, 0.89.20100924, 0.92.0
>            Reporter: Nicolas Spiegelberg
>            Assignee: Nicolas Spiegelberg
>            Priority: Critical
>             Fix For: 0.90.4, 0.92.0
>
>
> While debugging an application consistency issue, we noticed that a single, synchronous Put request threw a NoServerForRegionException but eventually succeeded 90 seconds later.  The problem is that failed put requests are not actually removed from the HTable's writeBuffer.  This makes sense for asynchronous puts using setAutoFlush(false) but don't make sense for the default case where we expect synchronous operation.  We should discard all failed puts for the synchronous case and provide an API so asynchronous requests can have their failed puts cleared.

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

[jira] [Commented] (HBASE-3974) Client: Ability to Discard Bad HTable Puts

Posted by "Dave Latham (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/jira/browse/HBASE-3974?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13046906#comment-13046906 ] 

Dave Latham commented on HBASE-3974:
------------------------------------

+1

I've seen the same thing happen with auto flush off, when calling flushCommits.

> Client: Ability to Discard Bad HTable Puts
> ------------------------------------------
>
>                 Key: HBASE-3974
>                 URL: https://issues.apache.org/jira/browse/HBASE-3974
>             Project: HBase
>          Issue Type: Bug
>          Components: client
>    Affects Versions: 0.89.20100924, 0.90.3, 0.92.0
>            Reporter: Nicolas Spiegelberg
>            Assignee: Nicolas Spiegelberg
>            Priority: Critical
>             Fix For: 0.90.4
>
>
> While debugging an application consistency issue, we noticed that a single, synchronous Put request threw a NoServerForRegionException but eventually succeeded 90 seconds later.  The problem is that failed put requests are not actually removed from the HTable's writeBuffer.  This makes sense for asynchronous puts using setAutoFlush(false) but don't make sense for the default case where we expect synchronous operation.  We should discard all failed puts for the synchronous case and provide an API so asynchronous requests can have their failed puts cleared.

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

[jira] [Updated] (HBASE-3974) Client: Ability to Discard Bad HTable Puts

Posted by "Nicolas Spiegelberg (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/HBASE-3974?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Nicolas Spiegelberg updated HBASE-3974:
---------------------------------------

    Resolution: Fixed
        Status: Resolved  (was: Patch Available)

> Client: Ability to Discard Bad HTable Puts
> ------------------------------------------
>
>                 Key: HBASE-3974
>                 URL: https://issues.apache.org/jira/browse/HBASE-3974
>             Project: HBase
>          Issue Type: Bug
>          Components: client
>    Affects Versions: 0.89.20100924, 0.90.3, 0.92.0
>            Reporter: Nicolas Spiegelberg
>            Assignee: Nicolas Spiegelberg
>            Priority: Critical
>             Fix For: 0.90.4, 0.92.0
>
>         Attachments: HBASE-3974.patch
>
>
> While debugging an application consistency issue, we noticed that a single, synchronous Put request threw a NoServerForRegionException but eventually succeeded 90 seconds later.  The problem is that failed put requests are not actually removed from the HTable's writeBuffer.  This makes sense for asynchronous puts using setAutoFlush(false) but don't make sense for the default case where we expect synchronous operation.  We should discard all failed puts for the synchronous case and provide an API so asynchronous requests can have their failed puts cleared.

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira