diff options
Diffstat (limited to 'ctdb/server/ctdb_persistent.c')
-rw-r--r-- | ctdb/server/ctdb_persistent.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/ctdb/server/ctdb_persistent.c b/ctdb/server/ctdb_persistent.c index cde3365053..5733290852 100644 --- a/ctdb/server/ctdb_persistent.c +++ b/ctdb/server/ctdb_persistent.c @@ -65,7 +65,18 @@ static void ctdb_persistent_callback(struct ctdb_context *ctdb, state->status = status; state->errormsg = errormsg; state->num_failed++; + + /* + * If a node failed to complete the update_record control, + * then either a recovery is already running or something + * bad is going on. So trigger a recovery and let the + * recovery finish the transaction, sending back the reply + * for the trans3_commit control to the client. + */ + ctdb->recovery_mode = CTDB_RECOVERY_ACTIVE; + return; } + state->num_pending--; if (state->num_pending == 0) { enum ctdb_trans2_commit_error etype; |