[sheepdog] [PATCH] zookeeper: check queue_pos znode before join cluster

Ruoyu liangry at ucweb.com
Fri Mar 20 02:35:12 CET 2015


Applied with launchpad link revised, thanks.

On 2015年03月19日 19:11, Saeki Masaki wrote:
> On 2015/03/19 0:08, Meng Lingkun wrote:
>> Startup sheep immediately after shutdown makes dog node list error.
>> The bug can be find on [1]. Check queue_pos znode before join the
>> cluster just like member znode does.
>> [1]https://bugs.launchpad.net/sheepdog-project/%20bug/1433452
>>
>> Signed-off-by: Meng Lingkun <menglingkun at cmss.chinamobile.com>
>> ---
>>   sheep/cluster/zookeeper.c |   11 ++++++++---
>>   1 files changed, 8 insertions(+), 3 deletions(-)
>>
>> diff --git a/sheep/cluster/zookeeper.c b/sheep/cluster/zookeeper.c
>> index 303449e..690f054 100644
>> --- a/sheep/cluster/zookeeper.c
>> +++ b/sheep/cluster/zookeeper.c
>> @@ -1004,14 +1004,19 @@ out_unlock:
>>   static int zk_join(const struct sd_node *myself,
>>              void *opaque, size_t opaque_len)
>>   {
>> -    int rc;
>> +    int rc1, rc2;
>>       char path[MAX_NODE_STR_LEN];
>>
>>       this_node.node = *myself;
>>
>>       snprintf(path, sizeof(path), MEMBER_ZNODE "/%s", 
>> node_to_str(myself));
>> -    rc = zk_node_exists(path);
>> -    if (rc == ZOK) {
>> +    rc1 = zk_node_exists(path);
>> +
>> +    snprintf(path, sizeof(path), QUEUE_POS_ZNODE "/%s",
>> +        node_to_str(myself));
>> +    rc2 = zk_node_exists(path);
>> +
>> +    if (rc1 == ZOK || rc2 == ZOK) {
>>           sd_err("Previous zookeeper session exist, shoot myself. 
>> Please "
>>               "wait for %d seconds to join me again.",
>>               DIV_ROUND_UP(zk_timeout, 1000));
>>
>
> Thank you, Meng.
>
> I've tested to reproduce launchpad situation,
> it works good.
> ( no longer to become inconsistent )
>
> Tested-by: Masaki Saeki <saeki.masaki at po.ntts.co.jp>
>
> Regards, Saeki.
>
>





More information about the sheepdog mailing list