[sheepdog] [PATCH] zookeeper: return the found path in zk_find_seq_node

Liu Yuan namei.unix at gmail.com
Fri Jun 7 07:03:29 CEST 2013


On 06/07/2013 11:33 AM, MORITA Kazutaka wrote:
> From: MORITA Kazutaka <morita.kazutaka at lab.ntt.co.jp>
> 
> This is necessary for the zookeeper driver to get the queue position
> on the first push.
> 
> Signed-off-by: MORITA Kazutaka <morita.kazutaka at lab.ntt.co.jp>
> ---
>  sheep/cluster/zookeeper.c |    8 +++-----
>  1 file changed, 3 insertions(+), 5 deletions(-)
> 
> diff --git a/sheep/cluster/zookeeper.c b/sheep/cluster/zookeeper.c
> index 2be3e4b..45db10a 100644
> --- a/sheep/cluster/zookeeper.c
> +++ b/sheep/cluster/zookeeper.c
> @@ -261,16 +261,14 @@ static bool zk_queue_peek(void)
>  }
>  
>  /* return true if there is a node with 'id' in the queue. */
> -static bool zk_find_seq_node(uint64_t id)
> +static bool zk_find_seq_node(uint64_t id, char *seq_path, int seq_path_len)
>  {
>  	int rc, len;
>  
>  	for (int seq = queue_pos; ; seq++) {
> -		char seq_path[MAX_NODE_STR_LEN];
>  		struct zk_event ev;
>  
> -		snprintf(seq_path, sizeof(seq_path), QUEUE_ZNODE"/%010"PRId32,
> -			 seq);
> +		snprintf(seq_path, seq_path_len, QUEUE_ZNODE"/%010"PRId32, seq);
>  		len = offsetof(typeof(ev), id) + sizeof(ev.id);
>  		rc = zk_get_data(seq_path, &ev, &len);
>  		switch (rc) {
> @@ -307,7 +305,7 @@ again:
>  		break;
>  	case ZOPERATIONTIMEOUT:
>  	case ZCONNECTIONLOSS:
> -		if (!zk_find_seq_node(ev->id))
> +		if (!zk_find_seq_node(ev->id, buf, sizeof(buf)))
>  			/* retry if seq_node was not created */
>  			goto again;
>  		break;
> 

Applied, thanks.

Yuan



More information about the sheepdog mailing list