[sheepdog] [PATCH 3/3] sheep/cluster: re-create znode of 'lock-id' if it isn't exists
Liu Yuan
namei.unix at gmail.com
Thu Jan 16 15:40:22 CET 2014
On Thu, Jan 16, 2014 at 04:11:04PM +0800, Robin Dong wrote:
> From: Robin Dong <sanbai at taobao.com>
>
> When a sheep daemon call zk_unlock(), it will remove the whole znode of 'lock-id' and
> make zoo_create() fail in zk_lock() which called by another sheep daemon.
> To avoid this, we should try to create a znode of 'lock-id' if zoo_create() fail.
>
> Signed-off-by: Robin Dong <sanbai at taobao.com>
> ---
> sheep/cluster/zookeeper.c | 5 +++++
> 1 file changed, 5 insertions(+)
>
> diff --git a/sheep/cluster/zookeeper.c b/sheep/cluster/zookeeper.c
> index 4ef3a9a..14f5988 100644
> --- a/sheep/cluster/zookeeper.c
> +++ b/sheep/cluster/zookeeper.c
> @@ -1256,6 +1256,11 @@ static void zk_lock(uint64_t lock_id)
> if (rc == ZOK)
> break;
> sd_err("failed to create path:%s, %s", my_path, zerror(rc));
> + if (rc == ZNONODE) {
> + zoo_create(zhandle, parent, "", 0, &ZOO_OPEN_ACL_UNSAFE,
> + 0, NULL, 0);
> + continue;
> + }
I think sd_err() should be placed after if clause
Thanks
Yuan
More information about the sheepdog
mailing list