mirror of
https://github.com/samba-team/samba.git
synced 2024-12-22 13:34:15 +03:00
persistent: add ctdb_persistent_finish_trans3_commits().
This function walks all databases and checks for running trans3 commits. It sends replies to all of them (with error code) and ends them. To be called when a recovery finishes. (This used to be ctdb commit 70ba153b532528bdccea70c5ea28972257f384c1)
This commit is contained in:
parent
ee44c23cd5
commit
2bd04f0ff8
@ -1216,6 +1216,8 @@ int32_t ctdb_control_trans3_commit(struct ctdb_context *ctdb,
|
||||
struct ctdb_req_control *c,
|
||||
TDB_DATA recdata, bool *async_reply);
|
||||
|
||||
void ctdb_persistent_finish_trans3_commits(struct ctdb_context *ctdb);
|
||||
|
||||
int32_t ctdb_control_transaction_start(struct ctdb_context *ctdb, uint32_t id);
|
||||
int32_t ctdb_control_transaction_commit(struct ctdb_context *ctdb, uint32_t id);
|
||||
int32_t ctdb_control_transaction_cancel(struct ctdb_context *ctdb);
|
||||
|
@ -118,6 +118,40 @@ static void ctdb_persistent_store_timeout(struct event_context *ev, struct timed
|
||||
talloc_free(state);
|
||||
}
|
||||
|
||||
/**
|
||||
* Finish pending trans3 commit controls, i.e. send
|
||||
* reply to the client. This is called by the end-recovery
|
||||
* control to fix the situation when a recovery interrupts
|
||||
* the usual porgress of a transaction.
|
||||
*/
|
||||
void ctdb_persistent_finish_trans3_commits(struct ctdb_context *ctdb)
|
||||
{
|
||||
struct ctdb_db_context *ctdb_db;
|
||||
|
||||
if (ctdb->recovery_mode != CTDB_RECOVERY_NORMAL) {
|
||||
DEBUG(DEBUG_INFO, ("ctdb_persistent_store_timeout: ignoring "
|
||||
"timeout during recovery\n"));
|
||||
return;
|
||||
}
|
||||
|
||||
for (ctdb_db = ctdb->db_list; ctdb_db; ctdb_db = ctdb_db->next) {
|
||||
struct ctdb_persistent_state *state;
|
||||
|
||||
if (ctdb_db->persistent_state == NULL) {
|
||||
continue;
|
||||
}
|
||||
|
||||
state = ctdb_db->persistent_state;
|
||||
|
||||
ctdb_request_control_reply(ctdb, state->c, NULL,
|
||||
CTDB_TRANS2_COMMIT_SOMEFAIL,
|
||||
"trans3 commit ended by recovery");
|
||||
|
||||
/* The destructor sets ctdb_db->persistent_state to NULL. */
|
||||
talloc_free(state);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
store a set of persistent records - called from a ctdb client when it has updated
|
||||
some records in a persistent database. The client will have the record
|
||||
|
Loading…
Reference in New Issue
Block a user