You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@zookeeper.apache.org by "Evan McClure (Updated) (JIRA)" <ji...@apache.org> on 2011/12/16 01:05:31 UTC
[jira] [Updated] (ZOOKEEPER-1329) Lock recipe sorts sequenced
children incorrectly
[ https://issues.apache.org/jira/browse/ZOOKEEPER-1329?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Evan McClure updated ZOOKEEPER-1329:
------------------------------------
Description:
The lock recipe sorts sequenced children lexicographically. When the sequence number wraps, a lexicographical comparison will always place 2147483648 ahead of -2147483649, place -2147483648 ahead of -2147483649, and place -1 ahead of -2. Clearly, we want 2147483648 < -2147483649, -2147483649 < -2147483648, and -2 placed ahead of -1, since those sequence numbers were generated in that order.
I suggest that the sequence numbers be converted to unsigned numbers before being compared in the comparison functor that gets passed to qsort().
This leaves us with another issue. When comparing unsigned sequence numbers, there is a slim chance that 4294967296 < 0. So, I suggest that a fudge range be used, say, the number of nodes in the quorum * some fudge factor, in order to handle this comparison.
Please close this if I'm way off base here.
was:
The lock recipe sorts sequenced children lexicographically. When the sequence number wraps, a lexicographical comparison will always place 2147483648 ahead of -2147483649, place -2147483648 ahead of -2147483649, and place -1 ahead of -2. Clearly, we want 2147483648 < -2147483649, -2147483649 < -2147483648, and -2 placed ahead of -1, since those sequence numbers were generated in that order.
I suggest that the sequence numbers be converted to unsigned numbers before being compared in the comparison functor that gets passed to qsort().
This leaves us with another issue. When comparing unsigned sequence numbers, there is a slim chance that 4294967296 < 0. So, I suggest that a fudge range be used--say, the number of nodes in the quorum * some fudge factor--in order to handle this comparison.
Please close this if I'm way off base here.
> Lock recipe sorts sequenced children incorrectly
> ------------------------------------------------
>
> Key: ZOOKEEPER-1329
> URL: https://issues.apache.org/jira/browse/ZOOKEEPER-1329
> Project: ZooKeeper
> Issue Type: Bug
> Components: recipes
> Affects Versions: 3.3.3
> Environment: Mac OS X Version 10.6.8
> Darwin emcclure-lt-mac.local 10.8.0 Darwin Kernel Version 10.8.0: Tue Jun 7 16:33:36 PDT 2011; root:xnu-1504.15.3~1/RELEASE_I386 i386
> Homebrew 0.8
> Reporter: Evan McClure
>
> The lock recipe sorts sequenced children lexicographically. When the sequence number wraps, a lexicographical comparison will always place 2147483648 ahead of -2147483649, place -2147483648 ahead of -2147483649, and place -1 ahead of -2. Clearly, we want 2147483648 < -2147483649, -2147483649 < -2147483648, and -2 placed ahead of -1, since those sequence numbers were generated in that order.
> I suggest that the sequence numbers be converted to unsigned numbers before being compared in the comparison functor that gets passed to qsort().
> This leaves us with another issue. When comparing unsigned sequence numbers, there is a slim chance that 4294967296 < 0. So, I suggest that a fudge range be used, say, the number of nodes in the quorum * some fudge factor, in order to handle this comparison.
> Please close this if I'm way off base here.
--
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