summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRonnie Sahlberg <ronniesahlberg@gmail.com>2009-10-06 10:52:31 +1100
committerRonnie Sahlberg <ronniesahlberg@gmail.com>2009-10-06 10:52:31 +1100
commit71e42591509bc5bd7ba4a2ccb512cee0f71a2d07 (patch)
tree468c2e82411353345358f93e2fdf2744ab94d22f
parent3133dadd8f5637f4633eee563a3aa315124993a9 (diff)
add a new function to collect a list of all active nodes EXCEPT a certain node
(This used to be ctdb commit be52954d921e7d443304cf49fbd488c619a9c4ec)
-rw-r--r--ctdb/client/ctdb_client.c34
-rw-r--r--ctdb/include/ctdb.h4
2 files changed, 38 insertions, 0 deletions
diff --git a/ctdb/client/ctdb_client.c b/ctdb/client/ctdb_client.c
index 9621435398..b8cc30194c 100644
--- a/ctdb/client/ctdb_client.c
+++ b/ctdb/client/ctdb_client.c
@@ -2975,6 +2975,40 @@ uint32_t *list_of_active_nodes(struct ctdb_context *ctdb,
return nodes;
}
+uint32_t *list_of_active_nodes_except_pnn(struct ctdb_context *ctdb,
+ struct ctdb_node_map *node_map,
+ TALLOC_CTX *mem_ctx,
+ uint32_t pnn)
+{
+ int i, j, num_nodes;
+ uint32_t *nodes;
+
+ for (i=num_nodes=0;i<node_map->num;i++) {
+ if (node_map->nodes[i].flags & NODE_FLAGS_INACTIVE) {
+ continue;
+ }
+ if (node_map->nodes[i].pnn == pnn) {
+ continue;
+ }
+ num_nodes++;
+ }
+
+ nodes = talloc_array(mem_ctx, uint32_t, num_nodes);
+ CTDB_NO_MEMORY_FATAL(ctdb, nodes);
+
+ for (i=j=0;i<node_map->num;i++) {
+ if (node_map->nodes[i].flags & NODE_FLAGS_INACTIVE) {
+ continue;
+ }
+ if (node_map->nodes[i].pnn == pnn) {
+ continue;
+ }
+ nodes[j++] = node_map->nodes[i].pnn;
+ }
+
+ return nodes;
+}
+
uint32_t *list_of_connected_nodes(struct ctdb_context *ctdb,
struct ctdb_node_map *node_map,
TALLOC_CTX *mem_ctx,
diff --git a/ctdb/include/ctdb.h b/ctdb/include/ctdb.h
index a5d9d1fb45..bf689dc8ab 100644
--- a/ctdb/include/ctdb.h
+++ b/ctdb/include/ctdb.h
@@ -581,6 +581,10 @@ uint32_t *list_of_vnnmap_nodes(struct ctdb_context *ctdb,
struct ctdb_vnn_map *vnn_map,
TALLOC_CTX *mem_ctx,
bool include_self);
+uint32_t *list_of_active_nodes_except_pnn(struct ctdb_context *ctdb,
+ struct ctdb_node_map *node_map,
+ TALLOC_CTX *mem_ctx,
+ uint32_t pnn);
int ctdb_read_pnn_lock(int fd, int32_t pnn);