struct ban_state **banned_nodes;
struct timeval priority_time;
bool need_takeover_run;
++ bool need_recovery;
};
#define CONTROL_TIMEOUT() timeval_current_ofs(ctdb->tunable.recover_timeout, 0)
uint32_t generation;
struct ctdb_dbid_map *dbmap;
++ /* if recovery fails, force it again */
++ rec->need_recovery = true;
++
if (rec->last_culprit != culprit ||
timeval_elapsed(&rec->first_recover_time) > ctdb->tunable.recovery_grace_period) {
/* either a new node is the culprit, or we've decide to forgive them */
DEBUG(0, (__location__ " Recovery complete\n"));
++ rec->need_recovery = false;
++
/* We just finished a recovery successfully.
We now wait for rerecovery_timeout before we allow
another recovery to take place.
}
++ if (rec->need_recovery) {
++ /* a previous recovery didn't finish */
++ do_recovery(rec, mem_ctx, pnn, num_active, nodemap, vnnmap, nodemap->nodes[j].pnn);
++ goto again;
++ }
++
/* verify that all active nodes are in normal mode
and not in recovery mode
*/