]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
change the signature for ctdb_ctrl_getnodemap() so that a timeout
authorRonnie Sahlberg <sahlberg@ronnie>
Thu, 3 May 2007 23:01:01 +0000 (09:01 +1000)
committerRonnie Sahlberg <sahlberg@ronnie>
Thu, 3 May 2007 23:01:01 +0000 (09:01 +1000)
parameter is added.
change ctdb_get_connected_nodes in the same way

(This used to be ctdb commit d85f23bcf4c1230225abb2f4a053c70b68d469aa)

ctdb/common/ctdb_client.c
ctdb/direct/recoverd.c
ctdb/include/ctdb.h
ctdb/tools/ctdb_control.c

index 13c242b9fc6508a507617dc6554c802b971edb8b..4e401728a10a6d28daa402df0b3b6cf2cc5340b8 100644 (file)
@@ -893,8 +893,9 @@ int ctdb_ctrl_getdbmap(struct ctdb_context *ctdb, uint32_t destnode, TALLOC_CTX
 /*
   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;
@@ -903,7 +904,7 @@ int ctdb_ctrl_getnodemap(struct ctdb_context *ctdb, uint32_t destnode,
        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;
@@ -1253,8 +1254,10 @@ int ctdb_ctrl_set_debuglevel(struct ctdb_context *ctdb, uint32_t destnode, uint3
 /*
   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;
@@ -1262,7 +1265,7 @@ uint32_t *ctdb_get_connected_nodes(struct ctdb_context *ctdb, TALLOC_CTX *mem_ct
 
        *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;
        }
index 3c1b5f5dda9ebdf78285fe4efabad8c007ce4aa4..08ba651f973293a82c51c1e451f03afb0c641540 100644 (file)
@@ -26,7 +26,7 @@
 #include "../include/ctdb.h"
 #include "../include/ctdb_private.h"
 
-static int timeout = 0;
+static int timed_out = 0;
 
 /*
   show usage message
@@ -42,7 +42,7 @@ static void usage(void)
 void timeout_func(struct event_context *ev, struct timed_event *te, 
        struct timeval t, void *private_data)
 {
-       timeout = 1;
+       timed_out = 1;
 }
 
 
@@ -50,6 +50,8 @@ void recoverd(struct ctdb_context *ctdb, struct event_context *ev)
 {
        uint32_t vnn;
        TALLOC_CTX *mem_ctx=NULL;
+       struct ctdb_node_map *nodemap=NULL;
+       int ret;
        
 again:
        if (mem_ctx) {
@@ -64,9 +66,9 @@ again:
 
 
        /* 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);
        }
 
@@ -76,6 +78,11 @@ again:
 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;
+       }
 
 }
 
index 9a143cb80f91d7ff0cb1352ce45c1d4555cd9314..5b7c5e4f2c2db9b57bd527416b0f0e8b0aa49eaf 100644 (file)
@@ -224,7 +224,8 @@ struct ctdb_node_map {
        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 {
@@ -275,7 +276,9 @@ int ctdb_ctrl_getrecmode(struct ctdb_context *ctdb, uint32_t destnode, uint32_t
  */
 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);
index 2def6eaef7ebf83c516e9b683d3a5de76a03e2ce..8bdee098e7e1af4edd591cf7e985c136e1cce950 100644 (file)
@@ -127,7 +127,7 @@ static int control_status_all(struct ctdb_context *ctdb)
        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);
@@ -197,7 +197,7 @@ static int control_status_reset_all(struct ctdb_context *ctdb)
        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++) {
@@ -260,7 +260,7 @@ static int control_recover(struct ctdb_context *ctdb, int argc, const char **arg
 
        /* 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;
@@ -624,7 +624,7 @@ static int control_getnodemap(struct ctdb_context *ctdb, int argc, const char **
 
        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;
@@ -795,7 +795,7 @@ static int control_ping(struct ctdb_context *ctdb, int argc, const char **argv)
        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++) {
@@ -822,7 +822,7 @@ static int control_debuglevel(struct ctdb_context *ctdb, int argc, const char **
        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++) {
@@ -865,7 +865,7 @@ static int control_debug(struct ctdb_context *ctdb, int argc, const char **argv)
                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);