[
https://issues.apache.org/jira/browse/ZOOKEEPER-1018?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13006948#comment-13006948
]
Mahadev konar commented on ZOOKEEPER-1018:
------------------------------------------
thanks stephen, I have seen quite some instances where the connections are
uneven for a lot of client connections. Would you be able to verify this change
with lets say running 3 zookeeper servers and having a lot of connections
(100's) and seeing how its affected?
Also, can you please look at the java code and see if it faces the same issue?
> The connection permutation in get_addrs uses a weak and inefficient shuffle
> ---------------------------------------------------------------------------
>
> Key: ZOOKEEPER-1018
> URL: https://issues.apache.org/jira/browse/ZOOKEEPER-1018
> Project: ZooKeeper
> Issue Type: Improvement
> Components: c client
> Affects Versions: 3.3.2
> Reporter: Stephen Tyree
> Priority: Minor
> Attachments: zookeeper.c.patch
>
> Original Estimate: 2h
> Remaining Estimate: 2h
>
> After determining all of the addresses in the get_addrs function in the C
> client, the connection is permuted using the following code:
> setup_random();
> /* Permute */
> for(i = 0; i < zh->addrs_count; i++) {
> struct sockaddr_storage *s1 = zh->addrs +
> random()%zh->addrs_count;
> struct sockaddr_storage *s2 = zh->addrs +
> random()%zh->addrs_count;
> if (s1 != s2) {
> struct sockaddr_storage t = *s1;
> *s1 = *s2;
> *s2 = t;
> }
> }
> Not only does this shuffle produce an uneven permutation, but it is half as
> efficient as the Fisher-Yates shuffle which produces an unbiased one. It
> seems like it would be a simple fix to increase the randomness and efficiency
> of the shuffle by switching over to using Fisher-Yates.
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira