master - fenced: finishing off query stuff

David Teigland teigland@fedoraproject.org
Fri Aug 8 21:57:00 GMT 2008


Gitweb:        http://git.fedorahosted.org/git/cluster.git?p=cluster.git;a=commitdiff;h=3b1db64b020d50d9bc76b21e14aef52125613914
Commit:        3b1db64b020d50d9bc76b21e14aef52125613914
Parent:        0f4625a4c35e2c3185bbd9901af8b85b2d83efff
Author:        David Teigland <teigland@redhat.com>
AuthorDate:    Fri Aug 8 14:30:57 2008 -0500
Committer:     David Teigland <teigland@redhat.com>
CommitterDate: Fri Aug 8 16:46:55 2008 -0500

fenced: finishing off query stuff

various loose ends

Signed-off-by: David Teigland <teigland@redhat.com>
---
 fence/fenced/cpg.c          |    3 +++
 fence/fenced/fd.h           |    1 +
 fence/fenced/group.c        |    7 +++++--
 fence/fenced/main.c         |    3 +++
 fence/fenced/recover.c      |    5 +++++
 fence/libfenced/libfenced.h |    1 +
 6 files changed, 18 insertions(+), 2 deletions(-)

diff --git a/fence/fenced/cpg.c b/fence/fenced/cpg.c
index 9cd265a..1a0ff17 100644
--- a/fence/fenced/cpg.c
+++ b/fence/fenced/cpg.c
@@ -1383,6 +1383,7 @@ int set_domain_info(struct fd *fd, struct fenced_domain *domain)
 	}
 	domain->master_nodeid = fd->master;
 	domain->victim_count = list_count(&fd->victims);
+	domain->current_victim = fd->current_victim;
 
 	return 0;
 }
@@ -1404,6 +1405,7 @@ int set_domain_nodes(struct fd *fd, int option, int *node_count,
 		nodes = malloc(count * sizeof(struct fenced_node));
 		if (!nodes)
 			return -ENOMEM;
+		memset(nodes, 0, sizeof(*nodes));
 
 		n = nodes;
 		list_for_each_entry(memb, &cg->members, list)
@@ -1417,6 +1419,7 @@ int set_domain_nodes(struct fd *fd, int option, int *node_count,
 		nodes = malloc(count * sizeof(struct fenced_node));
 		if (!nodes)
 			return -ENOMEM;
+		memset(nodes, 0, sizeof(*nodes));
 
 		n = nodes;
 		list_for_each_entry(nh, &fd->node_history, list)
diff --git a/fence/fenced/fd.h b/fence/fenced/fd.h
index 2f54143..161d8f0 100644
--- a/fence/fenced/fd.h
+++ b/fence/fenced/fd.h
@@ -177,6 +177,7 @@ struct fd {
 	int			master;
 	int			joining_group;
 	int			leaving_group;
+	int			current_victim; /* for queries */
 	struct list_head 	victims;
 	struct list_head	complete;
 
diff --git a/fence/fenced/group.c b/fence/fenced/group.c
index 3217518..4ba891c 100644
--- a/fence/fenced/group.c
+++ b/fence/fenced/group.c
@@ -404,7 +404,8 @@ int set_node_info_group(struct fd *fd, int nodeid, struct fenced_node *nodeinfo)
 	nodeinfo->victim = is_victim(fd, nodeid);
 	nodeinfo->member = id_in_nodeids(nodeid, cb_member_count, cb_members);
 
-	/* FIXME: need to keep track of last fence info for nodes */
+	/* FIXME: we don't keep track of last_fenced_* in this libgroup code,
+	   maybe just leave it out */
 
 	return 0;
 }
@@ -415,6 +416,7 @@ int set_domain_info_group(struct fd *fd, struct fenced_domain *domain)
 	domain->victim_count = list_count(&fd->victims);
 	domain->member_count = cb_member_count;
 	domain->state = cb_action;
+	domain->current_victim = fd->current_victim;
 	return 0;
 }
 
@@ -430,10 +432,11 @@ int set_domain_nodes_group(struct fd *fd, int option, int *node_count,
 	nodes = malloc(cb_member_count * sizeof(struct fenced_node));
 	if (!nodes)
 		return -ENOMEM;
+	memset(nodes, 0, sizeof(*nodes));
 
 	nodep = nodes;
 	for (i = 0; i < cb_member_count; i++) {
-		set_node_info(fd, cb_members[i], nodep++);
+		set_node_info_group(fd, cb_members[i], nodep++);
 	}
  out:
 	*node_count = cb_member_count;
diff --git a/fence/fenced/main.c b/fence/fenced/main.c
index 6bfbb0e..bc6ee11 100644
--- a/fence/fenced/main.c
+++ b/fence/fenced/main.c
@@ -353,6 +353,9 @@ static void query_domain_info(int f)
 		goto out;
 	}
 
+	memset(&domain, 0, sizeof(domain));
+	domain.group_mode = group_mode;
+
 	if (group_mode == GROUP_LIBGROUP)
 		rv = set_domain_info_group(fd, &domain);
 	else
diff --git a/fence/fenced/recover.c b/fence/fenced/recover.c
index 5b46f36..d70a876 100644
--- a/fence/fenced/recover.c
+++ b/fence/fenced/recover.c
@@ -259,10 +259,15 @@ void fence_victims(struct fd *fd)
 
 		log_level(LOG_INFO, "fencing node \"%s\"", node->name);
 
+		/* for queries */
+		fd->current_victim = node->nodeid;
+
 		query_unlock();
 		error = fence_node(node->name);
 		query_lock();
 
+		fd->current_victim = 0;
+
 		log_level(LOG_INFO, "fence \"%s\" %s", node->name,
 			  error ? "failed" : "success");
 
diff --git a/fence/libfenced/libfenced.h b/fence/libfenced/libfenced.h
index 30ea210..b869136 100644
--- a/fence/libfenced/libfenced.h
+++ b/fence/libfenced/libfenced.h
@@ -16,6 +16,7 @@ struct fenced_node {
 };
 
 struct fenced_domain {
+	int group_mode;
 	int member_count;
 	int victim_count;
 	int master_nodeid;



More information about the Cluster-cvs mailing list