struct ctdb_context *ctdb;
ctdb = talloc_zero(ev, struct ctdb_context);
- ctdb->ev = ev;
- ctdb->recovery_mode = CTDB_RECOVERY_NORMAL;
- ctdb->upcalls = &ctdb_upcalls;
- ctdb->idr = idr_init(ctdb);
- ctdb->max_lacount = CTDB_DEFAULT_MAX_LACOUNT;
+ ctdb->ev = ev;
+ ctdb->recovery_mode = CTDB_RECOVERY_NORMAL;
+ ctdb->recovery_master = 0;
+ ctdb->upcalls = &ctdb_upcalls;
+ ctdb->idr = idr_init(ctdb);
+ ctdb->max_lacount = CTDB_DEFAULT_MAX_LACOUNT;
ctdb->seqnum_frequency = CTDB_DEFAULT_SEQNUM_FREQUENCY;
return ctdb;
return 0;
}
+/*
+ get the recovery master of a remote node
+ */
+int ctdb_ctrl_getrecmaster(struct ctdb_context *ctdb, struct timeval timeout, uint32_t destnode, uint32_t *recmaster)
+{
+ int ret;
+ TDB_DATA data, outdata;
+ int32_t res;
+
+ ZERO_STRUCT(data);
+ ret = ctdb_control(ctdb, destnode, 0,
+ CTDB_CONTROL_GET_RECMASTER, 0, data,
+ ctdb, &outdata, &res, &timeout);
+ if (ret != 0) {
+ DEBUG(0,(__location__ " ctdb_control for getrecmaster failed\n"));
+ return -1;
+ }
+
+ *recmaster = res;
+
+ return 0;
+}
+
+/*
+ set the recovery master of a remote node
+ */
+int ctdb_ctrl_setrecmaster(struct ctdb_context *ctdb, struct timeval timeout, uint32_t destnode, uint32_t recmaster)
+{
+ int ret;
+ TDB_DATA data, outdata;
+ int32_t res;
+
+ ZERO_STRUCT(data);
+ data.dsize = sizeof(uint32_t);
+ data.dptr = (unsigned char *)&recmaster;
+
+ ret = ctdb_control(ctdb, destnode, 0,
+ CTDB_CONTROL_SET_RECMASTER, 0, data,
+ ctdb, &outdata, &res, &timeout);
+ if (ret != 0 || res != 0) {
+ DEBUG(0,(__location__ " ctdb_control for getrecmode failed\n"));
+ return -1;
+ }
+
+ return 0;
+}
+
+
/*
get a list of databases off a remote node
*/
return ctdb->recovery_mode;
}
+ case CTDB_CONTROL_SET_RECMASTER: {
+ ctdb->recovery_master = ((uint32_t *)(&indata.dptr[0]))[0];
+
+ return 0;
+ }
+
+ case CTDB_CONTROL_GET_RECMASTER: {
+ return ctdb->recovery_master;
+ }
+
case CTDB_CONTROL_GET_PID: {
return getpid();
}
*/
int ctdb_ctrl_setrecmode(struct ctdb_context *ctdb, struct timeval timeout, uint32_t destnode, uint32_t recmode);
+/*
+ get the recovery master of a remote node
+ */
+int ctdb_ctrl_getrecmaster(struct ctdb_context *ctdb, struct timeval timeout, uint32_t destnode, uint32_t *recmaster);
+/*
+ set the recovery master of a remote node
+ */
+int ctdb_ctrl_setrecmaster(struct ctdb_context *ctdb, struct timeval timeout, uint32_t destnode, uint32_t recmaster);
+
uint32_t *ctdb_get_connected_nodes(struct ctdb_context *ctdb,
struct timeval timeout,
TALLOC_CTX *mem_ctx,
struct ctdb_vnn_map *vnn_map;
uint32_t num_clients;
uint32_t seqnum_frequency;
+ uint32_t recovery_master;
};
struct ctdb_db_context {
CTDB_CONTROL_SET_SEQNUM_FREQUENCY,
CTDB_CONTROL_DUMP_MEMORY,
CTDB_CONTROL_GET_PID,
+ CTDB_CONTROL_GET_RECMASTER,
+ CTDB_CONTROL_SET_RECMASTER,
};