You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@zookeeper.apache.org by "Mahadev konar (JIRA)" <ji...@apache.org> on 2011/03/15 15:43:29 UTC

[jira] Commented: (ZOOKEEPER-1018) The connection permutation in get_addrs uses a weak and inefficient shuffle

    [ 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