Execute hook when split-brain is detected.

MFC after:	2 weeks
Obtained from:	Wheel Systems Sp. z o.o. http://www.wheelsystems.com
This commit is contained in:
Pawel Jakub Dawidek 2010-08-30 00:12:10 +00:00
parent 6d0c801ea9
commit 2be8fd75ff
3 changed files with 10 additions and 0 deletions

View File

@ -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

View File

@ -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);

View File

@ -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();