summaryrefslogtreecommitdiffstats
path: root/sbin/hastd
diff options
context:
space:
mode:
authorpjd <pjd@FreeBSD.org>2010-08-30 00:12:10 +0000
committerpjd <pjd@FreeBSD.org>2010-08-30 00:12:10 +0000
commit235764220432099ce51504a72f54b0824730c31f (patch)
treebee78f72c5d543540f8de0cfe1068e19da62a754 /sbin/hastd
parent72d737839c3aa02188ab19a720b6958f35b62ee8 (diff)
downloadFreeBSD-src-235764220432099ce51504a72f54b0824730c31f.zip
FreeBSD-src-235764220432099ce51504a72f54b0824730c31f.tar.gz
Execute hook when split-brain is detected.
MFC after: 2 weeks Obtained from: Wheel Systems Sp. z o.o. http://www.wheelsystems.com
Diffstat (limited to 'sbin/hastd')
-rw-r--r--sbin/hastd/hast.conf.55
-rw-r--r--sbin/hastd/primary.c3
-rw-r--r--sbin/hastd/secondary.c2
3 files changed, 10 insertions, 0 deletions
diff --git a/sbin/hastd/hast.conf.5 b/sbin/hastd/hast.conf.5
index 0707115..f12768e 100644
--- a/sbin/hastd/hast.conf.5
+++ b/sbin/hastd/hast.conf.5
@@ -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
diff --git a/sbin/hastd/primary.c b/sbin/hastd/primary.c
index 088a272..73155a1 100644
--- a/sbin/hastd/primary.c
+++ b/sbin/hastd/primary.c
@@ -498,6 +498,7 @@ init_remote(struct hast_resource *res, struct proto_conn **inp,
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, struct proto_conn **inp,
}
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);
diff --git a/sbin/hastd/secondary.c b/sbin/hastd/secondary.c
index 6051722..d92030c 100644
--- a/sbin/hastd/secondary.c
+++ b/sbin/hastd/secondary.c
@@ -323,6 +323,7 @@ init_remote(struct hast_resource *res, struct nv *nvin)
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 *res, struct nv *nvin)
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();
OpenPOWER on IntegriCloud