mirror of
https://github.com/samba-team/samba.git
synced 2024-12-23 17:34:34 +03:00
when a node disgrees with us re who is recmaster
make it mark that node as a lcuprit so it eventually gets banned (This used to be ctdb commit eff3f326f8ce6070c9f3c430cd14d1b71a8db220)
This commit is contained in:
parent
f153a45e56
commit
073f4a7cb4
@ -1914,6 +1914,7 @@ static enum monitor_result verify_recmode(struct ctdb_context *ctdb, struct ctdb
|
||||
|
||||
|
||||
struct verify_recmaster_data {
|
||||
struct ctdb_recoverd *rec;
|
||||
uint32_t count;
|
||||
uint32_t pnn;
|
||||
enum monitor_result status;
|
||||
@ -1942,6 +1943,7 @@ static void verify_recmaster_callback(struct ctdb_client_control_state *state)
|
||||
*/
|
||||
if (state->status != rmdata->pnn) {
|
||||
DEBUG(DEBUG_ERR,("Node %d does not agree we are the recmaster. Need a new recmaster election\n", state->c->hdr.destnode));
|
||||
ctdb_set_culprit(rmdata->rec, state->c->hdr.destnode);
|
||||
rmdata->status = MONITOR_ELECTION_NEEDED;
|
||||
}
|
||||
|
||||
@ -1950,8 +1952,9 @@ static void verify_recmaster_callback(struct ctdb_client_control_state *state)
|
||||
|
||||
|
||||
/* verify that all nodes agree that we are the recmaster */
|
||||
static enum monitor_result verify_recmaster(struct ctdb_context *ctdb, struct ctdb_node_map *nodemap, uint32_t pnn)
|
||||
static enum monitor_result verify_recmaster(struct ctdb_recoverd *rec, struct ctdb_node_map *nodemap, uint32_t pnn)
|
||||
{
|
||||
struct ctdb_context *ctdb = rec->ctdb;
|
||||
struct verify_recmaster_data *rmdata;
|
||||
TALLOC_CTX *mem_ctx = talloc_new(ctdb);
|
||||
struct ctdb_client_control_state *state;
|
||||
@ -1960,6 +1963,7 @@ static enum monitor_result verify_recmaster(struct ctdb_context *ctdb, struct ct
|
||||
|
||||
rmdata = talloc(mem_ctx, struct verify_recmaster_data);
|
||||
CTDB_NO_MEMORY_FATAL(ctdb, rmdata);
|
||||
rmdata->rec = rec;
|
||||
rmdata->count = 0;
|
||||
rmdata->pnn = pnn;
|
||||
rmdata->status = MONITOR_OK;
|
||||
@ -2453,7 +2457,7 @@ again:
|
||||
|
||||
|
||||
/* verify that all active nodes agree that we are the recmaster */
|
||||
switch (verify_recmaster(ctdb, nodemap, pnn)) {
|
||||
switch (verify_recmaster(rec, nodemap, pnn)) {
|
||||
case MONITOR_RECOVERY_NEEDED:
|
||||
/* can not happen */
|
||||
goto again;
|
||||
|
Loading…
Reference in New Issue
Block a user