summaryrefslogtreecommitdiffstats
path: root/ctdb
diff options
context:
space:
mode:
authorMartin Schwenke <martin@meltin.net>2014-03-03 12:57:30 +1100
committerAmitay Isaacs <amitay@samba.org>2014-03-23 04:20:14 +0100
commit91895b33c52c0a81904c3ea36042d4574422f5fd (patch)
tree924435705f49870abd18ef486748ed5158f85cdd /ctdb
parent79d28000043bd463beecaeac47855d3a4970eaf2 (diff)
downloadsamba-91895b33c52c0a81904c3ea36042d4574422f5fd.tar.gz
samba-91895b33c52c0a81904c3ea36042d4574422f5fd.tar.xz
samba-91895b33c52c0a81904c3ea36042d4574422f5fd.zip
ctdb-tools-ctdb: Factor out function read_pnn_node_file()
Factor it from read_nodes_file(). Use it there and in read_natgw_nodes_file(). Signed-off-by: Martin Schwenke <martin@meltin.net> Reviewed-by: Amitay Isaacs <amitay@gmail.com>
Diffstat (limited to 'ctdb')
-rw-r--r--ctdb/tools/ctdb.c94
1 files changed, 36 insertions, 58 deletions
diff --git a/ctdb/tools/ctdb.c b/ctdb/tools/ctdb.c
index 433526dfc85..9cda36cbff4 100644
--- a/ctdb/tools/ctdb.c
+++ b/ctdb/tools/ctdb.c
@@ -816,9 +816,9 @@ struct pnn_node {
int pnn;
};
-static struct pnn_node *read_nodes_file(TALLOC_CTX *mem_ctx)
+static struct pnn_node *read_pnn_node_file(TALLOC_CTX *mem_ctx,
+ const char *file)
{
- const char *nodes_list;
int nlines;
char **lines;
int i, pnn;
@@ -826,17 +826,7 @@ static struct pnn_node *read_nodes_file(TALLOC_CTX *mem_ctx)
struct pnn_node *pnn_node;
struct pnn_node *tmp_node;
- /* read the nodes file */
- nodes_list = getenv("CTDB_NODES");
- if (nodes_list == NULL) {
- nodes_list = talloc_asprintf(mem_ctx, "%s/nodes",
- getenv("CTDB_BASE"));
- if (nodes_list == NULL) {
- DEBUG(DEBUG_ALERT,(__location__ " Out of memory\n"));
- exit(1);
- }
- }
- lines = file_lines_load(nodes_list, &nlines, mem_ctx);
+ lines = file_lines_load(file, &nlines, mem_ctx);
if (lines == NULL) {
return NULL;
}
@@ -879,6 +869,24 @@ static struct pnn_node *read_nodes_file(TALLOC_CTX *mem_ctx)
return pnn_nodes;
}
+static struct pnn_node *read_nodes_file(TALLOC_CTX *mem_ctx)
+{
+ const char *nodes_list;
+
+ /* read the nodes file */
+ nodes_list = getenv("CTDB_NODES");
+ if (nodes_list == NULL) {
+ nodes_list = talloc_asprintf(mem_ctx, "%s/nodes",
+ getenv("CTDB_BASE"));
+ if (nodes_list == NULL) {
+ DEBUG(DEBUG_ALERT,(__location__ " Out of memory\n"));
+ exit(1);
+ }
+ }
+
+ return read_pnn_node_file(mem_ctx, nodes_list);
+}
+
/*
show the PNN of the current node
discover the pnn by loading the nodes file and try to bind to all
@@ -1118,20 +1126,11 @@ static int control_nodestatus(struct ctdb_context *ctdb, int argc, const char **
return ret;
}
-struct natgw_node {
- struct natgw_node *next;
- const char *addr;
-};
-
-static struct natgw_node *read_natgw_nodes_file(struct ctdb_context *ctdb,
- TALLOC_CTX *mem_ctx)
+static struct pnn_node *read_natgw_nodes_file(struct ctdb_context *ctdb,
+ TALLOC_CTX *mem_ctx)
{
- int i;
const char *natgw_list;
- int nlines;
- char **lines;
- struct natgw_node *natgw_node;
- struct natgw_node *natgw_nodes = NULL;
+ struct pnn_node *natgw_nodes = NULL;
natgw_list = getenv("CTDB_NATGW_NODES");
if (natgw_list == NULL) {
@@ -1142,32 +1141,12 @@ static struct natgw_node *read_natgw_nodes_file(struct ctdb_context *ctdb,
exit(1);
}
}
- lines = file_lines_load(natgw_list, &nlines, ctdb);
- if (lines == NULL) {
- ctdb_set_error(ctdb, "Failed to load natgw node list '%s'\n", natgw_list);
- return NULL;;
- }
- for (i=0;i<nlines;i++) {
- char *node;
-
- node = lines[i];
- /* strip leading spaces */
- while((*node == ' ') || (*node == '\t')) {
- node++;
- }
- if (*node == '#') {
- continue;
- }
- if (strcmp(node, "") == 0) {
- continue;
- }
- natgw_node = talloc(ctdb, struct natgw_node);
- natgw_node->addr = talloc_strdup(natgw_node, node);
- CTDB_NO_MEMORY_NULL(ctdb, natgw_node->addr);
- natgw_node->next = natgw_nodes;
- natgw_nodes = natgw_node;
+ /* The PNNs will be junk but they're not used */
+ natgw_nodes = read_pnn_node_file(mem_ctx, natgw_list);
+ if (natgw_nodes == NULL) {
+ DEBUG(DEBUG_ERR,
+ ("Failed to load natgw node list '%s'\n", natgw_list));
}
-
return natgw_nodes;
}
@@ -1181,12 +1160,12 @@ static struct ctdb_node_map *talloc_nodemap(struct ctdb_node_map *nodemap)
}
static struct ctdb_node_map *
-filter_nodemap_by_natgw_nodes(struct ctdb_context *ctdb,
- struct ctdb_node_map *nodemap,
- struct natgw_node *natgw_nodes)
+filter_nodemap_by_addrs(struct ctdb_context *ctdb,
+ struct ctdb_node_map *nodemap,
+ struct pnn_node *nodes)
{
int i;
- struct natgw_node *n;
+ struct pnn_node *n;
struct ctdb_node_map *ret;
ret = talloc_nodemap(nodemap);
@@ -1195,7 +1174,7 @@ filter_nodemap_by_natgw_nodes(struct ctdb_context *ctdb,
ret->num = 0;
for (i = 0; i < nodemap->num; i++) {
- for(n = natgw_nodes; n != NULL ; n = n->next) {
+ for(n = nodes; n != NULL ; n = n->next) {
if (!strcmp(n->addr,
ctdb_addr_to_str(&nodemap->nodes[i].addr))) {
break;
@@ -1279,7 +1258,7 @@ static int control_natgwlist(struct ctdb_context *ctdb, int argc, const char **a
{
TALLOC_CTX *tmp_ctx = talloc_new(ctdb);
int i, ret;
- struct natgw_node *natgw_nodes = NULL;
+ struct pnn_node *natgw_nodes = NULL;
struct ctdb_node_map *orig_nodemap=NULL;
struct ctdb_node_map *cnodemap, *nodemap;
uint32_t mypnn, pnn;
@@ -1316,8 +1295,7 @@ static int control_natgwlist(struct ctdb_context *ctdb, int argc, const char **a
/* Get a nodemap that includes only the nodes in the NATGW
* group */
- nodemap = filter_nodemap_by_natgw_nodes(ctdb, orig_nodemap,
- natgw_nodes);
+ nodemap = filter_nodemap_by_addrs(ctdb, orig_nodemap, natgw_nodes);
if (nodemap == NULL) {
ret = -1;
goto done;