diff options
author | Ronnie Sahlberg <ronniesahlberg@gmail.com> | 2009-10-12 16:48:05 +1100 |
---|---|---|
committer | Ronnie Sahlberg <ronniesahlberg@gmail.com> | 2009-10-12 16:48:05 +1100 |
commit | 122c423b82355015014e698b725f8e03f579d52b (patch) | |
tree | 6d3e782fee22e02c089e2f9fd323b4171a3c038b /ctdb/server/ctdb_freeze.c | |
parent | 771802b212c0943b989f5c9f9cbe51f42871ccb3 (diff) | |
download | samba-122c423b82355015014e698b725f8e03f579d52b.tar.gz samba-122c423b82355015014e698b725f8e03f579d52b.tar.xz samba-122c423b82355015014e698b725f8e03f579d52b.zip |
add a new control for explicitely cancelling recovery transactions, i.e. the
transactions we start across all tdb databased during the recovery.
this allows us to properly clean up and delete these tdb transactions on a
recovery failure.
(This used to be ctdb commit b2ce8b900a7d00944c84e0574fea5b371064a06d)
Diffstat (limited to 'ctdb/server/ctdb_freeze.c')
-rw-r--r-- | ctdb/server/ctdb_freeze.c | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/ctdb/server/ctdb_freeze.c b/ctdb/server/ctdb_freeze.c index 2cc39aa274..da7272fdda 100644 --- a/ctdb/server/ctdb_freeze.c +++ b/ctdb/server/ctdb_freeze.c @@ -420,6 +420,31 @@ int32_t ctdb_control_transaction_start(struct ctdb_context *ctdb, uint32_t id) } /* + cancel a transaction for all databases - used for recovery + */ +int32_t ctdb_control_transaction_cancel(struct ctdb_context *ctdb) +{ + struct ctdb_db_context *ctdb_db; + + DEBUG(DEBUG_ERR,(__location__ " recovery transaction cancelled called\n")); + + for (ctdb_db=ctdb->db_list;ctdb_db;ctdb_db=ctdb_db->next) { + tdb_add_flags(ctdb_db->ltdb->tdb, TDB_NOLOCK); + + if (tdb_transaction_cancel(ctdb_db->ltdb->tdb) != 0) { + DEBUG(DEBUG_ERR,(__location__ " Failed to cancel transaction for db '%s'\n", ctdb_db->db_name)); + /* not a fatal error */ + } + + tdb_remove_flags(ctdb_db->ltdb->tdb, TDB_NOLOCK); + } + + ctdb->freeze_transaction_started = false; + + return 0; +} + +/* commit transactions on all databases */ int32_t ctdb_control_transaction_commit(struct ctdb_context *ctdb, uint32_t id) |