cluster: RHEL6 - rgmanager: clusvcadm: If service doesn't exist, try again as VM

Ryan McCabe rmccabe at fedoraproject.org
Mon Jun 23 01:14:59 UTC 2014


Gitweb:        http://git.fedorahosted.org/git/?p=cluster.git;a=commitdiff;h=113888ed16483827c9119861e3cccb975bfd523a
Commit:        113888ed16483827c9119861e3cccb975bfd523a
Parent:        6fbf7b593dbd48245fee4411935abb03ba063183
Author:        Ryan McCabe <rmccabe at redhat.com>
AuthorDate:    Sun Jun 22 20:42:12 2014 -0400
Committer:     Ryan McCabe <rmccabe at redhat.com>
CommitterDate: Sun Jun 22 21:12:48 2014 -0400

rgmanager: clusvcadm: If service doesn't exist, try again as VM

Currently clusvcadm requires that be specified as 'vm:name'. This
patch causes clusvcadm to retry with "vm:<name>" when an operation
returns no such service on <name>.

Resolves: rhbz#952729

Signed-off-by: Ryan McCabe <rmccabe at redhat.com>
---
 rgmanager/src/utils/clusvcadm.c |   35 ++++++++++++++++++++++-------------
 1 files changed, 22 insertions(+), 13 deletions(-)

diff --git a/rgmanager/src/utils/clusvcadm.c b/rgmanager/src/utils/clusvcadm.c
index 8d0b502..ec0d5b8 100644
--- a/rgmanager/src/utils/clusvcadm.c
+++ b/rgmanager/src/utils/clusvcadm.c
@@ -225,7 +225,7 @@ int
 main(int argc, char **argv)
 {
 	extern char *optarg;
-	char *svcname=NULL, nodename[256], realsvcname[64];
+	char *svcname=NULL, nodename[256], realsvcname[64], *origname=NULL;
 	int opt;
 	msgctx_t ctx;
 	cman_handle_t ch;
@@ -341,6 +341,7 @@ main(int argc, char **argv)
 		return 1;
 	}
 
+	origname = svcname;
 	if (!strchr(svcname,':')) {
 		snprintf(realsvcname, sizeof(realsvcname), "service:%s",
 			 svcname);
@@ -383,8 +384,6 @@ main(int argc, char **argv)
 		//strcpy(nodename,"me");
 	}
 
-	build_message(&msg, action, svcname, svctarget, fod, 0);
-
 	if (action != RG_RELOCATE && action != RG_MIGRATE) {
 		if (!node_specified)
 			printf("Local machine %s %s", actionstr, svcname);
@@ -392,10 +391,6 @@ main(int argc, char **argv)
 			printf("Member %s %s %s", nodename, actionstr, svcname);
 		printf("...");
 		fflush(stdout);
-		if (msg_open(MSG_SOCKET, 0, RG_PORT, &ctx, 5) < 0) {
-			printf("Could not connect to resource group manager\n");
-			return 1;
-		}
 	} else {
 		if (!svctarget)
 			printf("Trying to %s %s", actionstr, svcname);
@@ -404,10 +399,14 @@ main(int argc, char **argv)
 			       nodename);
 		printf("...");
 		fflush(stdout);
-		if (msg_open(MSG_SOCKET, 0, RG_PORT, &ctx, 5) < 0) {
-			printf("Could not connect to resource group manager\n");
-			return 1;
-		}
+	}
+
+again:
+	build_message(&msg, action, svcname, svctarget, fod, 0);
+
+	if (msg_open(MSG_SOCKET, 0, RG_PORT, &ctx, 5) < 0) {
+		printf("Could not connect to resource group manager\n");
+		return 1;
 	}
 
 	if (ctx.type < 0) {
@@ -438,9 +437,19 @@ main(int argc, char **argv)
 	}
 
 	swab_SmMessageSt(&msg);
-	printf("%s\n", rg_strerror(msg.sm_data.d_ret));
-	if (msg.sm_data.d_ret == RG_ERUN)
+	if (msg.sm_data.d_ret == RG_ERUN) {
+		printf("%s\n", rg_strerror(msg.sm_data.d_ret));
 		return 0;
+	}
+
+	if (msg.sm_data.d_ret == RG_ENOSERVICE && strcmp(origname, svcname)) {
+		snprintf(realsvcname, sizeof(realsvcname), "vm:%s", origname);
+		svcname = realsvcname;
+		origname = svcname;
+		goto again;
+	}
+
+	printf("%s\n", rg_strerror(msg.sm_data.d_ret));
 	if (msg.sm_data.d_ret)
 		return msg.sm_data.d_ret;
 	


More information about the cluster-commits mailing list