[Sheepdog] [PATCH 2/3] sheep: avoid exiting directly when failing to initialize cluster

MORITA Kazutaka morita.kazutaka at lab.ntt.co.jp
Sun Aug 14 11:22:51 CEST 2011


Signed-off-by: MORITA Kazutaka <morita.kazutaka at lab.ntt.co.jp>
---
 sheep/group.c |   22 ++++++++++++----------
 1 files changed, 12 insertions(+), 10 deletions(-)

diff --git a/sheep/group.c b/sheep/group.c
index f865e8f..92f079d 100644
--- a/sheep/group.c
+++ b/sheep/group.c
@@ -1646,7 +1646,7 @@ oom:
 	panic("failed to allocate memory for a confchg event\n");
 }
 
-static void set_addr(unsigned int nodeid, int port)
+static int set_addr(unsigned int nodeid, int port)
 {
 	int ret, nr;
 	corosync_cfg_handle_t handle;
@@ -1662,18 +1662,18 @@ static void set_addr(unsigned int nodeid, int port)
 	ret = corosync_cfg_initialize(&handle, NULL);
 	if (ret != CS_OK) {
 		vprintf(SDOG_ERR "failed to initiazize cfg %d\n", ret);
-		exit(1);
+		return -1;
 	}
 
 	ret = corosync_cfg_get_node_addrs(handle, nodeid, 1, &nr, &addr);
 	if (ret != CS_OK) {
 		vprintf(SDOG_ERR "failed to get addr %d\n", ret);
-		exit(1);
+		return -1;
 	}
 
 	if (!nr) {
 		vprintf(SDOG_ERR "we got no address\n");
-		exit(1);
+		return -1;
 	}
 
 	if (ss->ss_family == AF_INET6) {
@@ -1684,12 +1684,13 @@ static void set_addr(unsigned int nodeid, int port)
 		memcpy(sys->this_node.addr + 12, saddr, 4);
 	} else {
 		vprintf(SDOG_ERR "unknown protocol %d\n", ss->ss_family);
-		exit(1);
+		return -1;
 	}
 
 	inet_ntop(ss->ss_family, saddr, tmp, sizeof(tmp));
 
 	vprintf(SDOG_INFO "addr = %s, port = %d\n", tmp, port);
+	return 0;
 }
 
 int create_cluster(int port, int64_t zone)
@@ -1718,24 +1719,25 @@ join_retry:
 		goto join_retry;
 	case CS_ERR_SECURITY:
 		eprintf("Permission error.\n");
-		exit(1);
+		return -1;
 	default:
 		eprintf("Failed to join the sheepdog group, %d\n", ret);
-		exit(1);
-		break;
+		return -1;
 	}
 
 	ret = cpg_local_get(cpg_handle, &nodeid);
 	if (ret != CS_OK) {
 		eprintf("Failed to get the local node's identifier, %d\n", ret);
-		exit(1);
+		return 1;
 	}
 
 	sys->handle = cpg_handle;
 	sys->this_nodeid = nodeid;
 	sys->this_pid = getpid();
 
-	set_addr(nodeid, port);
+	ret = set_addr(nodeid, port);
+	if (ret)
+		return 1;
 	sys->this_node.port = port;
 	sys->this_node.nr_vnodes = SD_DEFAULT_VNODES;
 	if (zone == -1)
-- 
1.7.2.5




More information about the sheepdog mailing list