All of lore.kernel.org
 help / color / mirror / Atom feed
From: lhh@sourceware.org <lhh@sourceware.org>
To: cluster-devel.redhat.com
Subject: [Cluster-devel] cluster/rgmanager include/res-ocf.h include/re ...
Date: 10 Mar 2007 00:20:58 -0000	[thread overview]
Message-ID: <20070310002058.2480.qmail@sourceware.org> (raw)

CVSROOT:	/cvs/cluster
Module name:	cluster
Changes by:	lhh at sourceware.org	2007-03-10 00:20:55

Modified files:
	rgmanager/include: res-ocf.h resgroup.h reslist.h 
	rgmanager/src/clulib: rg_strings.c 
	rgmanager/src/daemons: groups.c restree.c rg_state.c rg_thread.c 
	                       test.c 
	rgmanager/src/resources: Makefile lvm.sh vm.sh 
	rgmanager/src/utils: clusvcadm.c 

Log message:
	Strings cleanup.  Enable vm.sh live migration.

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/include/res-ocf.h.diff?cvsroot=cluster&r1=1.1&r2=1.2
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/include/resgroup.h.diff?cvsroot=cluster&r1=1.17&r2=1.18
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/include/reslist.h.diff?cvsroot=cluster&r1=1.16&r2=1.17
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/clulib/rg_strings.c.diff?cvsroot=cluster&r1=1.6&r2=1.7
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/daemons/groups.c.diff?cvsroot=cluster&r1=1.27&r2=1.28
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/daemons/restree.c.diff?cvsroot=cluster&r1=1.25&r2=1.26
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/daemons/rg_state.c.diff?cvsroot=cluster&r1=1.28&r2=1.29
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/daemons/rg_thread.c.diff?cvsroot=cluster&r1=1.17&r2=1.18
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/daemons/test.c.diff?cvsroot=cluster&r1=1.7&r2=1.8
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/resources/Makefile.diff?cvsroot=cluster&r1=1.16&r2=1.17
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/resources/lvm.sh.diff?cvsroot=cluster&r1=1.2&r2=1.3
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/resources/vm.sh.diff?cvsroot=cluster&r1=1.1&r2=1.2
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/utils/clusvcadm.c.diff?cvsroot=cluster&r1=1.16&r2=1.17

--- cluster/rgmanager/include/res-ocf.h	2004/08/13 15:36:50	1.1
+++ cluster/rgmanager/include/res-ocf.h	2007/03/10 00:20:54	1.2
@@ -45,4 +45,22 @@
 #define OCF_RA_NOT_RUNNING	7
 #define OCF_RA_MAX		7
 
+/*
+   Resource operations - not ocf-specified
+ */
+#define RS_START	(0)
+#define RS_STOP		(1)
+#define RS_STATUS	(2)
+#define RS_RESINFO	(3)
+#define RS_RESTART	(4)
+#define RS_RELOAD	(5)
+#define RS_CONDRESTART  (6)
+#define	RS_RECOVER	(7)
+#define RS_CONDSTART	(8)	/** Start if flagged with RF_NEEDSTART */
+#define RS_CONDSTOP	(9)	/** STOP if flagged with RF_NEEDSTOP */
+#define RS_MONITOR	(10)
+#define RS_META_DATA	(11)
+#define RS_VALIDATE	(12)
+#define RS_MIGRATE	(13)
+
 #endif
--- cluster/rgmanager/include/resgroup.h	2006/12/14 22:18:07	1.17
+++ cluster/rgmanager/include/resgroup.h	2007/03/10 00:20:54	1.18
@@ -81,9 +81,7 @@
 #define RG_MIGRATE	  22
 #define RG_NONE		  999
 
-extern const char *rg_req_strings[];
-
-#define rg_req_str(req) (rg_req_strings[req])
+const char *rg_req_str(int req);
 
 int handle_relocate_req(char *svcName, int request, int preferred_target,
 			int *new_owner);
@@ -107,9 +105,8 @@
 
 #define DEFAULT_CHECK_INTERVAL		10
 
-extern const char *rg_state_strings[];
-
-#define rg_state_str(state) (rg_state_strings[state - RG_STATE_BASE])
+const char *rg_state_str(int val);
+const char *agent_op_str(int val);
 
 int rg_status(const char *resgroupname);
 int group_op(char *rgname, int op);
@@ -175,7 +172,7 @@
 #define RG_YES		1
 #define RG_NO		2
 
-char *rg_strerror(int val);
+const char *rg_strerror(int val);
 
 
 /*
--- cluster/rgmanager/include/reslist.h	2007/01/26 21:42:24	1.16
+++ cluster/rgmanager/include/reslist.h	2007/03/10 00:20:54	1.17
@@ -40,25 +40,6 @@
 #define RES_STARTED	(1)
 #define RES_FAILED	(2)
 
-/*
-   Resource operations
- */
-#define RS_START	(0)
-#define RS_STOP		(1)
-#define RS_STATUS	(2)
-#define RS_RESINFO	(3)
-#define RS_RESTART	(4)
-#define RS_RELOAD	(5)
-#define RS_CONDRESTART  (6)
-#define	RS_RECOVER	(7)
-#define RS_CONDSTART	(8)	/** Start if flagged with RF_NEEDSTART */
-#define RS_CONDSTOP	(9)	/** STOP if flagged with RF_NEEDSTOP */
-#define RS_MONITOR	(10)
-#define RS_META_DATA	(11)
-#define RS_VALIDATE	(12)
-#define RS_MIGRATE	(13)
-
-
 #ifndef SHAREDIR
 #define SHAREDIR		"/usr/share/rgmanager"
 #endif
--- cluster/rgmanager/src/clulib/rg_strings.c	2006/12/14 22:18:07	1.6
+++ cluster/rgmanager/src/clulib/rg_strings.c	2007/03/10 00:20:54	1.7
@@ -16,9 +16,16 @@
   Free Software Foundation, Inc.,  675 Mass Ave, Cambridge, 
   MA 02139, USA.
 */
+#include <res-ocf.h>
 #include <resgroup.h>
 
-struct { int val; char *str; } rg_error_strings[] = {
+struct string_val {
+	int val;
+	char *str;
+};
+
+
+const struct string_val rg_error_strings[] = {
 	{ RG_ERUN,      "Service is already running" },
 	{ RG_EQUORUM,	"Operation requires quorum" },
 	{ RG_EINVAL,	"Invalid operation for resource" },
@@ -36,53 +43,107 @@
 };
 
 
-char *rg_strerror(int err)
+const struct string_val rg_req_strings[] = {
+	{RG_SUCCESS, "success" },
+	{RG_FAIL, "fail"},
+	{RG_START, "start"},
+	{RG_STOP, "stop"},
+	{RG_STATUS, "status"},
+	{RG_DISABLE, "disable"},
+	{RG_STOP_RECOVER, "stop (recovery)"},
+	{RG_START_RECOVER, "start (recovery)"},
+	{RG_RESTART, "restart"},
+	{RG_EXITING, "exiting"},
+	{RG_INIT, "initialize"},
+	{RG_ENABLE, "enable"},
+	{RG_STATUS_NODE, "status inquiry"},
+	{RG_RELOCATE, "relocate"},
+	{RG_CONDSTOP, "conditional stop"},
+	{RG_CONDSTART, "conditional start"},
+	{RG_START_REMOTE,"remote start"},
+	{RG_STOP_USER, "user stop"},
+	{RG_STOP_EXITING, "stop (shutdown)"},
+	{RG_LOCK, "locking"},
+	{RG_UNLOCK, "unlocking"},
+	{RG_QUERY_LOCK, "lock status inquiry"},
+	{RG_MIGRATE, "migrate"},
+	{RG_NONE, "none"},
+	{0, NULL}
+};
+
+
+const struct string_val rg_state_strings[] = {
+	{RG_STATE_STOPPED, "stopped"},
+	{RG_STATE_STARTING, "starting"},
+	{RG_STATE_STARTED, "started"},
+	{RG_STATE_STOPPING, "stopping"},
+	{RG_STATE_FAILED, "failed"},
+	{RG_STATE_UNINITIALIZED, "uninitialized"},
+	{RG_STATE_CHECK, "checking"},
+	{RG_STATE_ERROR, "recoverable"},
+	{RG_STATE_RECOVER, "recovering"},
+	{RG_STATE_DISABLED, "disabled"},
+	{RG_STATE_MIGRATE, "migrating"},
+	{0, NULL}
+};
+
+
+const struct string_val agent_ops[] = {
+	{RS_START, "start"},
+	{RS_STOP, "stop"},
+	{RS_STATUS, "status"},
+	{RS_RESINFO, "resinfo"},
+	{RS_RESTART, "restart"},
+	{RS_RELOAD, "reload"},
+	{RS_CONDRESTART, "condrestart"},		/* Unused */
+	{RS_RECOVER, "recover"},		
+	{RS_CONDSTART, "condstart"},
+	{RS_CONDSTOP, "condstop"},
+	{RS_MONITOR, "monitor"},
+	{RS_META_DATA, "meta-data"},		/* printenv */
+	{RS_VALIDATE, "validate-all"},
+	{RS_MIGRATE, "migrate"},
+	{0 , NULL}
+};
+
+
+static inline const char *
+rg_search_table(const struct string_val *table, int val)
 {
 	int x;
 
-	for (x = 0; rg_error_strings[x].str != NULL; x++) {
-		if (rg_error_strings[x].val == err) {
-			return rg_error_strings[x].str;
+	for (x = 0; table[x].str != NULL; x++) {
+		if (table[x].val == val) {
+			return table[x].str;
 		}
 	}
 
 	return "Unknown";
 }
+
+
+const char *
+rg_strerror(int val)
+{
+	return rg_search_table(rg_error_strings, val);
+}
 	
+const char *
+rg_state_str(int val)
+{
+	return rg_search_table(rg_state_strings, val);
+}
 
-const char *rg_state_strings[] = {
-	"stopped",
-	"starting",
-	"started",
-	"stopping",
-	"failed",
-	"uninitialized",
-	"checking",
-	"recoverable",
-	"recovering",
-	"disabled",
-	""
-};
 
-const char *rg_req_strings[] = {
-	"success",
-	"fail",
-	"start",
-	"stop",
-	"status",
-	"disable",
-	"stop (recovery)",
-	"start (recovery)",
-	"restart",
-	"exiting",
-	"initialize",
-	"enable",
-	"status inquiry",
-	"relocate",
-	"conditional stop",
-	"conditional start",
-	"remote start",
-	"user stop",
-	""
-};
+const char *
+rg_req_str(int val)
+{
+	return rg_search_table(rg_req_strings, val);
+}
 
+
+const char *
+agent_op_str(int val)
+{
+	return rg_search_table(agent_ops, val);
+}
--- cluster/rgmanager/src/daemons/groups.c	2007/02/21 20:49:17	1.27
+++ cluster/rgmanager/src/daemons/groups.c	2007/03/10 00:20:54	1.28
@@ -36,7 +36,6 @@
 #define cn_svccount cn_address.cna_address[0] /* Theses are uint8_t size */
 #define cn_svcexcl  cn_address.cna_address[1]
 
-extern char *res_ops[];
 static int config_version = 0;
 static resource_t *_resources = NULL;
 static resource_rule_t *_rules = NULL;
@@ -734,9 +733,10 @@
 int
 group_migrate(char *groupname, int target)
 {
+	resource_node_t *rn = NULL, *tmp;
 	resource_t *res;
 	char *tgt_name;
-	int ret = RG_ENOSERVICE;
+	int ret = RG_ENOSERVICE, x = 0;
 	cluster_member_list_t *membership;
 
 	membership = member_list();
@@ -746,15 +746,26 @@
 	pthread_rwlock_rdlock(&resource_lock);
 	
 	tgt_name = memb_id_to_name(membership, target);
+	if (!tgt_name) {
+		ret = RG_EINVAL;
+		goto out;
+	}
+
 	res = find_root_by_ref(&_resources, groupname);
 	if (!res)
 		goto out;
 
-	if (!tgt_name) {
-		ret = RG_EINVAL;
+	list_do(&_tree, tmp) {
+		if (tmp->rn_resource == res) {
+			rn = tmp;
+			break;
+		}
+	} while (!list_done(&_tree, tmp));
+
+	if (!rn)
 		goto out;
-	}
-	ret = res_exec(res, res_ops[RG_MIGRATE], tgt_name);
+
+	ret = res_exec(rn, agent_op_str(RS_MIGRATE), tgt_name);
 
 out:
 	pthread_rwlock_unlock(&resource_lock);
@@ -1009,7 +1020,8 @@
 		}
 
 		if (svcblk.rs_owner != my_id() ||
-		    svcblk.rs_state != RG_STATE_STARTED)
+		    (svcblk.rs_state != RG_STATE_STARTED &&
+		     svcblk.rs_state != RG_STATE_MIGRATE))
 			continue;
 
 		rt_enqueue_request(rg, RG_STATUS,
--- cluster/rgmanager/src/daemons/restree.c	2007/02/22 16:37:28	1.25
+++ cluster/rgmanager/src/daemons/restree.c	2007/03/10 00:20:54	1.26
@@ -60,23 +60,6 @@
 time_t get_time(char *action, int depth, resource_node_t *node);
 
 
-const char *res_ops[] = {
-	"start",
-	"stop",
-	"status",
-	"resinfo",
-	"restart",
-	"reload",
-	"condrestart",		/* Unused */
-	"recover",		
-	"condstart",
-	"condstop",
-	"monitor",
-	"meta-data",		/* printenv */
-	"validate-all",
-	"migrate"
-};
-
 
 const char *ocf_errors[] = {
 	"success",				// 0
@@ -97,14 +80,13 @@
 const char *
 ocf_strerror(int ret)
 {
-	if (ret < OCF_RA_MAX)
+	if (ret >= 0 && ret < OCF_RA_MAX)
 		return ocf_errors[ret];
 
 	return "unspecified";
 }
 
 
-
 /**
    Destroys an environment variable array.
 
@@ -360,7 +342,7 @@
 #endif
 #if 0
 		printf("Exec of script %s, action %s type %s\n",
-			res->r_rule->rr_agent, res_ops[op],
+			res->r_rule->rr_agent, agent_op_str(op),
 			res->r_rule->rr_type);
 #endif
 
@@ -705,7 +687,7 @@
 
 #if 0
 			printf("%s children of %s type %s (level %d)\n",
-			       res_ops[op],
+			       agent_op_str(op),
 			       node->rn_resource->r_rule->rr_type,
 			       rule->rr_childtypes[x].rc_name, l);
 #endif
@@ -748,7 +730,7 @@
 
 		/*
 		printf("%s children of %s type %s (default level)\n",
-		       res_ops[op],
+		       agent_op_str(op),
 		       node->rn_resource->r_rule->rr_type,
 		       rule->rr_childtypes[x].rc_name);
 		 */
@@ -856,7 +838,7 @@
 		return 0;
 
        node->rn_actions[idx].ra_last = now;
-	if ((x = res_exec(node, res_ops[RS_STATUS], NULL,
+	if ((x = res_exec(node, agent_op_str(RS_STATUS), NULL,
                          node->rn_actions[idx].ra_depth)) == 0)
 		return 0;
 
@@ -864,7 +846,7 @@
 		return x;
 
 	/* Strange/failed status. Try to recover inline. */
-	if ((x = res_exec(node, res_ops[RS_RECOVER], NULL, 0)) == 0)
+	if ((x = res_exec(node, agent_op_str(RS_RECOVER), NULL, 0)) == 0)
 		return 0;
 
 	return x;
@@ -969,7 +951,7 @@
 		me = !first || (node->rn_resource == first);
 
 		/*
-		printf("begin %s: %s %s [0x%x]\n", res_ops[op],
+		printf("begin %s: %s %s [0x%x]\n", agent_op_str(op),
 		       node->rn_resource->r_rule->rr_type,
 		       primary_attr_value(node->rn_resource),
 		       node->rn_flags);
@@ -1014,7 +996,7 @@
 		if (me && (op == RS_START)) {
 			node->rn_flags &= ~RF_NEEDSTART;
 
-			rv = res_exec(node, res_ops[op], NULL, 0);
+			rv = res_exec(node, agent_op_str(op), NULL, 0);
 			if (rv != 0) {
 				node->rn_state = RES_FAILED;
 				return rv;
@@ -1044,7 +1026,7 @@
 		/* Stop should occur after children have stopped */
 		if (me && (op == RS_STOP)) {
 			node->rn_flags &= ~RF_NEEDSTOP;
-			rv = res_exec(node, res_ops[op], NULL, 0);
+			rv = res_exec(node, agent_op_str(op), NULL, 0);
 
 			if (rv != 0) {
 				node->rn_state = RES_FAILED;
@@ -1058,7 +1040,7 @@
 		}
 
 		/*
-		printf("end %s: %s %s\n", res_ops[op],
+		printf("end %s: %s %s\n", agent_op_str(op),
 		       node->rn_resource->r_rule->rr_type,
 		       primary_attr_value(node->rn_resource));
 		 */
--- cluster/rgmanager/src/daemons/rg_state.c	2007/02/20 19:54:42	1.28
+++ cluster/rgmanager/src/daemons/rg_state.c	2007/03/10 00:20:54	1.29
@@ -866,6 +866,10 @@
 	rg_unlock(&lockp);
        
 	ret = group_migrate(svcName, target);
+
+	if (ret)
+		svc_fail(svcName);
+
 	return ret;
 }
 
--- cluster/rgmanager/src/daemons/rg_thread.c	2006/12/14 20:11:04	1.17
+++ cluster/rgmanager/src/daemons/rg_thread.c	2007/03/10 00:20:54	1.18
@@ -163,7 +163,7 @@
 	char myname[256];
 	resthread_t *myself;
 	request_t *req;
-	uint32_t ret = RG_FAIL, error = 0;
+	int ret = RG_EFAIL, error = 0;
 
 	rg_inc_threads();
 
@@ -274,7 +274,7 @@
 				/*
 				 * Bad news. 
 				 */
-				ret = RG_FAIL;
+				ret = RG_EFAIL;
 			}
 			break;
 
@@ -289,7 +289,7 @@
 			if (error == 0)
 				ret = RG_SUCCESS;
 			else
-				ret = RG_FAIL;
+				ret = RG_EFAIL;
 			break;
 
 		case RG_CONDSTOP:
@@ -321,7 +321,7 @@
 				/*
 				 * Bad news. 
 				 */
-				ret = RG_FAIL;
+				ret = RG_EFAIL;
 			}
 
 			break;
@@ -340,7 +340,7 @@
 				/*
 				 * Bad news. 
 				 */
-				ret = RG_FAIL;
+				ret = RG_EFAIL;
 			}
 
 			pthread_mutex_lock(&my_queue_mutex);
@@ -368,7 +368,7 @@
 				/*
 				 * Bad news. 
 				 */
-				ret = RG_FAIL;
+				ret = RG_EFAIL;
 			}
 
 			break;
@@ -393,7 +393,7 @@
 				/*
 				 * Bad news. 
 				 */
-				ret = RG_FAIL;
+				ret = RG_EFAIL;
 			}
 
 			break;
--- cluster/rgmanager/src/daemons/test.c	2007/02/20 19:56:18	1.7
+++ cluster/rgmanager/src/daemons/test.c	2007/03/10 00:20:54	1.8
@@ -111,7 +111,7 @@
 	dep_t *depends = NULL;
 	resource_rule_t *rulelist = NULL, *currule;
 	resource_t *reslist = NULL, *curres;
-	resource_node_t *tree = NULL;
+	resource_node_t *tree = NULL, *tmp, *rn = NULL;
 	int ccsfd, ret = 0, rules = 0;
 
 	fprintf(stderr,"Running in test mode.\n");
@@ -179,6 +179,13 @@
 		goto out;
 	}
 
+	list_do(&tree, tmp) {
+		if (tmp->rn_resource == curres) {
+			rn = tmp;
+			break;
+		}
+	} while (!list_done(&tree, tmp));
+
 	if (!strcmp(argv[1], "start")) {
 		printf("Starting %s...\n", argv[3]);
 
@@ -198,6 +205,23 @@
 		}
 		printf("Stop of %s complete\n", argv[3]);
 		goto out;
+	} else if (!strcmp(argv[1], "migrate")) {
+		printf("Migrating %s to %s...\n", argv[3], argv[4]);
+
+	#if 0
+		if (!group_migratory(curres)) {
+			printf("No can do\n");
+			ret = -1;
+			goto out;
+		}
+	#endif
+
+		if (res_exec(rn, "migrate", argv[4], 0)) {
+			ret = -1;
+			goto out;
+		}
+		printf("Migration of %s complete\n", argv[3]);
+		goto out;
 	} else if (!strcmp(argv[1], "status")) {
 		printf("Checking status of %s...\n", argv[3]);
 
--- cluster/rgmanager/src/resources/Makefile	2007/02/15 22:51:03	1.16
+++ cluster/rgmanager/src/resources/Makefile	2007/03/10 00:20:54	1.17
@@ -20,7 +20,7 @@
 RESOURCES=fs.sh service.sh ip.sh nfsclient.sh nfsexport.sh \
 	script.sh netfs.sh clusterfs.sh smb.sh \
 	apache.sh openldap.sh samba.sh mysql.sh \
-	postgres-8.sh tomcat-5.sh lvm.sh
+	postgres-8.sh tomcat-5.sh lvm.sh vm.sh
 
 METADATA=apache.metadata openldap.metadata samba.metadata \
 	mysql.metadata postgres-8.metadata tomcat-5.metadata 
--- cluster/rgmanager/src/resources/lvm.sh	2007/02/15 22:51:03	1.2
+++ cluster/rgmanager/src/resources/lvm.sh	2007/03/10 00:20:54	1.3
@@ -163,7 +163,7 @@
 	#
 	# Check if device is active
 	#
-	if [[ ! $(lvs -o attr --noheadings vg/mirror) =~ ....a. ]]; then
+	if [[ ! $(lvs -o attr --noheadings $lv_path) =~ ....a. ]]; then
 	    return $OCF_ERR_GENERIC
 	fi
 
--- cluster/rgmanager/src/resources/vm.sh	2006/10/23 22:47:01	1.1
+++ cluster/rgmanager/src/resources/vm.sh	2007/03/10 00:20:54	1.2
@@ -367,14 +367,15 @@
 {
 	declare target=$1
 
-	# XXX TODO
-	return 1
+	xm migrate $OCF_RESKEY_name $target
+	return $?
 }
 
 #
 # A Resource group is abstract, but the OCF RA API doesn't allow for abstract
 # resources, so here it is.
 #
+
 case $1 in
 	start)
 		start
--- cluster/rgmanager/src/utils/clusvcadm.c	2007/03/10 00:19:01	1.16
+++ cluster/rgmanager/src/utils/clusvcadm.c	2007/03/10 00:20:54	1.17
@@ -265,13 +265,13 @@
 			break;
 		case 'r':
 			/* RELOCATE */
-			actionstr = "trying to relocate";
+			actionstr = "relocate";
 			action = RG_RELOCATE;
 			svcname = optarg;
 			break;
 		case 'M':
 			/* MIGRATE */
-			actionstr = "trying to migrate";
+			actionstr = "migrate";
 			action = RG_MIGRATE;
 			svcname = optarg;
 			break;
@@ -359,9 +359,9 @@
 		msg_open(MSG_SOCKET, 0, RG_PORT, &ctx, 5);
 	} else {
 		if (!svctarget)
-			printf("Trying to relocate %s", svcname);
+			printf("Trying to %s %s", actionstr, svcname);
 		else 
-			printf("Trying to relocate %s to %s", svcname,
+			printf("Trying to %s %s to %s", actionstr, svcname,
 			       nodename);
 		printf("...");
 		fflush(stdout);
@@ -392,12 +392,13 @@
 
 	swab_SmMessageSt(&msg);
 	printf("%s\n", rg_strerror(msg.sm_data.d_ret));
-
 	if (msg.sm_data.d_ret == RG_ERUN)
 		return 0;
+	if (msg.sm_data.d_ret)
+		return msg.sm_data.d_ret;
 	
 	switch (action) {
-	case RG_MIGRATE:
+	/*case RG_MIGRATE:*/
 	case RG_RELOCATE:
 	case RG_START:
 	case RG_ENABLE:



                 reply	other threads:[~2007-03-10  0:20 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20070310002058.2480.qmail@sourceware.org \
    --to=lhh@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.