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:
parent
ffc84e1c9a
commit
4b7d81955a
@ -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)
|
||||
|
Loading…
x
Reference in New Issue
Block a user