From 122c423b82355015014e698b725f8e03f579d52b Mon Sep 17 00:00:00 2001 From: Ronnie Sahlberg Date: Mon, 12 Oct 2009 16:48:05 +1100 Subject: 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) --- ctdb/server/ctdb_freeze.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) (limited to 'ctdb/server/ctdb_freeze.c') 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 @@ -419,6 +419,31 @@ int32_t ctdb_control_transaction_start(struct ctdb_context *ctdb, uint32_t id) return 0; } +/* + 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 */ -- cgit