Gitweb:
http://git.fedorahosted.org/git/?p=cluster.git;a=commitdiff;h=113888ed164...
Commit: 113888ed16483827c9119861e3cccb975bfd523a
Parent: 6fbf7b593dbd48245fee4411935abb03ba063183
Author: Ryan McCabe <rmccabe(a)redhat.com>
AuthorDate: Sun Jun 22 20:42:12 2014 -0400
Committer: Ryan McCabe <rmccabe(a)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(a)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;