[Cluster-devel] cluster/rgmanager include/resgroup.h src/cluli ...
lhh at sourceware.org
lhh at sourceware.org
Thu Dec 14 22:18:09 UTC 2006
CVSROOT: /cvs/cluster
Module name: cluster
Changes by: lhh at sourceware.org 2006-12-14 22:18:07
Modified files:
rgmanager/include: resgroup.h
rgmanager/src/clulib: rg_strings.c
rgmanager/src/daemons: rg_state.c
rgmanager/src/resources: fs.sh
rgmanager/src/utils: clusvcadm.c
Log message:
Fix #216774, pass 3
Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/include/resgroup.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.5&r2=1.6
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/daemons/rg_state.c.diff?cvsroot=cluster&r1=1.25&r2=1.26
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/resources/fs.sh.diff?cvsroot=cluster&r1=1.17&r2=1.18
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/utils/clusvcadm.c.diff?cvsroot=cluster&r1=1.13&r2=1.14
--- cluster/rgmanager/include/resgroup.h 2006/12/14 22:03:17 1.16
+++ cluster/rgmanager/include/resgroup.h 2006/12/14 22:18:07 1.17
@@ -161,6 +161,7 @@
int my_id(void);
/* Return codes */
+#define RG_ERUN -10 /* Service is already running */
#define RG_EQUORUM -9 /* Operation requires quorum */
#define RG_EINVAL -8 /* Invalid operation for resource */
#define RG_EDEPEND -7 /* Operation violates dependency */
--- cluster/rgmanager/src/clulib/rg_strings.c 2006/09/01 19:02:22 1.5
+++ cluster/rgmanager/src/clulib/rg_strings.c 2006/12/14 22:18:07 1.6
@@ -19,6 +19,7 @@
#include <resgroup.h>
struct { int val; char *str; } rg_error_strings[] = {
+ { RG_ERUN, "Service is already running" },
{ RG_EQUORUM, "Operation requires quorum" },
{ RG_EINVAL, "Invalid operation for resource" },
{ RG_EDEPEND, "Operation violates dependency rule" },
--- cluster/rgmanager/src/daemons/rg_state.c 2006/12/14 22:03:17 1.25
+++ cluster/rgmanager/src/daemons/rg_state.c 2006/12/14 22:18:07 1.26
@@ -569,6 +569,7 @@
* 1 = START service - return whatever it returns.
* 2 = DO NOT start service, return 0
* 3 = DO NOT start service, return RG_EAGAIN
+ * 4 = DO NOT start service, return RG_ERUN
*/
int
svc_advise_start(rg_state_t *svcStatus, char *svcName, int req)
@@ -593,7 +594,7 @@
clulog(LOG_DEBUG,
"RG %s is already running locally\n", svcName);
*/
- ret = 2;
+ ret = 4;
break;
}
@@ -605,7 +606,7 @@
svcName,
memb_id_to_name(membership,svcStatus->rs_owner));
*/
- ret = 2;
+ ret = 4;
break;
}
@@ -663,6 +664,7 @@
break;
case RG_STATE_STOPPED:
+ case RG_STATE_ERROR:
/* Don't actually enable if the RG is locked! */
if (rg_locked()) {
ret = 3;
@@ -694,7 +696,6 @@
svcName);
break;
- case RG_STATE_ERROR:
default:
clulog(LOG_ERR,
"#44: Cannot start RG %s: Invalid State %d\n",
@@ -746,6 +747,9 @@
case 3:
rg_unlock(&lockp);
return RG_EAGAIN;
+ case 4:
+ rg_unlock(&lockp);
+ return RG_ERUN;
default:
break;
}
@@ -1491,8 +1495,8 @@
/*
If services are locked, return the error
*/
- if (ret == RG_EAGAIN)
- return RG_EAGAIN;
+ if (ret == RG_EAGAIN || ret == RG_ERUN)
+ return ret;
/*
* If we succeeded, then we're done.
--- cluster/rgmanager/src/resources/fs.sh 2006/08/18 15:26:22 1.17
+++ cluster/rgmanager/src/resources/fs.sh 2006/12/14 22:18:07 1.18
@@ -496,6 +496,18 @@
#
+# trim_trailing_slash path
+#
+# Trim trailing slash from given path.
+#
+trim_trailing_slash() {
+ declare mpath=$1
+
+ echo $mpath | sed -e 's/\/*$//'
+}
+
+
+#
# isMounted device mount_point
#
# Check to see if the device is mounted. Print a warning if its not
@@ -523,6 +535,8 @@
do
#echo "spec=$1 dev=$dev tmp_dev=$tmp_dev"
tmp_dev=$(real_device $tmp_dev)
+ tmp_mp=$(trim_trailing_slash $tmp_mp)
+ mp=$(trim_trailing_slash $mp)
if [ -n "$tmp_dev" -a "$tmp_dev" = "$dev" ]; then
#
--- cluster/rgmanager/src/utils/clusvcadm.c 2006/12/14 22:03:17 1.13
+++ cluster/rgmanager/src/utils/clusvcadm.c 2006/12/14 22:18:07 1.14
@@ -344,13 +344,16 @@
clu_local_nodename(RG_SERVICE_GROUP, nodename,
sizeof(nodename));
*/
- strcpy(nodename,"me");
+ //strcpy(nodename,"me");
}
build_message(&msg, action, svcname, svctarget);
if (action != RG_RELOCATE && action != RG_MIGRATE) {
- printf("Member %s %s %s", nodename, actionstr, svcname);
+ if (!node_specified)
+ printf("Local machine %s %s", actionstr, svcname);
+ else
+ printf("Member %s %s %s", nodename, actionstr, svcname);
printf("...");
fflush(stdout);
msg_open(MSG_SOCKET, 0, RG_PORT, &ctx, 5);
@@ -389,13 +392,18 @@
swab_SmMessageSt(&msg);
printf("%s\n", rg_strerror(msg.sm_data.d_ret));
+
+ if (msg.sm_data.d_ret == RG_ERUN)
+ return 0;
+
switch (action) {
case RG_MIGRATE:
case RG_RELOCATE:
case RG_START:
case RG_ENABLE:
printf("%s%s is now running on %s\n",
- msg.sm_data.d_svcOwner==svctarget?"":"Warning: ",
+ (!node_specified ||
+ msg.sm_data.d_svcOwner==svctarget)?"":"Warning: ",
svcname, memb_id_to_name(membership,
msg.sm_data.d_svcOwner));
break;
More information about the Cluster-devel
mailing list