" setmonmode <vnn> <mode> set monitoring mode\n"
" attach <dbname> attach a database\n"
" getpid <vnn> get the pid of a ctdb daemon\n"
+ " dumpmemory <vnn|all> dump memory map to log\n"
" shutdown <vnn> shutdown a remote ctdb\n"
++ " recovery <vnn> trigger a recovery\n"
" freeze <vnn|all> freeze a node\n"
" thaw <vnn|all> thaw a node\n"
);
return 0;
}
++/*
++ trigger a recovery
++ */
++static int control_recovery(struct ctdb_context *ctdb, int argc, const char **argv)
++{
++ int ret;
++
++
++ ret = ctdb_ctrl_freeze(ctdb, timeval_current_ofs(timelimit, 0), CTDB_CURRENT_NODE);
++ if (ret != 0) {
++ printf("Unable to freeze node\n");
++ return ret;
++ }
++ ret = ctdb_ctrl_setrecmode(ctdb, timeval_current_ofs(timelimit, 0), CTDB_CURRENT_NODE, CTDB_RECOVERY_ACTIVE);
++ if (ret != 0) {
++ printf("Unable to set recovery mode\n");
++ return ret;
++ }
++
++ return 0;
++}
++
/*
display recovery mode of a remote node
*/
{ "dumpmemory", control_dumpmemory },
{ "getpid", control_getpid },
{ "shutdown", control_shutdown },
++ { "recovery", control_recovery },
{ "freeze", control_freeze },
{ "thaw", control_thaw },
};