svn commit: r211983 - head/sbin/hastd

Pawel Jakub Dawidek pjd at FreeBSD.org
Mon Aug 30 00:12:11 UTC 2010


Author: pjd
Date: Mon Aug 30 00:12:10 2010
New Revision: 211983
URL: http://svn.freebsd.org/changeset/base/211983

Log:
  Execute hook when split-brain is detected.
  
  MFC after:	2 weeks
  Obtained from:	Wheel Systems Sp. z o.o. http://www.wheelsystems.com

Modified:
  head/sbin/hastd/hast.conf.5
  head/sbin/hastd/primary.c
  head/sbin/hastd/secondary.c

Modified: head/sbin/hastd/hast.conf.5
==============================================================================
--- head/sbin/hastd/hast.conf.5	Mon Aug 30 00:06:05 2010	(r211982)
+++ head/sbin/hastd/hast.conf.5	Mon Aug 30 00:12:10 2010	(r211983)
@@ -232,6 +232,11 @@ between the nodes.
 .Pp
 Executed on both primary and secondary nodes when resource role is changed.
 .Pp
+.It Ic "<path> split-brain <resource>"
+.Pp
+Executed on both primary and secondary nodes when split-brain condition is
+detected.
+.Pp
 .El
 The
 .Aq path

Modified: head/sbin/hastd/primary.c
==============================================================================
--- head/sbin/hastd/primary.c	Mon Aug 30 00:06:05 2010	(r211982)
+++ head/sbin/hastd/primary.c	Mon Aug 30 00:12:10 2010	(r211983)
@@ -498,6 +498,7 @@ init_remote(struct hast_resource *res, s
 	assert(real_remote(res));
 
 	in = out = NULL;
+	errmsg = NULL;
 
 	/* Prepare outgoing connection with remote node. */
 	if (proto_client(res->hr_remoteaddr, &out) < 0) {
@@ -673,6 +674,8 @@ init_remote(struct hast_resource *res, s
 	}
 	return (true);
 close:
+	if (errmsg != NULL && strcmp(errmsg, "Split-brain condition!") == 0)
+		hook_exec(res->hr_exec, "split-brain", res->hr_name, NULL);
 	proto_close(out);
 	if (in != NULL)
 		proto_close(in);

Modified: head/sbin/hastd/secondary.c
==============================================================================
--- head/sbin/hastd/secondary.c	Mon Aug 30 00:06:05 2010	(r211982)
+++ head/sbin/hastd/secondary.c	Mon Aug 30 00:12:10 2010	(r211983)
@@ -323,6 +323,7 @@ init_remote(struct hast_resource *res, s
 	if (res->hr_secondary_localcnt > res->hr_primary_remotecnt &&
 	     res->hr_primary_localcnt > res->hr_secondary_remotecnt) {
 		/* Exit on split-brain. */
+		hook_exec(res->hr_exec, "split-brain", res->hr_name, NULL);
 		exit(EX_CONFIG);
 	}
 }
@@ -373,6 +374,7 @@ hastd_secondary(struct hast_resource *re
 	if (proto_timeout(res->hr_remoteout, res->hr_timeout) < 0)
 		pjdlog_errno(LOG_WARNING, "Unable to set connection timeout");
 
+	hook_init();
 	init_local(res);
 	init_remote(res, nvin);
 	init_environment();


More information about the svn-src-all mailing list