cluster-devel.redhat.com archive mirror
 help / color / mirror / Atom feed
* [Cluster-devel] cluster/fence/agents/xvm fence_xvmd.c
@ 2006-12-01 22:13 lhh
  0 siblings, 0 replies; 13+ messages in thread
From: lhh @ 2006-12-01 22:13 UTC (permalink / raw)
  To: cluster-devel.redhat.com

CVSROOT:	/cvs/cluster
Module name:	cluster
Branch: 	RHEL50
Changes by:	lhh at sourceware.org	2006-12-01 22:13:57

Modified files:
	fence/agents/xvm: fence_xvmd.c 

Log message:
	Handle 0.1.9 case of libvirt returning a virDomainPtr + state for a VM that doesn't exist (vm state == VIR_DOMAIN_SHUTOFF)

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/fence/agents/xvm/fence_xvmd.c.diff?cvsroot=cluster&only_with_tag=RHEL50&r1=1.4.4.1&r2=1.4.4.2

--- cluster/fence/agents/xvm/fence_xvmd.c	2006/11/13 16:14:18	1.4.4.1
+++ cluster/fence/agents/xvm/fence_xvmd.c	2006/12/01 22:13:57	1.4.4.2
@@ -207,6 +207,54 @@
 }
 
 
+static inline int
+wait_domain(fence_req_t *req, virConnectPtr vp, int timeout)
+{
+	int tries = 0;
+	int response = 1;
+	virDomainPtr vdp;
+	virDomainInfo di;
+
+	if (!(vdp = get_domain(req, vp)))
+		return 0;
+
+	/* Check domain liveliness.  If the domain is still here,
+	   we return failure, and the client must then retry */
+	/* XXX On the xen 3.0.4 API, we will be able to guarantee
+	   synchronous virDomainDestroy, so this check will not
+	   be necessary */
+	do {
+		sleep(1);
+		vdp = get_domain(req, vp);
+		if (!vdp) {
+			dprintf(2, "Domain no longer exists\n");
+			response = 0;
+			break;
+		}
+
+		memset(&di, 0, sizeof(di));
+		virDomainGetInfo(vdp, &di);
+		virDomainFree(vdp);
+
+		if (di.state == VIR_DOMAIN_SHUTOFF) {
+			dprintf(2, "Domain has been shut off\n");
+			response = 0;
+			break;
+		}
+		
+		dprintf(4, "Domain still exists (state %d) after %d seconds\n",
+			di.state, tries);
+
+		if (++tries >= timeout)
+			break;
+	} while (1);
+
+	return response;
+}
+
+
+
+
 int
 do_fence_request_tcp(fence_req_t *req, fence_auth_type_t auth,
 		     void *key, size_t key_len, virConnectPtr vp)
@@ -235,24 +283,18 @@
 		break;
 	case FENCE_OFF:
 		printf("Destroying domain %s...\n", (char *)req->domain);
+
+		dprintf(2, "[OFF] Calling virDomainDestroy\n");
 		ret = virDomainDestroy(vdp);
 		if (ret < 0) {
-			/* raise_error(vp); */
+			printf("virDomainDestroy() failed: %d\n", ret);
 			break;
-		} else { 
-			sleep(1);
 		}
 
-		/* Check domain liveliness.  If the domain is still here,
-		   we return failure, and the client must then retry */
-		/* XXX On the xen 3.0.4 API, we will be able to guarantee
-		   synchronous virDomainDestroy, so this check will not
-		   be necessary */
-		vdp = get_domain(req, vp);
-		if (!vdp) {
-			response = 0;	/* Success! */
-		} else {
-			virDomainFree(vdp);
+		response = wait_domain(req, vp, 15);
+
+		if (response) {
+			printf("Domain still exists; fencing failed\n");
 		}
 		break;
 	case FENCE_REBOOT:
@@ -271,42 +313,26 @@
 			       "libvirt\n");
 		}
 
-		dprintf(2, "Calling virDomainDestroy\n");
+		dprintf(2, "[REBOOT] Calling virDomainDestroy\n");
 		ret = virDomainDestroy(vdp);
 		if (ret < 0) {
 			printf("virDomainDestroy() failed: %d\n", ret);
 			if (domain_desc)
 				free(domain_desc);
 			break;
-		} else {
-			/* Give it time for the operation to complete */
-			sleep(3);
 		}
 
-		/* Check domain liveliness.  If the domain is still here,
-		   we return failure, and the client must then retry */
-		/* XXX On the xen 3.0.4 API, we will be able to guarantee
-		   synchronous virDomainDestroy, so this check will not
-		   be necessary */
-		vdp = get_domain(req, vp);
-		if (!vdp) {
-			dprintf(2, "Domain no longer exists\n");
-			response = 0;	/* Success! */
-		} else {
-			printf("Domain still exists; fencing failed\n");
-			virDomainFree(vdp);
-			ret = 1;	/* Failed to kill it */
-		}
+		response = wait_domain(req, vp, 15);
 
-		/* Recreate the domain if possible */
-		if (ret == 0 && domain_desc) {
+		if (response) {
+			printf("Domain still exists; fencing failed\n");
+		} else if (domain_desc) {
+			/* Recreate the domain if possible */
 			/* Success */
 			dprintf(2, "Calling virDomainCreateLinux()...\n");
 			virDomainCreateLinux(vp, domain_desc, 0);
-		}
-
-		if (domain_desc)
 			free(domain_desc);
+		}
 		break;
 	}
 	
@@ -646,17 +672,14 @@
 	int mc_sock;
 	char key[4096];
 	int key_len = 0;
-	char *my_options = "dfi:a:p:C:c:k:u?hVX";
+	char *my_options = "dfi:a:p:C:c:k:u?hV";
 	void *h;
 
 	args_init(&args);
 	args_get_getopt(argc, argv, my_options, &args);
-	if (!(args.flags & F_NOCCS)) {
-		args_get_ccs(my_options, &args);
-	}
 	args_finalize(&args);
 	if (args.debug > 0) {
-		dset(args.debug);
+		_debug = args.debug;
 		args_print(&args);
 	}
 



^ permalink raw reply	[flat|nested] 13+ messages in thread

* [Cluster-devel] cluster/fence/agents/xvm fence_xvmd.c
@ 2006-12-01 22:14 lhh
  0 siblings, 0 replies; 13+ messages in thread
From: lhh @ 2006-12-01 22:14 UTC (permalink / raw)
  To: cluster-devel.redhat.com

CVSROOT:	/cvs/cluster
Module name:	cluster
Branch: 	RHEL5
Changes by:	lhh at sourceware.org	2006-12-01 22:14:17

Modified files:
	fence/agents/xvm: fence_xvmd.c 

Log message:
	Handle 0.1.9 case of libvirt returning a virDomainPtr + state for a VM that doesn't exist (vm state == VIR_DOMAIN_SHUTOFF)

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/fence/agents/xvm/fence_xvmd.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.4.2.1&r2=1.4.2.2

--- cluster/fence/agents/xvm/fence_xvmd.c	2006/11/13 16:14:06	1.4.2.1
+++ cluster/fence/agents/xvm/fence_xvmd.c	2006/12/01 22:14:17	1.4.2.2
@@ -207,6 +207,54 @@
 }
 
 
+static inline int
+wait_domain(fence_req_t *req, virConnectPtr vp, int timeout)
+{
+	int tries = 0;
+	int response = 1;
+	virDomainPtr vdp;
+	virDomainInfo di;
+
+	if (!(vdp = get_domain(req, vp)))
+		return 0;
+
+	/* Check domain liveliness.  If the domain is still here,
+	   we return failure, and the client must then retry */
+	/* XXX On the xen 3.0.4 API, we will be able to guarantee
+	   synchronous virDomainDestroy, so this check will not
+	   be necessary */
+	do {
+		sleep(1);
+		vdp = get_domain(req, vp);
+		if (!vdp) {
+			dprintf(2, "Domain no longer exists\n");
+			response = 0;
+			break;
+		}
+
+		memset(&di, 0, sizeof(di));
+		virDomainGetInfo(vdp, &di);
+		virDomainFree(vdp);
+
+		if (di.state == VIR_DOMAIN_SHUTOFF) {
+			dprintf(2, "Domain has been shut off\n");
+			response = 0;
+			break;
+		}
+		
+		dprintf(4, "Domain still exists (state %d) after %d seconds\n",
+			di.state, tries);
+
+		if (++tries >= timeout)
+			break;
+	} while (1);
+
+	return response;
+}
+
+
+
+
 int
 do_fence_request_tcp(fence_req_t *req, fence_auth_type_t auth,
 		     void *key, size_t key_len, virConnectPtr vp)
@@ -235,24 +283,18 @@
 		break;
 	case FENCE_OFF:
 		printf("Destroying domain %s...\n", (char *)req->domain);
+
+		dprintf(2, "[OFF] Calling virDomainDestroy\n");
 		ret = virDomainDestroy(vdp);
 		if (ret < 0) {
-			/* raise_error(vp); */
+			printf("virDomainDestroy() failed: %d\n", ret);
 			break;
-		} else { 
-			sleep(1);
 		}
 
-		/* Check domain liveliness.  If the domain is still here,
-		   we return failure, and the client must then retry */
-		/* XXX On the xen 3.0.4 API, we will be able to guarantee
-		   synchronous virDomainDestroy, so this check will not
-		   be necessary */
-		vdp = get_domain(req, vp);
-		if (!vdp) {
-			response = 0;	/* Success! */
-		} else {
-			virDomainFree(vdp);
+		response = wait_domain(req, vp, 15);
+
+		if (response) {
+			printf("Domain still exists; fencing failed\n");
 		}
 		break;
 	case FENCE_REBOOT:
@@ -271,42 +313,26 @@
 			       "libvirt\n");
 		}
 
-		dprintf(2, "Calling virDomainDestroy\n");
+		dprintf(2, "[REBOOT] Calling virDomainDestroy\n");
 		ret = virDomainDestroy(vdp);
 		if (ret < 0) {
 			printf("virDomainDestroy() failed: %d\n", ret);
 			if (domain_desc)
 				free(domain_desc);
 			break;
-		} else {
-			/* Give it time for the operation to complete */
-			sleep(3);
 		}
 
-		/* Check domain liveliness.  If the domain is still here,
-		   we return failure, and the client must then retry */
-		/* XXX On the xen 3.0.4 API, we will be able to guarantee
-		   synchronous virDomainDestroy, so this check will not
-		   be necessary */
-		vdp = get_domain(req, vp);
-		if (!vdp) {
-			dprintf(2, "Domain no longer exists\n");
-			response = 0;	/* Success! */
-		} else {
-			printf("Domain still exists; fencing failed\n");
-			virDomainFree(vdp);
-			ret = 1;	/* Failed to kill it */
-		}
+		response = wait_domain(req, vp, 15);
 
-		/* Recreate the domain if possible */
-		if (ret == 0 && domain_desc) {
+		if (response) {
+			printf("Domain still exists; fencing failed\n");
+		} else if (domain_desc) {
+			/* Recreate the domain if possible */
 			/* Success */
 			dprintf(2, "Calling virDomainCreateLinux()...\n");
 			virDomainCreateLinux(vp, domain_desc, 0);
-		}
-
-		if (domain_desc)
 			free(domain_desc);
+		}
 		break;
 	}
 	
@@ -646,17 +672,14 @@
 	int mc_sock;
 	char key[4096];
 	int key_len = 0;
-	char *my_options = "dfi:a:p:C:c:k:u?hVX";
+	char *my_options = "dfi:a:p:C:c:k:u?hV";
 	void *h;
 
 	args_init(&args);
 	args_get_getopt(argc, argv, my_options, &args);
-	if (!(args.flags & F_NOCCS)) {
-		args_get_ccs(my_options, &args);
-	}
 	args_finalize(&args);
 	if (args.debug > 0) {
-		dset(args.debug);
+		_debug = args.debug;
 		args_print(&args);
 	}
 



^ permalink raw reply	[flat|nested] 13+ messages in thread

* [Cluster-devel] cluster/fence/agents/xvm fence_xvmd.c
@ 2006-12-04 17:25 lhh
  0 siblings, 0 replies; 13+ messages in thread
From: lhh @ 2006-12-04 17:25 UTC (permalink / raw)
  To: cluster-devel.redhat.com

CVSROOT:	/cvs/cluster
Module name:	cluster
Branch: 	RHEL50
Changes by:	lhh at sourceware.org	2006-12-04 17:25:41

Modified files:
	fence/agents/xvm: fence_xvmd.c 

Log message:
	Fix build error

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/fence/agents/xvm/fence_xvmd.c.diff?cvsroot=cluster&only_with_tag=RHEL50&r1=1.4.4.2&r2=1.4.4.3

--- cluster/fence/agents/xvm/fence_xvmd.c	2006/12/01 22:13:57	1.4.4.2
+++ cluster/fence/agents/xvm/fence_xvmd.c	2006/12/04 17:25:40	1.4.4.3
@@ -679,7 +679,7 @@
 	args_get_getopt(argc, argv, my_options, &args);
 	args_finalize(&args);
 	if (args.debug > 0) {
-		_debug = args.debug;
+		dset(args.debug);
 		args_print(&args);
 	}
 



^ permalink raw reply	[flat|nested] 13+ messages in thread

* [Cluster-devel] cluster/fence/agents/xvm fence_xvmd.c
@ 2006-12-04 17:26 lhh
  0 siblings, 0 replies; 13+ messages in thread
From: lhh @ 2006-12-04 17:26 UTC (permalink / raw)
  To: cluster-devel.redhat.com

CVSROOT:	/cvs/cluster
Module name:	cluster
Branch: 	RHEL5
Changes by:	lhh at sourceware.org	2006-12-04 17:26:09

Modified files:
	fence/agents/xvm: fence_xvmd.c 

Log message:
	Fix build error

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/fence/agents/xvm/fence_xvmd.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.4.2.2&r2=1.4.2.3

--- cluster/fence/agents/xvm/fence_xvmd.c	2006/12/01 22:14:17	1.4.2.2
+++ cluster/fence/agents/xvm/fence_xvmd.c	2006/12/04 17:26:09	1.4.2.3
@@ -679,7 +679,7 @@
 	args_get_getopt(argc, argv, my_options, &args);
 	args_finalize(&args);
 	if (args.debug > 0) {
-		_debug = args.debug;
+		dset(args.debug);
 		args_print(&args);
 	}
 



^ permalink raw reply	[flat|nested] 13+ messages in thread

* [Cluster-devel] cluster/fence/agents/xvm fence_xvmd.c
@ 2006-12-04 17:26 lhh
  0 siblings, 0 replies; 13+ messages in thread
From: lhh @ 2006-12-04 17:26 UTC (permalink / raw)
  To: cluster-devel.redhat.com

CVSROOT:	/cvs/cluster
Module name:	cluster
Changes by:	lhh at sourceware.org	2006-12-04 17:26:34

Modified files:
	fence/agents/xvm: fence_xvmd.c 

Log message:
	Fix build error

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/fence/agents/xvm/fence_xvmd.c.diff?cvsroot=cluster&r1=1.6&r2=1.7

--- cluster/fence/agents/xvm/fence_xvmd.c	2006/12/01 22:14:40	1.6
+++ cluster/fence/agents/xvm/fence_xvmd.c	2006/12/04 17:26:34	1.7
@@ -679,7 +679,7 @@
 	args_get_getopt(argc, argv, my_options, &args);
 	args_finalize(&args);
 	if (args.debug > 0) {
-		_debug = args.debug;
+		dset(args.debug);
 		args_print(&args);
 	}
 



^ permalink raw reply	[flat|nested] 13+ messages in thread

* [Cluster-devel] cluster/fence/agents/xvm fence_xvmd.c
@ 2007-01-10 20:25 lhh
  0 siblings, 0 replies; 13+ messages in thread
From: lhh @ 2007-01-10 20:25 UTC (permalink / raw)
  To: cluster-devel.redhat.com

CVSROOT:	/cvs/cluster
Module name:	cluster
Branch: 	RHEL5
Changes by:	lhh at sourceware.org	2007-01-10 20:25:58

Modified files:
	fence/agents/xvm: fence_xvmd.c 

Log message:
	Resolves: #221210
	Allows fence_xvm to respond even if the virtual machine has never existed in the cluster.

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/fence/agents/xvm/fence_xvmd.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.4.2.3&r2=1.4.2.4

--- cluster/fence/agents/xvm/fence_xvmd.c	2006/12/04 17:26:09	1.4.2.3
+++ cluster/fence/agents/xvm/fence_xvmd.c	2007/01/10 20:25:58	1.4.2.4
@@ -409,7 +409,7 @@
 		goto out;
 
 	for (x = 0; x < actual; x++)
-		if (nodes[x].cn_nodeid > high)
+		if (nodes[x].cn_nodeid > high && nodes[x].cn_member)
 			high = nodes[x].cn_nodeid;
 
 	*high_id = high;
@@ -487,19 +487,28 @@
 	uint64_t fence_time;
 	char ret = 1;
 	cman_node_t node;
+	
 
 	if (get_domain_state_ckpt(h, data->domain, &vst) < 0) {
-		printf("XXX I have no record of that domain\n");
-		return;
+		printf("Evaluating Domain: %s   Last Owner/State Unknown\n",
+		       data->domain);
+		memset(&vst, 0, sizeof(vst));
+	} else {
+		printf("Evaluating Domain: %s   Last Owner: %d   State %d\n",
+		       data->domain, vst.s_owner, vst.s_state);
 	}
-
-	printf("Evaluating Domain: %s   Last Owner: %d   State %d\n",
-	       data->domain, vst.s_owner, vst.s_state);
 			
-	if (get_cman_ids(ch, NULL, &high_id) < 0)
+	if (get_cman_ids(ch, NULL, &high_id) < 0) {
+		printf("Error: Could not determine high node ID; unable to "
+		       "process fencing request\n");
 		return;
-
-	if (my_id == high_id && vst.s_owner != my_id) {
+	}
+	
+	if (my_id == high_id && vst.s_owner == 0) {
+		printf("There is no record of that domain; "
+		       "returning success\n");
+		ret = 0;
+	} else if (my_id == high_id && vst.s_owner != my_id) {
 
 		memset(&node, 0, sizeof(node));
 		cman_get_node(ch, vst.s_owner, &node);
@@ -547,7 +556,7 @@
 
 
 int
-xvmd_loop(void *h, int fd, fence_xvm_args_t *args,
+xvmd_loop(cman_handle_t ch, void *h, int fd, fence_xvm_args_t *args,
 	  void *key, size_t key_len)
 {
 	fd_set rfds;
@@ -559,23 +568,25 @@
 	socklen_t slen;
 	fence_req_t data;
 	virConnectPtr vp;
-	virt_list_t *vl;
-	virt_state_t *dom;
-	cman_handle_t ch;
+	virt_list_t *vl = NULL;
+	virt_state_t *dom = NULL;
 
 	vp = virConnectOpen(NULL);
-	if (!vp) {
+	if (!vp)
 		perror("virConnectOpen");
-		return -1;
-	}
-
-	ch = cman_init(NULL);
 
 	get_cman_ids(ch, &my_id, NULL);
 	printf("My Node ID = %d\n", my_id);
-
-	vl = vl_get(vp, my_id);
-	vl_print(vl);
+	
+	if (vp) {
+		vl = vl_get(vp, my_id);
+		vl_print(vl);
+		virt_list_update(vp, &vl, my_id);
+		if (args->flags & F_USE_UUID) 
+			store_domains_by_uuid(h, vl);
+		else
+			store_domains_by_name(h, vl);
+	}
 
 	while (running) {
 		FD_ZERO(&rfds);
@@ -583,19 +594,38 @@
 		tv.tv_sec = 10;
 		tv.tv_usec = 0;
 
+		/* Close the connection */
+		if (vp) {
+			virConnectClose(vp);
+			vp = NULL;
+		}
+		
 		n = select(fd+1, &rfds, NULL, NULL, &tv);
 		if (n < 0)
 			continue;
-		if (n == 0) {
-			virt_list_update(vp, &vl, my_id);
-			vl_print(vl);
-			/* Store information here */
-			if (args->flags & F_USE_UUID) 
-				store_domains_by_uuid(h, vl);
-			else
-				store_domains_by_name(h, vl);
+	
+		/* Request and/or timeout: open connection */
+		vp = virConnectOpen(NULL);
+		if (!vp) {
+			printf("NOTICE: virConnectOpen(): %s; cannot fence!\n",
+			       strerror(errno));
 			continue;
 		}
+			
+		/* Update list of VMs from libvirt. */
+		virt_list_update(vp, &vl, my_id);
+		vl_print(vl);
+		/* Store information here */
+		if (args->flags & F_USE_UUID) 
+			store_domains_by_uuid(h, vl);
+		else
+			store_domains_by_name(h, vl);
+		
+		/* 
+		 * If no requests, we're done 
+		 */
+		if (n == 0)
+			continue;
 
 		slen = sizeof(sin);
 		len = recvfrom(fd, &data, sizeof(data), 0,
@@ -626,11 +656,7 @@
 		}
 
 		printf("Request to fence: %s\n", data.domain);
-
-		/* Do a quick update to make sure we're current */
-		virt_list_update(vp, &vl, my_id);
-		vl_print(vl);
-
+		
 		if (args->flags & F_USE_UUID)
 			dom = vl_find_uuid(vl, (char *)data.domain);
 		else
@@ -659,7 +685,11 @@
 	}
 
 	cman_finish(ch);
-	virConnectClose(vp);
+	
+	if (vp) {
+		virConnectClose(vp);
+		vp = NULL;
+	}
 
 	return 0;
 }
@@ -671,8 +701,9 @@
 	fence_xvm_args_t args;
 	int mc_sock;
 	char key[4096];
-	int key_len = 0;
+	int key_len = 0, x;
 	char *my_options = "dfi:a:p:C:c:k:u?hV";
+	cman_handle_t ch;
 	void *h;
 
 	args_init(&args);
@@ -726,12 +757,33 @@
 		printf("Could not initialize NSS\n");
 		return 1;
 	}
-
-	h = ckpt_init("vm_states", 262144, 4096, 64, 10);
-	if (!h) {
-		printf("Could not initialize Checkpoint\n");
-		return 1;
+	
+	/* Wait for cman to start. */
+	x = 0;
+	while ((ch = cman_init(NULL)) == NULL) {
+		if (!x) {
+			printf("Could not connect to CMAN; retrying...\n");
+			x = 1;
+		}
+		sleep(3);
+	}
+	if (x)
+		printf("Connected to CMAN\n");
+	/* Wait for quorum */
+	while (!cman_is_quorate(ch))
+		sleep(3);
+
+	/* Wait for openais checkpointing to become available */
+	x = 0;
+	while ((h = ckpt_init("vm_states", 262144, 4096, 64, 10)) == NULL) {
+		if (!x) {
+			printf("Could not initialize saCkPt; retrying...\n");
+			x = 1;
+		}
+		sleep(3);
 	}
+	if (x)
+		printf("Checkpoint initialized\n");
 
 	if (args.family == PF_INET)
 		mc_sock = ipv4_recv_sk(args.addr, args.port);
@@ -742,7 +794,7 @@
 		return 1;
 	}
 
-	xvmd_loop(h, mc_sock, &args, key, key_len);
+	xvmd_loop(ch, h, mc_sock, &args, key, key_len);
 
 	return 0;
 }



^ permalink raw reply	[flat|nested] 13+ messages in thread

* [Cluster-devel] cluster/fence/agents/xvm fence_xvmd.c
@ 2007-01-10 20:30 lhh
  0 siblings, 0 replies; 13+ messages in thread
From: lhh @ 2007-01-10 20:30 UTC (permalink / raw)
  To: cluster-devel.redhat.com

CVSROOT:	/cvs/cluster
Module name:	cluster
Changes by:	lhh at sourceware.org	2007-01-10 20:30:47

Modified files:
	fence/agents/xvm: fence_xvmd.c 

Log message:
	Resolves: #221210
	Allows fence_xvm to respond even if the virtual machine has never existed in the cluster.

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/fence/agents/xvm/fence_xvmd.c.diff?cvsroot=cluster&r1=1.7&r2=1.8

--- cluster/fence/agents/xvm/fence_xvmd.c	2006/12/04 17:26:34	1.7
+++ cluster/fence/agents/xvm/fence_xvmd.c	2007/01/10 20:30:47	1.8
@@ -409,7 +409,7 @@
 		goto out;
 
 	for (x = 0; x < actual; x++)
-		if (nodes[x].cn_nodeid > high)
+		if (nodes[x].cn_nodeid > high && nodes[x].cn_member)
 			high = nodes[x].cn_nodeid;
 
 	*high_id = high;
@@ -487,19 +487,28 @@
 	uint64_t fence_time;
 	char ret = 1;
 	cman_node_t node;
+	
 
 	if (get_domain_state_ckpt(h, data->domain, &vst) < 0) {
-		printf("XXX I have no record of that domain\n");
-		return;
+		printf("Evaluating Domain: %s   Last Owner/State Unknown\n",
+		       data->domain);
+		memset(&vst, 0, sizeof(vst));
+	} else {
+		printf("Evaluating Domain: %s   Last Owner: %d   State %d\n",
+		       data->domain, vst.s_owner, vst.s_state);
 	}
-
-	printf("Evaluating Domain: %s   Last Owner: %d   State %d\n",
-	       data->domain, vst.s_owner, vst.s_state);
 			
-	if (get_cman_ids(ch, NULL, &high_id) < 0)
+	if (get_cman_ids(ch, NULL, &high_id) < 0) {
+		printf("Error: Could not determine high node ID; unable to "
+		       "process fencing request\n");
 		return;
-
-	if (my_id == high_id && vst.s_owner != my_id) {
+	}
+	
+	if (my_id == high_id && vst.s_owner == 0) {
+		printf("There is no record of that domain; "
+		       "returning success\n");
+		ret = 0;
+	} else if (my_id == high_id && vst.s_owner != my_id) {
 
 		memset(&node, 0, sizeof(node));
 		cman_get_node(ch, vst.s_owner, &node);
@@ -547,7 +556,7 @@
 
 
 int
-xvmd_loop(void *h, int fd, fence_xvm_args_t *args,
+xvmd_loop(cman_handle_t ch, void *h, int fd, fence_xvm_args_t *args,
 	  void *key, size_t key_len)
 {
 	fd_set rfds;
@@ -559,23 +568,25 @@
 	socklen_t slen;
 	fence_req_t data;
 	virConnectPtr vp;
-	virt_list_t *vl;
-	virt_state_t *dom;
-	cman_handle_t ch;
+	virt_list_t *vl = NULL;
+	virt_state_t *dom = NULL;
 
 	vp = virConnectOpen(NULL);
-	if (!vp) {
+	if (!vp)
 		perror("virConnectOpen");
-		return -1;
-	}
-
-	ch = cman_init(NULL);
 
 	get_cman_ids(ch, &my_id, NULL);
 	printf("My Node ID = %d\n", my_id);
-
-	vl = vl_get(vp, my_id);
-	vl_print(vl);
+	
+	if (vp) {
+		vl = vl_get(vp, my_id);
+		vl_print(vl);
+		virt_list_update(vp, &vl, my_id);
+		if (args->flags & F_USE_UUID) 
+			store_domains_by_uuid(h, vl);
+		else
+			store_domains_by_name(h, vl);
+	}
 
 	while (running) {
 		FD_ZERO(&rfds);
@@ -583,19 +594,38 @@
 		tv.tv_sec = 10;
 		tv.tv_usec = 0;
 
+		/* Close the connection */
+		if (vp) {
+			virConnectClose(vp);
+			vp = NULL;
+		}
+		
 		n = select(fd+1, &rfds, NULL, NULL, &tv);
 		if (n < 0)
 			continue;
-		if (n == 0) {
-			virt_list_update(vp, &vl, my_id);
-			vl_print(vl);
-			/* Store information here */
-			if (args->flags & F_USE_UUID) 
-				store_domains_by_uuid(h, vl);
-			else
-				store_domains_by_name(h, vl);
+	
+		/* Request and/or timeout: open connection */
+		vp = virConnectOpen(NULL);
+		if (!vp) {
+			printf("NOTICE: virConnectOpen(): %s; cannot fence!\n",
+			       strerror(errno));
 			continue;
 		}
+			
+		/* Update list of VMs from libvirt. */
+		virt_list_update(vp, &vl, my_id);
+		vl_print(vl);
+		/* Store information here */
+		if (args->flags & F_USE_UUID) 
+			store_domains_by_uuid(h, vl);
+		else
+			store_domains_by_name(h, vl);
+		
+		/* 
+		 * If no requests, we're done 
+		 */
+		if (n == 0)
+			continue;
 
 		slen = sizeof(sin);
 		len = recvfrom(fd, &data, sizeof(data), 0,
@@ -626,11 +656,7 @@
 		}
 
 		printf("Request to fence: %s\n", data.domain);
-
-		/* Do a quick update to make sure we're current */
-		virt_list_update(vp, &vl, my_id);
-		vl_print(vl);
-
+		
 		if (args->flags & F_USE_UUID)
 			dom = vl_find_uuid(vl, (char *)data.domain);
 		else
@@ -659,7 +685,11 @@
 	}
 
 	cman_finish(ch);
-	virConnectClose(vp);
+	
+	if (vp) {
+		virConnectClose(vp);
+		vp = NULL;
+	}
 
 	return 0;
 }
@@ -671,8 +701,9 @@
 	fence_xvm_args_t args;
 	int mc_sock;
 	char key[4096];
-	int key_len = 0;
+	int key_len = 0, x;
 	char *my_options = "dfi:a:p:C:c:k:u?hV";
+	cman_handle_t ch;
 	void *h;
 
 	args_init(&args);
@@ -726,12 +757,33 @@
 		printf("Could not initialize NSS\n");
 		return 1;
 	}
-
-	h = ckpt_init("vm_states", 262144, 4096, 64, 10);
-	if (!h) {
-		printf("Could not initialize Checkpoint\n");
-		return 1;
+	
+	/* Wait for cman to start. */
+	x = 0;
+	while ((ch = cman_init(NULL)) == NULL) {
+		if (!x) {
+			printf("Could not connect to CMAN; retrying...\n");
+			x = 1;
+		}
+		sleep(3);
+	}
+	if (x)
+		printf("Connected to CMAN\n");
+	/* Wait for quorum */
+	while (!cman_is_quorate(ch))
+		sleep(3);
+
+	/* Wait for openais checkpointing to become available */
+	x = 0;
+	while ((h = ckpt_init("vm_states", 262144, 4096, 64, 10)) == NULL) {
+		if (!x) {
+			printf("Could not initialize saCkPt; retrying...\n");
+			x = 1;
+		}
+		sleep(3);
 	}
+	if (x)
+		printf("Checkpoint initialized\n");
 
 	if (args.family == PF_INET)
 		mc_sock = ipv4_recv_sk(args.addr, args.port);
@@ -742,7 +794,7 @@
 		return 1;
 	}
 
-	xvmd_loop(h, mc_sock, &args, key, key_len);
+	xvmd_loop(ch, h, mc_sock, &args, key, key_len);
 
 	return 0;
 }



^ permalink raw reply	[flat|nested] 13+ messages in thread

* [Cluster-devel] cluster/fence/agents/xvm fence_xvmd.c
@ 2007-01-10 20:31 lhh
  0 siblings, 0 replies; 13+ messages in thread
From: lhh @ 2007-01-10 20:31 UTC (permalink / raw)
  To: cluster-devel.redhat.com

CVSROOT:	/cvs/cluster
Module name:	cluster
Branch: 	RHEL50
Changes by:	lhh at sourceware.org	2007-01-10 20:31:55

Modified files:
	fence/agents/xvm: fence_xvmd.c 

Log message:
	Resolves: #221210
	Allows fence_xvm to respond even if the virtual machine has never existed in the cluster.

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/fence/agents/xvm/fence_xvmd.c.diff?cvsroot=cluster&only_with_tag=RHEL50&r1=1.4.4.3&r2=1.4.4.4

--- cluster/fence/agents/xvm/fence_xvmd.c	2006/12/04 17:25:40	1.4.4.3
+++ cluster/fence/agents/xvm/fence_xvmd.c	2007/01/10 20:31:55	1.4.4.4
@@ -409,7 +409,7 @@
 		goto out;
 
 	for (x = 0; x < actual; x++)
-		if (nodes[x].cn_nodeid > high)
+		if (nodes[x].cn_nodeid > high && nodes[x].cn_member)
 			high = nodes[x].cn_nodeid;
 
 	*high_id = high;
@@ -487,19 +487,28 @@
 	uint64_t fence_time;
 	char ret = 1;
 	cman_node_t node;
+	
 
 	if (get_domain_state_ckpt(h, data->domain, &vst) < 0) {
-		printf("XXX I have no record of that domain\n");
-		return;
+		printf("Evaluating Domain: %s   Last Owner/State Unknown\n",
+		       data->domain);
+		memset(&vst, 0, sizeof(vst));
+	} else {
+		printf("Evaluating Domain: %s   Last Owner: %d   State %d\n",
+		       data->domain, vst.s_owner, vst.s_state);
 	}
-
-	printf("Evaluating Domain: %s   Last Owner: %d   State %d\n",
-	       data->domain, vst.s_owner, vst.s_state);
 			
-	if (get_cman_ids(ch, NULL, &high_id) < 0)
+	if (get_cman_ids(ch, NULL, &high_id) < 0) {
+		printf("Error: Could not determine high node ID; unable to "
+		       "process fencing request\n");
 		return;
-
-	if (my_id == high_id && vst.s_owner != my_id) {
+	}
+	
+	if (my_id == high_id && vst.s_owner == 0) {
+		printf("There is no record of that domain; "
+		       "returning success\n");
+		ret = 0;
+	} else if (my_id == high_id && vst.s_owner != my_id) {
 
 		memset(&node, 0, sizeof(node));
 		cman_get_node(ch, vst.s_owner, &node);
@@ -547,7 +556,7 @@
 
 
 int
-xvmd_loop(void *h, int fd, fence_xvm_args_t *args,
+xvmd_loop(cman_handle_t ch, void *h, int fd, fence_xvm_args_t *args,
 	  void *key, size_t key_len)
 {
 	fd_set rfds;
@@ -559,23 +568,25 @@
 	socklen_t slen;
 	fence_req_t data;
 	virConnectPtr vp;
-	virt_list_t *vl;
-	virt_state_t *dom;
-	cman_handle_t ch;
+	virt_list_t *vl = NULL;
+	virt_state_t *dom = NULL;
 
 	vp = virConnectOpen(NULL);
-	if (!vp) {
+	if (!vp)
 		perror("virConnectOpen");
-		return -1;
-	}
-
-	ch = cman_init(NULL);
 
 	get_cman_ids(ch, &my_id, NULL);
 	printf("My Node ID = %d\n", my_id);
-
-	vl = vl_get(vp, my_id);
-	vl_print(vl);
+	
+	if (vp) {
+		vl = vl_get(vp, my_id);
+		vl_print(vl);
+		virt_list_update(vp, &vl, my_id);
+		if (args->flags & F_USE_UUID) 
+			store_domains_by_uuid(h, vl);
+		else
+			store_domains_by_name(h, vl);
+	}
 
 	while (running) {
 		FD_ZERO(&rfds);
@@ -583,19 +594,38 @@
 		tv.tv_sec = 10;
 		tv.tv_usec = 0;
 
+		/* Close the connection */
+		if (vp) {
+			virConnectClose(vp);
+			vp = NULL;
+		}
+		
 		n = select(fd+1, &rfds, NULL, NULL, &tv);
 		if (n < 0)
 			continue;
-		if (n == 0) {
-			virt_list_update(vp, &vl, my_id);
-			vl_print(vl);
-			/* Store information here */
-			if (args->flags & F_USE_UUID) 
-				store_domains_by_uuid(h, vl);
-			else
-				store_domains_by_name(h, vl);
+	
+		/* Request and/or timeout: open connection */
+		vp = virConnectOpen(NULL);
+		if (!vp) {
+			printf("NOTICE: virConnectOpen(): %s; cannot fence!\n",
+			       strerror(errno));
 			continue;
 		}
+			
+		/* Update list of VMs from libvirt. */
+		virt_list_update(vp, &vl, my_id);
+		vl_print(vl);
+		/* Store information here */
+		if (args->flags & F_USE_UUID) 
+			store_domains_by_uuid(h, vl);
+		else
+			store_domains_by_name(h, vl);
+		
+		/* 
+		 * If no requests, we're done 
+		 */
+		if (n == 0)
+			continue;
 
 		slen = sizeof(sin);
 		len = recvfrom(fd, &data, sizeof(data), 0,
@@ -626,11 +656,7 @@
 		}
 
 		printf("Request to fence: %s\n", data.domain);
-
-		/* Do a quick update to make sure we're current */
-		virt_list_update(vp, &vl, my_id);
-		vl_print(vl);
-
+		
 		if (args->flags & F_USE_UUID)
 			dom = vl_find_uuid(vl, (char *)data.domain);
 		else
@@ -659,7 +685,11 @@
 	}
 
 	cman_finish(ch);
-	virConnectClose(vp);
+	
+	if (vp) {
+		virConnectClose(vp);
+		vp = NULL;
+	}
 
 	return 0;
 }
@@ -671,8 +701,9 @@
 	fence_xvm_args_t args;
 	int mc_sock;
 	char key[4096];
-	int key_len = 0;
+	int key_len = 0, x;
 	char *my_options = "dfi:a:p:C:c:k:u?hV";
+	cman_handle_t ch;
 	void *h;
 
 	args_init(&args);
@@ -726,12 +757,33 @@
 		printf("Could not initialize NSS\n");
 		return 1;
 	}
-
-	h = ckpt_init("vm_states", 262144, 4096, 64, 10);
-	if (!h) {
-		printf("Could not initialize Checkpoint\n");
-		return 1;
+	
+	/* Wait for cman to start. */
+	x = 0;
+	while ((ch = cman_init(NULL)) == NULL) {
+		if (!x) {
+			printf("Could not connect to CMAN; retrying...\n");
+			x = 1;
+		}
+		sleep(3);
+	}
+	if (x)
+		printf("Connected to CMAN\n");
+	/* Wait for quorum */
+	while (!cman_is_quorate(ch))
+		sleep(3);
+
+	/* Wait for openais checkpointing to become available */
+	x = 0;
+	while ((h = ckpt_init("vm_states", 262144, 4096, 64, 10)) == NULL) {
+		if (!x) {
+			printf("Could not initialize saCkPt; retrying...\n");
+			x = 1;
+		}
+		sleep(3);
 	}
+	if (x)
+		printf("Checkpoint initialized\n");
 
 	if (args.family == PF_INET)
 		mc_sock = ipv4_recv_sk(args.addr, args.port);
@@ -742,7 +794,7 @@
 		return 1;
 	}
 
-	xvmd_loop(h, mc_sock, &args, key, key_len);
+	xvmd_loop(ch, h, mc_sock, &args, key, key_len);
 
 	return 0;
 }



^ permalink raw reply	[flat|nested] 13+ messages in thread

* [Cluster-devel] cluster/fence/agents/xvm fence_xvmd.c
@ 2007-09-11 13:44 pcaulfield
  0 siblings, 0 replies; 13+ messages in thread
From: pcaulfield @ 2007-09-11 13:44 UTC (permalink / raw)
  To: cluster-devel.redhat.com

CVSROOT:	/cvs/cluster
Module name:	cluster
Changes by:	pcaulfield at sourceware.org	2007-09-11 13:44:49

Modified files:
	fence/agents/xvm: fence_xvmd.c 

Log message:
	Fix compile with -O2 -Werror

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/fence/agents/xvm/fence_xvmd.c.diff?cvsroot=cluster&r1=1.10&r2=1.11

--- cluster/fence/agents/xvm/fence_xvmd.c	2007/08/22 08:58:41	1.10
+++ cluster/fence/agents/xvm/fence_xvmd.c	2007/09/11 13:44:49	1.11
@@ -220,7 +220,7 @@
 do_fence_request_tcp(fence_req_t *req, fence_auth_type_t auth,
 		     void *key, size_t key_len, virConnectPtr vp)
 {
-	int fd, ret = -1;
+	int fd = -1, ret = -1;
 	virDomainPtr vdp;
 	char response = 1;
 	char *domain_desc, *domain_desc_sanitized;
@@ -678,7 +678,7 @@
 	int key_len = 0, x;
 	char *my_options = "dfi:a:p:C:c:k:u?hLXV";
 	cman_handle_t ch = NULL;
-	void *h;
+	void *h = NULL;
 
 	args_init(&args);
 	args_get_getopt(argc, argv, my_options, &args);



^ permalink raw reply	[flat|nested] 13+ messages in thread

* [Cluster-devel] cluster/fence/agents/xvm fence_xvmd.c
@ 2007-10-17 18:21 lhh
  0 siblings, 0 replies; 13+ messages in thread
From: lhh @ 2007-10-17 18:21 UTC (permalink / raw)
  To: cluster-devel.redhat.com

CVSROOT:	/cvs/cluster
Module name:	cluster
Branch: 	RHEL5
Changes by:	lhh at sourceware.org	2007-10-17 18:21:29

Modified files:
	fence/agents/xvm: fence_xvmd.c 

Log message:
	Make fence_xvmd read options from ccs like it should

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/fence/agents/xvm/fence_xvmd.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.4.2.6&r2=1.4.2.7

--- cluster/fence/agents/xvm/fence_xvmd.c	2007/10/10 16:14:15	1.4.2.6
+++ cluster/fence/agents/xvm/fence_xvmd.c	2007/10/17 18:21:29	1.4.2.7
@@ -688,6 +688,11 @@
 
 	args_init(&args);
 	args_get_getopt(argc, argv, my_options, &args);
+
+	if (!(args.flags & F_NOCCS)) {
+		args_get_ccs(my_options, &args);
+	}
+
 	args_finalize(&args);
 	if (args.debug > 0) {
 		dset(args.debug);



^ permalink raw reply	[flat|nested] 13+ messages in thread

* [Cluster-devel] cluster/fence/agents/xvm fence_xvmd.c
@ 2007-10-17 18:29 lhh
  0 siblings, 0 replies; 13+ messages in thread
From: lhh @ 2007-10-17 18:29 UTC (permalink / raw)
  To: cluster-devel.redhat.com

CVSROOT:	/cvs/cluster
Module name:	cluster
Changes by:	lhh at sourceware.org	2007-10-17 18:29:57

Modified files:
	fence/agents/xvm: fence_xvmd.c 

Log message:
	Make fence_xvmd read options from ccs like it should

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/fence/agents/xvm/fence_xvmd.c.diff?cvsroot=cluster&r1=1.12&r2=1.13

--- cluster/fence/agents/xvm/fence_xvmd.c	2007/10/17 18:27:27	1.12
+++ cluster/fence/agents/xvm/fence_xvmd.c	2007/10/17 18:29:57	1.13
@@ -693,6 +693,11 @@
 
 	args_init(&args);
 	args_get_getopt(argc, argv, my_options, &args);
+
+	if (!(args.flags & F_NOCCS)) {
+		args_get_ccs(my_options, &args);
+	}
+
 	args_finalize(&args);
 	if (args.debug > 0) {
 		dset(args.debug);



^ permalink raw reply	[flat|nested] 13+ messages in thread

* [Cluster-devel] cluster/fence/agents/xvm fence_xvmd.c
@ 2007-11-19 17:28 lhh
  0 siblings, 0 replies; 13+ messages in thread
From: lhh @ 2007-11-19 17:28 UTC (permalink / raw)
  To: cluster-devel.redhat.com

CVSROOT:	/cvs/cluster
Module name:	cluster
Branch: 	RHEL5
Changes by:	lhh at sourceware.org	2007-11-19 17:28:33

Modified files:
	fence/agents/xvm: fence_xvmd.c 

Log message:
	Ancillary NOCLUSTER mode fixes for fence_xvmd

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/fence/agents/xvm/fence_xvmd.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.4.2.9&r2=1.4.2.10

--- cluster/fence/agents/xvm/fence_xvmd.c	2007/11/19 17:03:27	1.4.2.9
+++ cluster/fence/agents/xvm/fence_xvmd.c	2007/11/19 17:28:33	1.4.2.10
@@ -224,6 +224,7 @@
 {
 	int fd = -1, ret = -1;
 	virDomainPtr vdp;
+	virDomainInfo vdi;
 	char response = 1;
 	char *domain_desc, *domain_desc_sanitized;
 	size_t sz;
@@ -247,13 +248,18 @@
 		break;
 	case FENCE_OFF:
 		printf("Destroying domain %s...\n", (char *)req->domain);
-		if (!vdp && (flags & F_NOCLUSTER)) {
-			dbg_printf(2, "[OFF + NOCLUSTER] Nothing to do - "
-				   "domain does not exist\n");
-			response = 0;
-			break;
+		if (flags & F_NOCLUSTER) {
+			if (!vdp ||
+			    ((virDomainGetInfo(vdp, &vdi) == 0) &&
+			     (vdi.state == VIR_DOMAIN_SHUTOFF))) {
+				dbg_printf(2, "[NOCLUSTER] Nothing to "
+					   "do - domain does not exist\n");
+				response = 0;
+				break;
+			}
 		}
 
+
 		dbg_printf(2, "[OFF] Calling virDomainDestroy\n");
 		ret = virDomainDestroy(vdp);
 		if (ret < 0) {
@@ -271,11 +277,15 @@
 		printf("Rebooting domain %s...\n",
 		       (char *)req->domain);
 
-		if (!vdp && (flags & F_NOCLUSTER)) {
-			dbg_printf(2, "[REBOOT + NOCLUSTER] Nothing to do - "
-				   "domain does not exist\n");
-			response = 0;
-			break;
+		if (flags & F_NOCLUSTER) {
+			if (!vdp ||
+			    ((virDomainGetInfo(vdp, &vdi) == 0) &&
+			     (vdi.state == VIR_DOMAIN_SHUTOFF))) {
+				dbg_printf(2, "[NOCLUSTER] Nothing to "
+					   "do - domain does not exist\n");
+				response = 0;
+				break;
+			}
 		}
 
 		domain_desc = virDomainGetXMLDesc(vdp, 0);
@@ -320,7 +330,7 @@
 		}
 		break;
 	}
-	
+
 	dbg_printf(3, "Sending response to caller...\n");
 	if (write(fd, &response, 1) < 0) {
 		perror("write");



^ permalink raw reply	[flat|nested] 13+ messages in thread

* [Cluster-devel] cluster/fence/agents/xvm fence_xvmd.c
@ 2007-12-14 14:49 fabbione
  0 siblings, 0 replies; 13+ messages in thread
From: fabbione @ 2007-12-14 14:49 UTC (permalink / raw)
  To: cluster-devel.redhat.com

CVSROOT:	/cvs/cluster
Module name:	cluster
Changes by:	fabbione at sourceware.org	2007-12-14 14:49:38

Modified files:
	fence/agents/xvm: fence_xvmd.c 

Log message:
	Make sure we invoke virConnectOpen with a proper URI. NULL is deprecated
	in libvirt and we have no control over distro defaults that might not be
	xen:///.
	
	Patch by Soren Hansen <soren@ubuntu.com>

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/fence/agents/xvm/fence_xvmd.c.diff?cvsroot=cluster&r1=1.13&r2=1.14

--- cluster/fence/agents/xvm/fence_xvmd.c	2007/10/17 18:29:57	1.13
+++ cluster/fence/agents/xvm/fence_xvmd.c	2007/12/14 14:49:34	1.14
@@ -54,6 +54,8 @@
 #include "libcman.h"
 #include "debug.h"
 
+#define LIBVIRT_XEN_URI "xen:///"
+
 static int running = 1;
 
 
@@ -541,7 +543,7 @@
 	virt_list_t *vl = NULL;
 	virt_state_t *dom = NULL;
 
-	vp = virConnectOpen(NULL);
+	vp = virConnectOpen(LIBVIRT_XEN_URI);
 	if (!vp)
 		perror("virConnectOpen");
 
@@ -577,7 +579,7 @@
 			continue;
 	
 		/* Request and/or timeout: open connection */
-		vp = virConnectOpen(NULL);
+		vp = virConnectOpen(LIBVIRT_XEN_URI);
 		if (!vp) {
 			printf("NOTICE: virConnectOpen(): %s; cannot fence!\n",
 			       strerror(errno));



^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2007-12-14 14:49 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-09-11 13:44 [Cluster-devel] cluster/fence/agents/xvm fence_xvmd.c pcaulfield
  -- strict thread matches above, loose matches on Subject: below --
2007-12-14 14:49 fabbione
2007-11-19 17:28 lhh
2007-10-17 18:29 lhh
2007-10-17 18:21 lhh
2007-01-10 20:31 lhh
2007-01-10 20:30 lhh
2007-01-10 20:25 lhh
2006-12-04 17:26 lhh
2006-12-04 17:26 lhh
2006-12-04 17:25 lhh
2006-12-01 22:14 lhh
2006-12-01 22:13 lhh

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).