/*
get a list of nodes (vnn and flags ) from a remote node
*/
-int ctdb_ctrl_getnodemap(struct ctdb_context *ctdb, uint32_t destnode,
- TALLOC_CTX *mem_ctx, struct ctdb_node_map **nodemap)
+int ctdb_ctrl_getnodemap(struct ctdb_context *ctdb,
+ struct timeval timeout, uint32_t destnode,
+ TALLOC_CTX *mem_ctx, struct ctdb_node_map **nodemap)
{
int ret;
TDB_DATA data, outdata;
ZERO_STRUCT(data);
ret = ctdb_control(ctdb, destnode, 0,
CTDB_CONTROL_GET_NODEMAP, 0, data,
- ctdb, &outdata, &res, NULL);
+ ctdb, &outdata, &res, &timeout);
if (ret != 0 || res != 0) {
DEBUG(0,(__location__ " ctdb_control for getnodes failed\n"));
return -1;
/*
get a list of connected nodes
*/
-uint32_t *ctdb_get_connected_nodes(struct ctdb_context *ctdb, TALLOC_CTX *mem_ctx,
- uint32_t *num_nodes)
+uint32_t *ctdb_get_connected_nodes(struct ctdb_context *ctdb,
+ struct timeval timeout,
+ TALLOC_CTX *mem_ctx,
+ uint32_t *num_nodes)
{
struct ctdb_node_map *map=NULL;
int ret, i;
*num_nodes = 0;
- ret = ctdb_ctrl_getnodemap(ctdb, CTDB_CURRENT_NODE, mem_ctx, &map);
+ ret = ctdb_ctrl_getnodemap(ctdb, timeout, CTDB_CURRENT_NODE, mem_ctx, &map);
if (ret != 0) {
return NULL;
}
#include "../include/ctdb.h"
#include "../include/ctdb_private.h"
-static int timeout = 0;
+static int timed_out = 0;
/*
show usage message
void timeout_func(struct event_context *ev, struct timed_event *te,
struct timeval t, void *private_data)
{
- timeout = 1;
+ timed_out = 1;
}
{
uint32_t vnn;
TALLOC_CTX *mem_ctx=NULL;
+ struct ctdb_node_map *nodemap=NULL;
+ int ret;
again:
if (mem_ctx) {
/* we only check for recovery once every second */
- timeout = 0;
+ timed_out = 0;
event_add_timed(ctdb->ev, mem_ctx, timeval_current_ofs(1, 0), timeout_func, ctdb);
- while (!timeout) {
+ while (!timed_out) {
event_loop_once(ev);
}
printf("our node number is :%d\n",vnn);
/* get number of nodes */
+ ret = ctdb_ctrl_getnodemap(ctdb, timeval_current_ofs(1, 0), vnn, mem_ctx, &nodemap);
+ if (ret != 0) {
+ printf("Unable to get nodemap from node %u\n", vnn);
+ goto again;
+ }
}
uint32_t num;
struct ctdb_node_and_flags nodes[1];
};
-int ctdb_ctrl_getnodemap(struct ctdb_context *ctdb, uint32_t destnode,
+int ctdb_ctrl_getnodemap(struct ctdb_context *ctdb,
+ struct timeval timeout, uint32_t destnode,
TALLOC_CTX *mem_ctx, struct ctdb_node_map **nodemap);
struct ctdb_key_list {
*/
int ctdb_ctrl_setrecmode(struct ctdb_context *ctdb, uint32_t destnode, uint32_t recmode);
-uint32_t *ctdb_get_connected_nodes(struct ctdb_context *ctdb, TALLOC_CTX *mem_ctx,
+uint32_t *ctdb_get_connected_nodes(struct ctdb_context *ctdb,
+ struct timeval timeout,
+ TALLOC_CTX *mem_ctx,
uint32_t *num_nodes);
int ctdb_status_reset(struct ctdb_context *ctdb, uint32_t destnode);
uint32_t *nodes;
uint32_t num_nodes;
- nodes = ctdb_get_connected_nodes(ctdb, ctdb, &num_nodes);
+ nodes = ctdb_get_connected_nodes(ctdb, timeval_current_ofs(1, 0), ctdb, &num_nodes);
CTDB_NO_MEMORY(ctdb, nodes);
ZERO_STRUCT(status);
uint32_t *nodes;
uint32_t num_nodes;
- nodes = ctdb_get_connected_nodes(ctdb, ctdb, &num_nodes);
+ nodes = ctdb_get_connected_nodes(ctdb, timeval_current_ofs(1, 0), ctdb, &num_nodes);
CTDB_NO_MEMORY(ctdb, nodes);
for (i=0;i<num_nodes;i++) {
/* 1: find a list of all nodes */
printf("\n1: fetching list of nodes\n");
- ret = ctdb_ctrl_getnodemap(ctdb, vnn, ctdb, &nodemap);
+ ret = ctdb_ctrl_getnodemap(ctdb, timeval_current_ofs(1, 0), vnn, ctdb, &nodemap);
if (ret != 0) {
printf("Unable to get nodemap from node %u\n", vnn);
return ret;
vnn = strtoul(argv[0], NULL, 0);
- ret = ctdb_ctrl_getnodemap(ctdb, vnn, ctdb, &nodemap);
+ ret = ctdb_ctrl_getnodemap(ctdb, timeval_current_ofs(1, 0), vnn, ctdb, &nodemap);
if (ret != 0) {
printf("Unable to get nodemap from node %u\n", vnn);
return ret;
uint32_t *nodes;
uint32_t num_nodes;
- nodes = ctdb_get_connected_nodes(ctdb, ctdb, &num_nodes);
+ nodes = ctdb_get_connected_nodes(ctdb, timeval_current_ofs(1, 0), ctdb, &num_nodes);
CTDB_NO_MEMORY(ctdb, nodes);
for (i=0;i<num_nodes;i++) {
uint32_t *nodes;
uint32_t num_nodes;
- nodes = ctdb_get_connected_nodes(ctdb, ctdb, &num_nodes);
+ nodes = ctdb_get_connected_nodes(ctdb, timeval_current_ofs(1, 0), ctdb, &num_nodes);
CTDB_NO_MEMORY(ctdb, nodes);
for (i=0;i<num_nodes;i++) {
return 0;
}
- nodes = ctdb_get_connected_nodes(ctdb, ctdb, &num_nodes);
+ nodes = ctdb_get_connected_nodes(ctdb, timeval_current_ofs(1, 0), ctdb, &num_nodes);
CTDB_NO_MEMORY(ctdb, nodes);
for (i=0;i<num_nodes;i++) {
ret = ctdb_ctrl_set_debuglevel(ctdb, nodes[i], level);