diff options
| author | Ronnie Sahlberg <sahlberg@ronnie> | 2007-09-14 15:19:44 +1000 |
|---|---|---|
| committer | Ronnie Sahlberg <sahlberg@ronnie> | 2007-09-14 15:19:44 +1000 |
| commit | 2d0261afeb3946d4ab46cabc7f99ea04427cab40 (patch) | |
| tree | fd0112191530145408a271a9459fc119e5498ef7 | |
| parent | 90a37c4fb4d56364780bcc0545991f177799ce82 (diff) | |
let ctdb ip only print the ip addresses known to the specified node
and not the entire cluster
(This used to be ctdb commit eb1f67a56d752c9f42a9a26a6697a7ab8e668b3a)
| -rw-r--r-- | ctdb/tools/ctdb.c | 60 |
1 files changed, 6 insertions, 54 deletions
diff --git a/ctdb/tools/ctdb.c b/ctdb/tools/ctdb.c index ca10aed0cc..e7d247f767 100644 --- a/ctdb/tools/ctdb.c +++ b/ctdb/tools/ctdb.c @@ -25,7 +25,6 @@ #include "cmdline.h" #include "../include/ctdb.h" #include "../include/ctdb_private.h" -#include "../common/rb_tree.h" static void usage(void); @@ -521,73 +520,26 @@ static int tickle_tcp(struct ctdb_context *ctdb, int argc, const char **argv) } -static void *store_ip(void *p, void *d) -{ - return p; -} -static void print_ip(void *param, void *data) -{ - struct ctdb_public_ip *ip = (struct ctdb_public_ip *)data; - - if(options.machinereadable){ - printf(":%s:%d:\n", inet_ntoa(ip->sin.sin_addr), ip->pnn); - } else { - printf("%-16s %d\n", inet_ntoa(ip->sin.sin_addr), ip->pnn); - } -} - /* display public ip status */ static int control_ip(struct ctdb_context *ctdb, int argc, const char **argv) { - int i, j, ret; + int i, ret; TALLOC_CTX *tmp_ctx = talloc_new(ctdb); - trbt_tree_t *tree; - struct ctdb_node_map *nodemap=NULL; struct ctdb_all_public_ips *ips; - struct ctdb_public_ip *ip; - - ret = ctdb_ctrl_getnodemap(ctdb, TIMELIMIT(), options.pnn, tmp_ctx, &nodemap); + /* read the public ip list from this node */ + ret = ctdb_ctrl_get_public_ips(ctdb, TIMELIMIT(), options.pnn, tmp_ctx, &ips); if (ret != 0) { - DEBUG(0, ("Unable to get nodemap from node %u\n", options.pnn)); + DEBUG(0, ("Unable to get public ips from node %u\n", i)); talloc_free(tmp_ctx); return ret; } - /* create a tree to store the public addresses in indexed by s_addr */ - tree = trbt_create(tmp_ctx, 0); - CTDB_NO_MEMORY(ctdb, tree); - - for (i=0;i<nodemap->num;i++) { - /* dont read the public ip list from disconnected nodes */ - if (nodemap->nodes[i].flags & NODE_FLAGS_DISCONNECTED) { - continue; - } - - /* read the public ip list from this node */ - ret = ctdb_ctrl_get_public_ips(ctdb, TIMELIMIT(), i, tmp_ctx, &ips); - if (ret != 0) { - DEBUG(0, ("Unable to get public ips from node %u\n", i)); - talloc_free(tmp_ctx); - return ret; - } - - - /* store the public ip */ - for(j=0;j<ips->num;j++){ - ip = talloc_memdup(tmp_ctx, &ips->ips[j], sizeof(struct ctdb_public_ip)); - /* ntohl() so that we sort by the first octet */ - trbt_insert32_callback(tree, ntohl(ips->ips[j].sin.sin_addr.s_addr), store_ip, ip); - } - } - - /* traverse the tree and read back all the public ips one by one */ - if(options.machinereadable){ - printf(":Public IP:Node:\n"); + for (i=0;i<ips->num;i++) { + printf("%s %d\n", inet_ntoa(ips->ips[i].sin.sin_addr), ips->ips[i].pnn); } - trbt_traversearray32(tree, 1, print_ip, NULL); talloc_free(tmp_ctx); return 0; |
