public inbox for cluster-cvs@sourceware.org
help / color / mirror / Atom feed
* master - gfs_controld: ignore uevents after first_done
@ 2008-09-19 21:21 David Teigland
  0 siblings, 0 replies; only message in thread
From: David Teigland @ 2008-09-19 21:21 UTC (permalink / raw)
  To: cluster-cvs-relay

Gitweb:        http://git.fedorahosted.org/git/cluster.git?p=cluster.git;a=commitdiff;h=0a27fa730d25f54249ac97f3b37a609487bdb771
Commit:        0a27fa730d25f54249ac97f3b37a609487bdb771
Parent:        065450de376976c1de65f9ac1520b06fe89a5f19
Author:        David Teigland <teigland@redhat.com>
AuthorDate:    Fri Sep 19 13:51:02 2008 -0500
Committer:     David Teigland <teigland@redhat.com>
CommitterDate: Fri Sep 19 13:51:02 2008 -0500

gfs_controld: ignore uevents after first_done

Ignore extraneous uevents after we see first_done; it's cleaner that way.
Munging more debug messages to improve reading/debugging.

Signed-off-by: David Teigland <teigland@redhat.com>
---
 group/gfs_controld/cpg-new.c    |   34 ++++++++++++++++++----------------
 group/gfs_controld/gfs_daemon.h |    1 +
 group/gfs_controld/main.c       |    2 +-
 3 files changed, 20 insertions(+), 17 deletions(-)

diff --git a/group/gfs_controld/cpg-new.c b/group/gfs_controld/cpg-new.c
index a2ffa5f..2352682 100644
--- a/group/gfs_controld/cpg-new.c
+++ b/group/gfs_controld/cpg-new.c
@@ -2059,19 +2059,19 @@ void process_recovery_uevent(char *table)
 
 	mg = find_mg(name);
 	if (!mg) {
-		log_error("process_recovery_uevent mg not found %s", table);
+		log_error("recovery_uevent mg not found %s", table);
 		return;
 	}
 
 	rv = read_sysfs_int(mg, "recover_done", &jid);
 	if (rv < 0) {
-		log_error("process_recovery_uevent recover_done read %d", rv);
+		log_error("recovery_uevent recover_done read %d", rv);
 		return;
 	}
 
 	rv = read_sysfs_int(mg, "recover_status", &recover_status);
 	if (rv < 0) {
-		log_error("process_recovery_uevent recover_status read %d", rv);
+		log_error("recovery_uevent recover_status read %d", rv);
 		return;
 	}
 
@@ -2080,29 +2080,28 @@ void process_recovery_uevent(char *table)
 			/* This will happen in two known situations:
 			   - we get a recovery_done uevent for our own journal
 			     when we mount  (jid == mg->our_jid)
-			   - the first mounter will read first_done and clear
+			   - the first mounter can read first_done and clear
 			     first_recovery_needed before seeing the change
 			     uevent from others_may_mount */
-			log_group(mg, "process_recovery_uevent jid %d ignore",
-				  jid);
+			log_group(mg, "recovery_uevent jid %d ignore", jid);
 			return;
 		}
 
 		mg->local_recovery_busy = 0;
 
 		if (mg->local_recovery_jid != jid) {
-			log_error("process_recovery_uevent jid %d exp %d",
-				  jid, mg->local_recovery_jid);
+			log_error("recovery_uevent jid %d expected %d", jid,
+				  mg->local_recovery_jid);
 			return;
 		}
 
 		j = find_journal(mg, jid);
 		if (!j) {
-			log_error("process_recovery_uevent no journal %d", jid);
+			log_error("recovery_uevent no journal %d", jid);
 			return;
 		}
 
-		log_group(mg, "process_recovery_uevent jid %d status %d "
+		log_group(mg, "recovery_uevent jid %d status %d "
 			  "local_recovery_done %d needs_recovery %d",
 			  jid, recover_status, j->local_recovery_done,
 			  j->needs_recovery);
@@ -2118,7 +2117,6 @@ void process_recovery_uevent(char *table)
 		if (j->needs_recovery)
 			send_recovery_result(mg, jid, recover_status);
 	} else {
-
 		/*
 		 * Assumption here is that only the first mounter will get
 		 * uevents when first_recovery_needed is set.
@@ -2128,18 +2126,22 @@ void process_recovery_uevent(char *table)
 		   to check below that we've seen uevents for all jids
 		   during first recovery before sending first_recovery_done. */
 
-		log_group(mg, "process_recovery_uevent jid %d status %d "
-			  "ignore during first_recovery", jid, recover_status);
+		log_group(mg, "recovery_uevent jid %d first recovery done %d",
+			  jid, mg->first_done_uevent);
+
+		/* ignore extraneous uevent from others_may_mount */
+		if (mg->first_done_uevent)
+			return;
 
 		rv = read_sysfs_int(mg, "first_done", &first_done);
 		if (rv < 0) {
-			log_error("process_recovery_uevent first_done read %d",
-				  rv);
+			log_error("recovery_uevent first_done read %d", rv);
 			return;
 		}
 
 		if (first_done) {
-			log_group(mg, "process_recovery_uevent first_done");
+			log_group(mg, "recovery_uevent first_done");
+			mg->first_done_uevent = 1;
 			send_first_recovery_done(mg);
 		}
 	}
diff --git a/group/gfs_controld/gfs_daemon.h b/group/gfs_controld/gfs_daemon.h
index 7f514ce..e022ccc 100644
--- a/group/gfs_controld/gfs_daemon.h
+++ b/group/gfs_controld/gfs_daemon.h
@@ -161,6 +161,7 @@ struct mountgroup {
 	struct list_head        node_history;
 	struct list_head	journals;
 	int			dlm_notify_nodeid;
+	int			first_done_uevent;
 	int			first_recovery_needed;
 	int			first_recovery_master;
 	int			first_recovery_msg;
diff --git a/group/gfs_controld/main.c b/group/gfs_controld/main.c
index 6f12262..f328a07 100644
--- a/group/gfs_controld/main.c
+++ b/group/gfs_controld/main.c
@@ -600,7 +600,7 @@ void client_reply_join_full(struct mountgroup *mg, int result)
 	if (nodir_str[0])
 		strcat(mg->mount_args.hostdata, nodir_str);
  out:
-	log_group(mg, "client_reply_join_full ci %d result %d hostdata %s",
+	log_group(mg, "client_reply_join_full ci %d result %d %s",
 		  mg->mount_client, result, mg->mount_args.hostdata);
 
 	client_reply_join(mg->mount_client, &mg->mount_args, result);


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2008-09-19 19:06 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2008-09-19 21:21 master - gfs_controld: ignore uevents after first_done David Teigland

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 read-only IMAP folder(s) and NNTP newsgroup(s).