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

Jason Brown commented on CASSANDRA-5692:
----------------------------------------

On the whole, lgtm, but I'm not sure about the InterruptedException part. From 
my reading of the CDL javadoc, the IE is thrown "if the current thread is 
interrupted while waiting". This is indicates that the waiting thread, the one 
calling versionLatch.await in your code, is being interrupted, not the 
Handshake thread. Everywhere else in OTC where we catch IE, we throw an 
AssertionError - basically stop execution of the method and bail. I'm not sure 
we would we do something different in handshakeVersion(), as if we got an 
interrupt I think we'd want to bail out, as well, and try to to finish 
connecting to the remote node.

Also, as a minor nit, I moved the versionLatch.countDown() into a finally 
block, as we want to unblock the waiting thread regardless of success or 
failure to read the version from the socket.
                
> Race condition in detecting version on a mixed 1.1/1.2 cluster
> --------------------------------------------------------------
>
>                 Key: CASSANDRA-5692
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-5692
>             Project: Cassandra
>          Issue Type: Bug
>    Affects Versions: 1.1.9, 1.2.5
>            Reporter: Sergio Bossa
>            Priority: Minor
>         Attachments: 5692-0005.patch, 5692-0006.patch
>
>
> On a mixed 1.1 / 1.2 cluster, starting 1.2 nodes fires sometimes a race 
> condition in version detection, where the 1.2 node wrongly detects version 6 
> for a 1.1 node.
> It works as follows:
> 1) The just started 1.2 node quickly opens an OutboundTcpConnection toward a 
> 1.1 node before receiving any messages from the latter.
> 2) Given the version is correctly detected only when the first message is 
> received, the version is momentarily set at 6.
> 3) This opens an OutboundTcpConnection from 1.2 to 1.1 at version 6, which 
> gets stuck in the connect() method.
> Later, the version is correctly fixed, but all outbound connections from 1.2 
> to 1.1 are stuck at this point.
> Evidence from 1.2 logs:
> TRACE 13:48:31,133 Assuming current protocol version for /127.0.0.2
> DEBUG 13:48:37,837 Setting version 5 for /127.0.0.2

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to