cassandra-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Jonathan Ellis (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (CASSANDRA-2755) ColumnFamilyRecordWriter fails to throw a write exception encountered after the user begins to close the writer
Date Mon, 13 Jun 2011 15:55:51 GMT

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

Jonathan Ellis commented on CASSANDRA-2755:
-------------------------------------------

bq. Isn't it possible the put(..) is being called while the RangeClient thread is inside close?

old close, new closeInternal?

Yes, but I don't see how that changes things.  I.e., it's always possible that the last put()
will happen before an exception is set; hence, the extra check on close.

> ColumnFamilyRecordWriter fails to throw a write exception encountered after the user
begins to close the writer
> ---------------------------------------------------------------------------------------------------------------
>
>                 Key: CASSANDRA-2755
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-2755
>             Project: Cassandra
>          Issue Type: Bug
>          Components: Hadoop
>    Affects Versions: 0.8.0
>            Reporter: Greg Katz
>            Assignee: Mck SembWever
>         Attachments: 2755-v2.txt, CASSANDRA-2755.patch
>
>
> There appears to be a race condition in {{ColumnFamilyRecordWriter}} that can result
in the loss of an exception. Here is how it can happen (W stands for the {{RangeClient}}'s
worker thread; U stands for the {{ColumnFamilyRecordWriter}} user's thread):
> # W: {{RangeClient}}'s {{run}} method catches an exception originating in the Thrift
client/socket, but doesn't get a chance to set it on the {{lastException}} field before it
the thread is preempted.
> # U: The user calls {{close}} which calls {{stopNicely}}. Because the {{lastException}}
field is null, {{stopNicely}} does not throw anything. {{close}} then joins on the worker
thread.
> # W: The {{RangeClient}}'s {{run}} method sets the {{lastException}} field and exits.
> # U: Although the thread in {{close}} is waiting for the worker thread to exit, it has
already checked the {{lastException}} field so it doesn't detect the presence of the last
exception. Instead, {{close}} returns without throwing anything.
> This race condition means that intermittently write failures will go undetected.

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

        

Mime
View raw message