summaryrefslogtreecommitdiffstats
path: root/ctdb
diff options
context:
space:
mode:
authorMartin Schwenke <martin@meltin.net>2014-12-09 13:50:22 +1100
committerAmitay Isaacs <amitay@samba.org>2015-02-13 07:19:07 +0100
commit72701be663ddb265320a022a22130a3437bbf6bc (patch)
tree5264494ec2b8dce163d428bee241583c40caf9a0 /ctdb
parent4d3b52f1cec46f66f8d0827bc8f458cd8c86b5a5 (diff)
downloadsamba-72701be663ddb265320a022a22130a3437bbf6bc.tar.gz
samba-72701be663ddb265320a022a22130a3437bbf6bc.tar.xz
samba-72701be663ddb265320a022a22130a3437bbf6bc.zip
ctdb-recoverd: New function ctdb_recovery_have_lock()
True if this recovery daemon holds the lock. Signed-off-by: Martin Schwenke <martin@meltin.net> Reviewed-by: Amitay Isaacs <amitay@gmail.com>
Diffstat (limited to 'ctdb')
-rw-r--r--ctdb/include/ctdb_private.h1
-rw-r--r--ctdb/server/ctdb_recover.c5
-rw-r--r--ctdb/server/ctdb_recoverd.c4
3 files changed, 8 insertions, 2 deletions
diff --git a/ctdb/include/ctdb_private.h b/ctdb/include/ctdb_private.h
index 3d6f487ff5..03130d6602 100644
--- a/ctdb/include/ctdb_private.h
+++ b/ctdb/include/ctdb_private.h
@@ -1259,6 +1259,7 @@ void ctdb_release_all_ips(struct ctdb_context *ctdb);
void set_nonblocking(int fd);
void set_close_on_exec(int fd);
+bool ctdb_recovery_have_lock(struct ctdb_context *ctdb);
bool ctdb_recovery_lock(struct ctdb_context *ctdb, bool keep);
int ctdb_set_recovery_lock_file(struct ctdb_context *ctdb, const char *file);
diff --git a/ctdb/server/ctdb_recover.c b/ctdb/server/ctdb_recover.c
index cd77418728..1f1e50aa29 100644
--- a/ctdb/server/ctdb_recover.c
+++ b/ctdb/server/ctdb_recover.c
@@ -721,6 +721,11 @@ int32_t ctdb_control_set_recmode(struct ctdb_context *ctdb,
}
+bool ctdb_recovery_have_lock(struct ctdb_context *ctdb)
+{
+ return ctdb->recovery_lock_fd != -1;
+}
+
/*
try and get the recovery lock in shared storage - should only work
on the recovery master recovery daemon. Anywhere else is a bug
diff --git a/ctdb/server/ctdb_recoverd.c b/ctdb/server/ctdb_recoverd.c
index 6ea381dbc6..3d7c43240a 100644
--- a/ctdb/server/ctdb_recoverd.c
+++ b/ctdb/server/ctdb_recoverd.c
@@ -2679,7 +2679,7 @@ static void election_handler(struct ctdb_context *ctdb, uint64_t srvid,
/*unban_all_nodes(ctdb);*/
return;
}
-
+
/* we didn't win */
talloc_free(rec->send_election_te);
rec->send_election_te = NULL;
@@ -2687,7 +2687,7 @@ static void election_handler(struct ctdb_context *ctdb, uint64_t srvid,
if (ctdb->recovery_lock_file != NULL) {
/* Release the recovery lock file */
if (em->pnn != ctdb->pnn &&
- ctdb->recovery_lock_fd != -1) {
+ ctdb_recovery_have_lock(ctdb)) {
DEBUG(DEBUG_NOTICE, ("Release the recovery lock\n"));
close(ctdb->recovery_lock_fd);
ctdb->recovery_lock_fd = -1;