/*
we are the recmaster, and recovery is needed - start a recovery run
*/
-static int do_recovery(struct ctdb_recoverd *rec,
- TALLOC_CTX *mem_ctx, uint32_t pnn,
- struct ctdb_node_map_old *nodemap, struct ctdb_vnn_map *vnnmap)
+static int do_recovery(struct ctdb_recoverd *rec, TALLOC_CTX *mem_ctx)
{
struct ctdb_context *ctdb = rec->ctdb;
+ struct ctdb_node_map_old *nodemap = rec->nodemap;
unsigned int i;
int ret;
bool self_ban;
"ban this node for %u seconds\n",
ctdb->tunable.recovery_ban_period);
ctdb_ban_node(rec,
- pnn,
+ rec->pnn,
ctdb->tunable.recovery_ban_period);
goto fail;
}
if (rec->need_recovery) {
/* a previous recovery didn't finish */
- do_recovery(rec, mem_ctx, pnn, nodemap, vnnmap);
+ do_recovery(rec, mem_ctx);
return;
}
*/
switch (verify_recmode(ctdb, nodemap)) {
case MONITOR_RECOVERY_NEEDED:
- do_recovery(rec, mem_ctx, pnn, nodemap, vnnmap);
+ do_recovery(rec, mem_ctx);
return;
case MONITOR_FAILED:
return;
if (!ctdb_recovery_have_lock(rec)) {
DEBUG(DEBUG_ERR,("Failed recovery lock sanity check. Force a recovery\n"));
ctdb_set_culprit(rec, ctdb->pnn);
- do_recovery(rec, mem_ctx, pnn, nodemap, vnnmap);
+ do_recovery(rec, mem_ctx);
return;
}
}
DEBUG(DEBUG_ERR, (__location__ " Remote node:%u has different node count. %u vs %u of the local node\n",
nodemap->nodes[j].pnn, remote_nodemaps[j]->num, nodemap->num));
ctdb_set_culprit(rec, nodemap->nodes[j].pnn);
- do_recovery(rec, mem_ctx, pnn, nodemap, vnnmap);
+ do_recovery(rec, mem_ctx);
return;
}
nodemap->nodes[j].pnn, i,
remote_nodemaps[j]->nodes[i].pnn, nodemap->nodes[i].pnn));
ctdb_set_culprit(rec, nodemap->nodes[j].pnn);
- do_recovery(rec, mem_ctx, pnn, nodemap,
- vnnmap);
+ do_recovery(rec, mem_ctx);
return;
}
}
DEBUG(DEBUG_ERR, (__location__ " The vnnmap count is different from the number of active lmaster nodes: %u vs %u\n",
vnnmap->size, num_lmasters));
ctdb_set_culprit(rec, ctdb->pnn);
- do_recovery(rec, mem_ctx, pnn, nodemap, vnnmap);
+ do_recovery(rec, mem_ctx);
return;
}
D_ERR("Active LMASTER node %u is not in the vnnmap\n",
nodemap->nodes[j].pnn);
ctdb_set_culprit(rec, nodemap->nodes[j].pnn);
- do_recovery(rec, mem_ctx, pnn, nodemap, vnnmap);
+ do_recovery(rec, mem_ctx);
return;
}
}
DEBUG(DEBUG_ERR, (__location__ " Remote node %u has different generation of vnnmap. %u vs %u (ours)\n",
nodemap->nodes[j].pnn, remote_vnnmap->generation, vnnmap->generation));
ctdb_set_culprit(rec, nodemap->nodes[j].pnn);
- do_recovery(rec, mem_ctx, pnn, nodemap, vnnmap);
+ do_recovery(rec, mem_ctx);
return;
}
DEBUG(DEBUG_ERR, (__location__ " Remote node %u has different size of vnnmap. %u vs %u (ours)\n",
nodemap->nodes[j].pnn, remote_vnnmap->size, vnnmap->size));
ctdb_set_culprit(rec, nodemap->nodes[j].pnn);
- do_recovery(rec, mem_ctx, pnn, nodemap, vnnmap);
+ do_recovery(rec, mem_ctx);
return;
}
DEBUG(DEBUG_ERR, (__location__ " Remote node %u has different vnnmap.\n",
nodemap->nodes[j].pnn));
ctdb_set_culprit(rec, nodemap->nodes[j].pnn);
- do_recovery(rec, mem_ctx, pnn, nodemap,
- vnnmap);
+ do_recovery(rec, mem_ctx);
return;
}
}