[ 
https://issues.apache.org/jira/browse/CASSANDRA-4657?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Jonathan Ellis updated CASSANDRA-4657:
--------------------------------------

             Reviewer: dbrosius
             Priority: Minor  (was: Major)
    Affects Version/s:     (was: 1.1.5)
                           (was: 1.1.2)
                           (was: 1.1.1)
                       1.1.0
        Fix Version/s: 1.1.6
             Assignee: Jonathan Ellis
    
> cql version race condition with rpc_server_type: sync
> -----------------------------------------------------
>
>                 Key: CASSANDRA-4657
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-4657
>             Project: Cassandra
>          Issue Type: Bug
>          Components: Core
>    Affects Versions: 1.1.0
>         Environment: Ubuntu 12.04
>            Reporter: Emmanuel Courreges
>            Assignee: Jonathan Ellis
>            Priority: Minor
>              Labels: features
>             Fix For: 1.1.6
>
>         Attachments: 4657.patch
>
>
> If clients connect to a cassandra cluster configured with rpc_server_type: 
> sync with heterogeneous cql versions (2 and 3), the cql version used for 
> execution on the server changes seemingly randomly.
> It's due to the fact that CustomTThreadPoolServer.java does not set the 
> remoteSocket anytime, or does not clear the cql version in the ThreadLocal 
> clientState object.
> When CassandraServer.java calls state() it gets the ThreadLocal object 
> clientState, which has its cqlversion already changed by a previous socket 
> that was using the same thread.
> The easiest fix is probably to do a 
> SocketSessionManagementService.instance.set when accepting a new client and 
> SocketSessionManagementService.instance.remove when the client is closed, but 
> if you really want to use the ThreadLocal clientState and not alloc/destroy a 
> ClientState everytime, then you should clear this clientState on accept of a 
> new client.
> The problem can be reproduced with cqlsh -3 on one side and a client that 
> does not set the cql version, expecting to get version 2 by default, but 
> actually gettingv v2/v3 depending on which thread it connects to.
> The problem does not happen with other rpc_server_types, nor with clients 
> that set their cql version at connection.

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