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

Sylvain Lebresne commented on CASSANDRA-3262:
---------------------------------------------

I think there is a misunderstanding. I agree with the pinning of replicas. The 
problem is that the current implementation of 
AbstractEndpointSnitch.compareEndpoints is:
{noformat}
public int compareEndpoints(InetAddress target, InetAddress a1, InetAddress a2)
{
    return a1.getHostAddress().compareTo(a2.getHostAddress());
}
{noformat}
If you sort a list of hosts using that, you will always return the host that 
have the "smallest" IP. In other words, in a 3 nodes cluster with RF=3, all and 
every read will hit the exact same node.

What makes it kind of work today is that this compareEndpoints() method is 
barely used. It's used only in the case where the dynamic snitch have no scores 
for the endpoints. Otherwise, it's sortByProximity that is used (which doesn't 
rely on compareEndpoints -- this is confusing and my patch corrects it). And 
sortByProximity does *the right thing*, i.e, it doesn't sort the input list 
since it is supposed to be in token order (which effectively pin one range to 
every replica).

So the patch here proposes two things:
  * If fixes the compareEndpoints method: comparing IP addresses is not a good 
idea.
  * It refactors the code to make sortByProximity use compareEndpoint, to 
having getting in that situation again.
                
> SimpleSnitch.compareEndpoints doesn't respect the intent of the snitch
> ----------------------------------------------------------------------
>
>                 Key: CASSANDRA-3262
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-3262
>             Project: Cassandra
>          Issue Type: Bug
>          Components: Core
>    Affects Versions: 0.8.6
>            Reporter: Sylvain Lebresne
>            Assignee: Sylvain Lebresne
>            Priority: Minor
>             Fix For: 0.8.7, 1.0.0
>
>         Attachments: 3262.patch
>
>
> SimpleSnitch is supposed to not sort the input addresses, thus respecting the 
> order of the partitioner. However, it's compareEndpoints instead uses IP 
> addresses comparison. Note that this matter when the dynamicSnitch fall back 
> to the wrapped snitch since it uses the compareEndpoint method then.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to