ctdb-daemon: Add function ctdb_ip_to_node()
authorMartin Schwenke <martin@meltin.net>
Thu, 8 Aug 2019 06:20:44 +0000 (16:20 +1000)
committerMartin Schwenke <martins@samba.org>
Fri, 16 Aug 2019 21:30:35 +0000 (21:30 +0000)
This is the core logic from ctdb_ip_to_pnn(), so re-implement that
that function using ctdb_ip_to_node().

Something similar (ctdb_ip_to_nodeid()) was recently removed in commit
010c1d77cd7e192b1fff39b7b91fccbdbbf4a786 because it wasn't required.
Now there is a use case.

BUG: https://bugzilla.samba.org/show_bug.cgi?id=14084

Signed-off-by: Martin Schwenke <martin@meltin.net>
Reviewed-by: Amitay Isaacs <amitay@gmail.com>
ctdb/include/ctdb_private.h
ctdb/server/ctdb_server.c

index 2bcc7c9415691e752de0ab4afbf93c4521329a24..1e9619faddf2f8d3ef7c7b60b7f27cfe169be0a8 100644 (file)
@@ -831,6 +831,8 @@ void ctdb_stop_recoverd(struct ctdb_context *ctdb);
 
 int ctdb_set_transport(struct ctdb_context *ctdb, const char *transport);
 
+struct ctdb_node *ctdb_ip_to_node(struct ctdb_context *ctdb,
+                                 const ctdb_sock_addr *nodeip);
 uint32_t ctdb_ip_to_pnn(struct ctdb_context *ctdb,
                        const ctdb_sock_addr *nodeip);
 
index dcd761a29614829b56bd86fea9bdcdafc4a3907b..9724d1fe0a88fc58d68a476f89515f3c92b73fcb 100644 (file)
@@ -45,9 +45,9 @@ int ctdb_set_transport(struct ctdb_context *ctdb, const char *transport)
        return 0;
 }
 
-/* Return the PNN for nodeip, CTDB_UNKNOWN_PNN if nodeip is invalid */
-uint32_t ctdb_ip_to_pnn(struct ctdb_context *ctdb,
-                       const ctdb_sock_addr *nodeip)
+/* Return the node structure for nodeip, NULL if nodeip is invalid */
+struct ctdb_node *ctdb_ip_to_node(struct ctdb_context *ctdb,
+                                 const ctdb_sock_addr *nodeip)
 {
        unsigned int nodeid;
 
@@ -56,11 +56,25 @@ uint32_t ctdb_ip_to_pnn(struct ctdb_context *ctdb,
                        continue;
                }
                if (ctdb_same_ip(&ctdb->nodes[nodeid]->address, nodeip)) {
-                       return ctdb->nodes[nodeid]->pnn;
+                       return ctdb->nodes[nodeid];
                }
        }
 
-       return CTDB_UNKNOWN_PNN;
+       return NULL;
+}
+
+/* Return the PNN for nodeip, CTDB_UNKNOWN_PNN if nodeip is invalid */
+uint32_t ctdb_ip_to_pnn(struct ctdb_context *ctdb,
+                       const ctdb_sock_addr *nodeip)
+{
+       struct ctdb_node *node;
+
+       node = ctdb_ip_to_node(ctdb, nodeip);
+       if (node == NULL) {
+               return CTDB_UNKNOWN_PNN;
+       }
+
+       return node->pnn;
 }
 
 /* Load a nodes list file into a nodes array */