outdata->dsize = sizeof(uint32_t);
talloc_free(state);
+ ctdb_db->push_started = false;
ctdb_db->push_state = NULL;
return 0;
}
struct set_recmode_state {
+ struct ctdb_context *ctdb;
struct ctdb_req_control_old *c;
};
-static void set_recmode_handler(struct ctdb_context *ctdb,
- char status,
+static void set_recmode_handler(char status,
double latency,
- struct ctdb_cluster_mutex_handle *h,
void *private_data)
{
struct set_recmode_state *state = talloc_get_type_abort(
/* Mutex taken */
DEBUG(DEBUG_ERR,
("ERROR: Daemon able to take recovery lock on \"%s\" during recovery\n",
- ctdb->recovery_lock));
+ state->ctdb->recovery_lock));
s = -1;
err = "Took recovery lock from daemon during recovery - probably a cluster filesystem lock coherence problem";
break;
case '1':
/* Contention */
DEBUG(DEBUG_DEBUG, (__location__ " Recovery lock check OK\n"));
- ctdb->recovery_mode = CTDB_RECOVERY_NORMAL;
- ctdb_process_deferred_attach(ctdb);
+ state->ctdb->recovery_mode = CTDB_RECOVERY_NORMAL;
+ ctdb_process_deferred_attach(state->ctdb);
s = 0;
- CTDB_UPDATE_RECLOCK_LATENCY(ctdb, "daemon reclock",
+ CTDB_UPDATE_RECLOCK_LATENCY(state->ctdb, "daemon reclock",
reclock.ctdbd, latency);
break;
DEBUG(DEBUG_WARNING,
(__location__
"Time out getting recovery lock, allowing recmode set anyway\n"));
- ctdb->recovery_mode = CTDB_RECOVERY_NORMAL;
- ctdb_process_deferred_attach(ctdb);
+ state->ctdb->recovery_mode = CTDB_RECOVERY_NORMAL;
+ ctdb_process_deferred_attach(state->ctdb);
s = 0;
break;
err = "Unexpected error when testing recovery lock";
}
- ctdb_request_control_reply(ctdb, state->c, NULL, s, err);
+ ctdb_request_control_reply(state->ctdb, state->c, NULL, s, err);
talloc_free(state);
}
DEBUG(DEBUG_ERR, (__location__ " out of memory\n"));
return -1;
}
+ state->ctdb = ctdb;
state->c = NULL;
- h = ctdb_cluster_mutex(state, ctdb, ctdb->recovery_lock, 5);
+ h = ctdb_cluster_mutex(state, ctdb, ctdb->recovery_lock, 5,
+ set_recmode_handler, state, NULL, NULL);
if (h == NULL) {
talloc_free(state);
return -1;
}
state->c = talloc_steal(state, c);
-
- /* set_recmode_handler() frees state/h */
- ctdb_cluster_mutex_set_handler(h,
- set_recmode_handler,
- state);
*async_reply = true;
return 0;
if (ctdb->pnn != new_recmaster && ctdb->recovery_master == ctdb->pnn) {
DEBUG(DEBUG_NOTICE,
- ("This node (%u) is no longer the recovery master\n", ctdb->pnn));
+ ("Remote node (%u) is now the recovery master\n",
+ new_recmaster));
}
if (ctdb->pnn == new_recmaster && ctdb->recovery_master != new_recmaster) {
DEBUG(DEBUG_NOTICE,
- ("This node (%u) is now the recovery master\n", ctdb->pnn));
+ ("This node (%u) is now the recovery master\n",
+ ctdb->pnn));
}
ctdb->recovery_master = new_recmaster;