[Sheepdog] Small sheepdog howto

PCextreme B.V. - Wido den Hollander wido at pcextreme.nl
Tue Jan 26 11:04:24 CET 2010


Hi,

The patch fails to apply, so i did it manually, but it didn't work:

Jan 26 10:45:10 wido-desktop collie: Target daemon logger with pid=7773
started!
Jan 26 10:45:11 wido-desktop collie: worker_routine(175) started this
thread 0
Jan 26 10:45:11 wido-desktop collie: last message repeated 3 times
Jan 26 10:45:11 wido-desktop collie: create_cluster(816) failed to get
address info
Jan 26 10:45:11 wido-desktop collie: main(105) failed to create sheepdog
cluster.

I reverted back to the current GIT tree and removed the 127.0.1.1 entry
from my /etc/hosts, now shepherd looks like:

  Idx	Node id (FNV-1a)    - Host:Port
--------------------------------------------------
  0	52b76e70de45e6c8 - 127.0.0.1:7000
  1	52b76e70de45e6c8 - 127.0.0.1:7000
* 2	52b76e70de45e6c8 - 127.0.0.1:7000
  3	52b76e70de45e6c8 - 127.0.0.1:7000
  4	52b76e70de45e6c8 - 127.0.0.1:7000

-- 
Met vriendelijke groet,

Wido den Hollander
Hoofd Systeembeheer / CSO
Telefoon Support Nederland: 0900 9633 (45 cpm)
Telefoon Support België: 0900 70312 (45 cpm)
Telefoon Direct: (+31) (0)20 50 60 104
Fax: +31 (0)20 50 60 111
E-mail: support at pcextreme.nl
Website: http://www.pcextreme.nl
Kennisbank: http://support.pcextreme.nl/
Netwerkstatus: http://nmc.pcextreme.nl


On Tue, 2010-01-26 at 06:09 +0000, MORITA Kazutaka wrote:
> Hi,
> 
> On 2010/01/26 1:30, PCextreme B.V. - Wido den Hollander wrote:
> > Hi,
> > 
> > root at wido-desktop:~# corosync-cfgtool -s
> > Printing ring status.
> > Local node ID 537307328
> > RING ID 0
> > 	id	= 192.168.6.32
> > 	status	= ring 0 active with no faults
> > root at wido-desktop:~# 
> 
> Your corosync seems to work right.
> The problem is that the collie fails to get the local ip address.
> 
> Could you try the following patch?
> 
> ==
> From: MORITA Kazutaka <morita.kazutaka at lab.ntt.co.jp>
> Date: Tue, 26 Jan 2010 14:33:02 +0900
> Subject: [PATCH] collie: avoid using an invalid address
> 
> Some distributions contain `127.0.1.1' in /etc/hosts.
> We avoid using these kind of invalid addresses.
> 
> Signed-off-by: MORITA Kazutaka <morita.kazutaka at lab.ntt.co.jp>
> ---
>  collie/group.c |   46 +++++++++++++++++++++++++++++++++-------------
>  1 files changed, 33 insertions(+), 13 deletions(-)
> 
> diff --git a/collie/group.c b/collie/group.c
> index cbb4761..676706d 100644
> --- a/collie/group.c
> +++ b/collie/group.c
> @@ -728,7 +728,7 @@ struct cluster_info *create_cluster(int port)
>  	int fd, ret;
>  	cpg_handle_t cpg_handle;
>  	struct cluster_info *ci;
> -	struct addrinfo hints, *res;
> +	struct addrinfo hints, *res, *res0;
>  	char name[INET6_ADDRSTRLEN];
>  	struct cpg_name group = { 8, "sheepdog" };
>  	cpg_callbacks_t cb = { &sd_deliver, &sd_confch };
> @@ -782,23 +782,43 @@ join_retry:
>  	memset(&hints, 0, sizeof(hints));
> 
>  	hints.ai_socktype = SOCK_STREAM;
> -	ret = getaddrinfo(name, NULL, &hints, &res);
> +	ret = getaddrinfo(name, NULL, &hints, &res0);
>  	if (ret)
>  		exit(1);
> 
> -	if (res->ai_family == AF_INET) {
> -		struct sockaddr_in *addr = (struct sockaddr_in *)res->ai_addr;
> -		memset(ci->this_node.addr, 0, sizeof(ci->this_node.addr));
> -		memcpy(ci->this_node.addr + 12, &addr->sin_addr, 4);
> -	} else if (res->ai_family == AF_INET6) {
> -		struct sockaddr_in6 *addr = (struct sockaddr_in6 *)res->ai_addr;
> -		memcpy(ci->this_node.addr, &addr->sin6_addr, 16);
> -	} else {
> -		eprintf("unknown address family\n");
> -		exit(1);
> +	for (res = res0; res; res = res->ai_next) {
> +		if (res->ai_family == AF_INET) {
> +			struct sockaddr_in *addr;
> +			addr = (struct sockaddr_in *)res->ai_addr;
> +
> +			if (((char *) &addr->sin_addr)[0] == 127)
> +				continue;
> +
> +			memset(ci->this_node.addr, 0, 12);
> +			memcpy(ci->this_node.addr + 12, &addr->sin_addr, 4);
> +			break;
> +		} else if (res->ai_family == AF_INET6) {
> +			struct sockaddr_in6 *addr;
> +			uint8_t localhost[16] = { 0, 0, 0, 0, 0, 0, 0, 0,
> +						  0, 0, 0, 0, 0, 0, 0, 1 };
> +
> +			addr = (struct sockaddr_in6 *)res->ai_addr;
> +
> +			if (memcmp(&addr->sin6_addr, localhost, 16) == 0)
> +				continue;
> +
> +			memcpy(ci->this_node.addr, &addr->sin6_addr, 16);
> +			break;
> +		} else
> +			dprintf("unknown address family\n");
> +	}
> +
> +	if (res == NULL) {
> +		eprintf("failed to get address info\n");
> +		return NULL;
>  	}
> 
> -	freeaddrinfo(res);
> +	freeaddrinfo(res0);
> 
>  	ci->this_node.port = port;
> 




More information about the sheepdog mailing list