All of lore.kernel.org
 help / color / mirror / Atom feed
From: mgrac@sourceware.org <mgrac@sourceware.org>
To: cluster-devel.redhat.com
Subject: [Cluster-devel] cluster/rgmanager ChangeLog include/resgroup.h ...
Date: 14 Jun 2007 13:36:00 -0000	[thread overview]
Message-ID: <20070614133600.10666.qmail@sourceware.org> (raw)

CVSROOT:	/cvs/cluster
Module name:	cluster
Branch: 	RHEL5
Changes by:	mgrac at sourceware.org	2007-06-14 13:35:59

Modified files:
	rgmanager      : ChangeLog 
	rgmanager/include: resgroup.h 
	rgmanager/src/daemons: main.c rg_state.c rg_thread.c 
	rgmanager/src/utils: clusvcadm.c 

Log message:
	New flag -F for clusvcadm to respect failover domain (#211469). Also changes clusvcadm -e service00 which enable service on local node and do not respect failover (same as in RHEL4, in RHEL 5.0 it just wrote Failure).

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/ChangeLog.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.31.2.11&r2=1.31.2.12
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/include/resgroup.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.15.2.3&r2=1.15.2.4
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/daemons/main.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.34.2.4&r2=1.34.2.5
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/daemons/rg_state.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.24.2.6&r2=1.24.2.7
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/daemons/rg_thread.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.15.2.4&r2=1.15.2.5
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/utils/clusvcadm.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.12.2.3&r2=1.12.2.4

--- cluster/rgmanager/ChangeLog	2007/06/13 20:12:19	1.31.2.11
+++ cluster/rgmanager/ChangeLog	2007/06/14 13:35:58	1.31.2.12
@@ -1,3 +1,9 @@
+2007-06-14 Marek Grac <mgrac@redhat.com>
+	* src/daemons/main.c, rg_state.c, rg_thread.c,
+	  src/utils/clusvcadm.c
+	* #211469 - RFE: Flag for clusvcadm to respect failover domain
+	* 'clusvcadm -e service00' works same as in RHEL4 (differs from RHEL5.0)
+
 2007-06-13 Lon Hohberger <lhh@redhat.com>
 	* src/daemons/restree.c: Fix #229650 uninitialized bug
 
--- cluster/rgmanager/include/resgroup.h	2007/03/20 17:09:11	1.15.2.3
+++ cluster/rgmanager/include/resgroup.h	2007/06/14 13:35:59	1.15.2.4
@@ -86,6 +86,7 @@
 int handle_relocate_req(char *svcName, int request, int preferred_target,
 			int *new_owner);
 int handle_start_req(char *svcName, int req, int *new_owner);
+int handle_fd_start_req(char *svcName, int req, int *new_owner);
 int handle_recover_req(char *svcName, int *new_owner);
 int handle_start_remote_req(char *svcName, int req);
 
--- cluster/rgmanager/src/daemons/main.c	2007/05/10 16:23:43	1.34.2.4
+++ cluster/rgmanager/src/daemons/main.c	2007/06/14 13:35:59	1.34.2.5
@@ -493,7 +493,9 @@
 		/* Queue request */
 		rt_enqueue_request(msg_sm->sm_data.d_svcName,
 		  		   msg_sm->sm_data.d_action,
-		  		   ctx, 0, msg_sm->sm_data.d_svcOwner, 0, 0);
+		  		   ctx, 0, msg_sm->sm_data.d_svcOwner,
+		  		   msg_sm->sm_hdr.gh_arg1,
+		  		   msg_sm->sm_hdr.gh_arg2);
 		return 0;
 
 	case RG_EVENT:
--- cluster/rgmanager/src/daemons/rg_state.c	2007/04/19 18:05:37	1.24.2.6
+++ cluster/rgmanager/src/daemons/rg_state.c	2007/06/14 13:35:59	1.24.2.7
@@ -1211,7 +1211,7 @@
 	strncpy(msg_relo.sm_data.d_svcName, svcName,
 		sizeof(msg_relo.sm_data.d_svcName));
 	msg_relo.sm_data.d_ret = 0;
-
+	msg_relo.sm_data.d_svcOwner = target;
 	/* Open a connection to the other node */
 
 	if (msg_open(MSG_CLUSTER, target, RG_PORT, &ctx, 2)< 0) {
@@ -1493,7 +1493,7 @@
 	 */
 	if (req == RG_ENABLE)
 		tolerance = FOD_GOOD;
-	
+/*	
 	if (req != RG_RESTART &&
 	    req != RG_START_RECOVER &&
 	    (node_should_start_safe(my_id(), membership, svcName) <
@@ -1514,7 +1514,7 @@
 		}
 	}
 	free_member_list(membership);
-
+*/
 	/* Check for dependency.  We cannot start unless our
 	   dependency is met */
 	if (check_depend_safe(svcName) == 0)
@@ -1635,10 +1635,12 @@
 	}
 	free_member_list(membership);
 
-	if (svc_start(svcName, req) == 0) {
+	x = svc_start(svcName, req);
+
+	if ((x == 0) || (x == RG_ERUN)) {
 		if (need_check)
 			pthread_mutex_unlock(&exclusive_mutex);
-		return 0;
+		return x;
 	}
 	if (need_check)
 		pthread_mutex_unlock(&exclusive_mutex);
@@ -1670,3 +1672,47 @@
 
 	return handle_start_req(svcName, RG_START_RECOVER, new_owner);
 }
+
+int
+handle_fd_start_req(char *svcName, int request, int *new_owner)
+{
+       cluster_member_list_t *allowed_nodes;
+       int target, me = my_id();
+       int ret;
+
+       allowed_nodes = member_list();
+
+       while (memb_count(allowed_nodes)) {
+               target = best_target_node(allowed_nodes, -1,
+                                         svcName, 1);
+               if (target == me) {
+                       ret = handle_start_remote_req(svcName, request);
+               } else if (target < 0) {
+                       free_member_list(allowed_nodes);
+                       return RG_EFAIL;
+               } else {
+                       ret = relocate_service(svcName, request, target);
+               }
+
+               switch(ret) {
+               case RG_ESUCCESS:
+                       return RG_ESUCCESS;
+               case RG_ERUN:
+                       return RG_ERUN;
+               case RG_EFAIL:
+                       memb_mark_down(allowed_nodes, target);
+                       continue;
+               case RG_EABORT:
+                       svc_report_failure(svcName);
+                       free_member_list(allowed_nodes);
+                       return RG_EFAIL;
+               default:
+                       clulog(LOG_ERR,
+                              "#6X: Invalid reply [%d] from member %d during"
+                              " relocate operation!\n", ret, target);
+               }
+       }
+
+       free_member_list(allowed_nodes);
+       return RG_EFAIL;
+}
--- cluster/rgmanager/src/daemons/rg_thread.c	2007/05/10 16:23:43	1.15.2.4
+++ cluster/rgmanager/src/daemons/rg_thread.c	2007/06/14 13:35:59	1.15.2.5
@@ -248,8 +248,15 @@
 				break;
 			}
 		case RG_START:
-			error = handle_start_req(myname, req->rr_request,
-						 &newowner);
+			if (req->rr_arg0) {
+				error = handle_fd_start_req(myname,
+						req->rr_request,
+						&newowner);
+			} else {
+				error = handle_start_req(myname,
+						req->rr_request,
+						&newowner);
+			}
 			break;
 
 		case RG_RELOCATE:
--- cluster/rgmanager/src/utils/clusvcadm.c	2007/03/20 17:09:12	1.12.2.3
+++ cluster/rgmanager/src/utils/clusvcadm.c	2007/06/14 13:35:59	1.12.2.4
@@ -39,11 +39,14 @@
 
 
 void
-build_message(SmMessageSt *msgp, int action, char *svcName, int target)
+build_message(SmMessageSt *msgp, int action, char *svcName, int target,
+		int arg1, int arg2)
 {
 	msgp->sm_hdr.gh_magic = GENERIC_HDR_MAGIC;
 	msgp->sm_hdr.gh_command = RG_ACTION_REQUEST;
 	msgp->sm_hdr.gh_length = sizeof(*msgp);
+	msgp->sm_hdr.gh_arg1 = arg1;
+	msgp->sm_hdr.gh_arg2 = arg2;
 	msgp->sm_data.d_action = action;
 	strncpy(msgp->sm_data.d_svcName, svcName,
 		sizeof(msgp->sm_data.d_svcName));
@@ -155,6 +158,8 @@
 printf("       %s -d <group>             Disable <group>\n", name);
 printf("       %s -e <group>             Enable <group>\n",
        name);
+printf("       %s -e <group> -F          Enable <group> according to failover\n"
+       "                                 domain rules\n", name);
 printf("       %s -e <group> -m <member> Enable <group>"
        " on <member>\n", name);
 printf("       %s -r <group> -m <member> Relocate <group> [to <member>]\n",
@@ -230,6 +235,7 @@
 	SmMessageSt msg;
 	generic_msg_hdr *h = (generic_msg_hdr *)&msg;
 	int action = RG_STATUS;
+	int fod = 0;
 	int node_specified = 0;
        	int me, svctarget = 0;
 	char *actionstr = NULL;
@@ -240,7 +246,7 @@
 		return 1;
 	}
 
-	while ((opt = getopt(argc, argv, "lSue:M:d:r:n:m:vR:s:qh?")) != EOF) {
+	while ((opt = getopt(argc, argv, "lSue:M:d:r:n:m:FvR:s:qh?")) != EOF) {
 		switch (opt) {
 		case 'l':
 			return do_lock();
@@ -257,6 +263,14 @@
 			action = RG_ENABLE;
 			svcname = optarg;
 			break;
+               case 'F':
+                       if (node_specified) {
+                               fprintf(stderr,
+                                       "Cannot use '-F' with '-n' or '-m'\n");
+                               return 1;
+                       }
+                       fod = 1;
+                       break;
 		case 'd':
 			/* DISABLE */
 			actionstr = "disabling";
@@ -288,6 +302,11 @@
 			break;
 		case 'm': /* member ... */
 		case 'n': /* node .. same thing */
+                       if (fod) {
+                               fprintf(stderr,
+                                       "Cannot use '-F' with '-n' or '-m'\n");
+                               return 1;
+                       }
 			strncpy(nodename,optarg,sizeof(nodename));
 			node_specified = 1;
 			break;
@@ -351,8 +370,8 @@
 				   */
 		//strcpy(nodename,"me");
 	}
-	
-	build_message(&msg, action, svcname, svctarget);
+
+	build_message(&msg, action, svcname, svctarget, fod, 0);
 
 	if (action != RG_RELOCATE && action != RG_MIGRATE) {
 		if (!node_specified)



             reply	other threads:[~2007-06-14 13:36 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-06-14 13:36 mgrac [this message]
  -- strict thread matches above, loose matches on Subject: below --
2007-12-30  8:27 [Cluster-devel] cluster/rgmanager ChangeLog include/resgroup.h fabbione
2007-12-14 19:37 lhh
2007-11-30 20:36 lhh
2007-06-27 14:03 lhh
2007-06-26 21:55 lhh
2007-06-14 15:06 mgrac
2007-04-27 18:10 lhh
2006-10-06 21:22 lhh
2006-09-01 19:02 lhh
2006-08-18 15:26 lhh

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=20070614133600.10666.qmail@sourceware.org \
    --to=mgrac@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.