1
0
mirror of https://github.com/samba-team/samba.git synced 2025-02-15 05:57:49 +03:00

ctdb-daemon: Invalidate records if a node becomes INACTIVE

BUG: https://bugzilla.samba.org/show_bug.cgi?id=13641

Signed-off-by: Amitay Isaacs <amitay@gmail.com>
Reviewed-by: Martin Schwenke <martin@meltin.net>
(cherry picked from commit c4ec99b1d3f1c5bff83bf66e3fd64d45a8be7441)
This commit is contained in:
Amitay Isaacs 2018-02-14 14:19:44 +11:00 committed by Karolin Seeger
parent ffc84e1c9a
commit 4b7d81955a

View File

@ -140,6 +140,9 @@ static int ctdb_db_freeze_handle_destructor(struct ctdb_db_freeze_handle *h)
ctdb_db->freeze_mode = CTDB_FREEZE_NONE;
ctdb_db->freeze_handle = NULL;
/* Clear invalid records flag */
ctdb_db->invalid_records = false;
talloc_free(h->lreq);
return 0;
}
@ -393,6 +396,19 @@ static int db_freeze_waiter_destructor(struct ctdb_db_freeze_waiter *w)
return 0;
}
/**
* Invalidate the records in the database.
* This only applies to volatile databases.
*/
static int db_invalidate(struct ctdb_db_context *ctdb_db, void *private_data)
{
if (ctdb_db_volatile(ctdb_db)) {
ctdb_db->invalid_records = true;
}
return 0;
}
/**
* Count the number of databases
*/
@ -436,13 +452,17 @@ static int db_freeze(struct ctdb_db_context *ctdb_db, void *private_data)
}
/*
start the freeze process for a certain priority
start the freeze process for all databases
This is only called from ctdb_control_freeze(), which is called
only on node becoming INACTIVE. So mark the records invalid.
*/
static void ctdb_start_freeze(struct ctdb_context *ctdb)
{
struct ctdb_freeze_handle *h;
int ret;
ctdb_db_iterator(ctdb, db_invalidate, NULL);
if (ctdb->freeze_mode == CTDB_FREEZE_FROZEN) {
int count = 0;
@ -534,6 +554,8 @@ static int ctdb_freeze_waiter_destructor(struct ctdb_freeze_waiter *w)
/*
freeze all the databases
This control is only used when freezing database on node becoming INACTIVE.
So mark the records invalid in ctdb_start_freeze().
*/
int32_t ctdb_control_freeze(struct ctdb_context *ctdb,
struct ctdb_req_control_old *c, bool *async_reply)