[SCM] Samba Shared Repository - branch master updated

Martin Schwenke martins at samba.org
Thu Oct 5 07:20:03 UTC 2017


The branch, master has been updated
       via  e1a8c9b ctdb-common: Make parse_ip() and parse_ipv4() static
       via  c98691c ctdb-common: Replace parse_ip() -> ctdb_sock_addr_from_string()
       via  330436b ctdb-tests: Replace parse_ip() -> ctdb_sock_addr_from_string()
       via  a0051b8 ctdb-tools: Replace parse_ip() -> ctdb_sock_addr_from_string()
       via  4683ef2 ctdb-common: Remove unused function parse_ip_port()
       via  3ee9822 ctdb-tools: Replace parse_ip_port() -> ctdb_sock_addr_from_string()
       via  cadd0d5 ctdb-common: Remove unused function ctdb_parse_connections()
       via  96e3ea5 ctdb-tools: Use ctdb_connection_list_read()
       via  ddd9755 ctdb-common: Do not queue a packet if queue does not have valid fd
       via  bf11bea ctdb-tests: Send broadcast to connected nodes, not configured nodes
       via  70d3063 ctdb-daemon: Send broadcast to connected nodes, not configured nodes
      from  b07f221 s3: VFS: Ensure default SMB_VFS_GETWD() call can't return a partially completed struct smb_filename.

https://git.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit e1a8c9b27014f4f576d1508de4b380b7517c0861
Author: Martin Schwenke <martin at meltin.net>
Date:   Tue Sep 19 23:51:21 2017 +1000

    ctdb-common: Make parse_ip() and parse_ipv4() static
    
    parse_ip() has interface checking for IPv6 that is still used
    indirectly by the IP takeover code via parse_ip_mask().  This will be
    removed eventually.
    
    Signed-off-by: Martin Schwenke <martin at meltin.net>
    Reviewed-by: Amitay Isaacs <amitay at gmail.com>
    
    Autobuild-User(master): Martin Schwenke <martins at samba.org>
    Autobuild-Date(master): Thu Oct  5 09:19:31 CEST 2017 on sn-devel-144

commit c98691c340e3463d90279014bbdc4e71da61de85
Author: Martin Schwenke <martin at meltin.net>
Date:   Tue Sep 19 23:44:31 2017 +1000

    ctdb-common: Replace parse_ip() -> ctdb_sock_addr_from_string()
    
    ... and ctdb_sock_addr_set_port().
    
    Signed-off-by: Martin Schwenke <martin at meltin.net>
    Reviewed-by: Amitay Isaacs <amitay at gmail.com>

commit 330436bd6ca4ec2700fd3b493bfd569c4ec81e4e
Author: Martin Schwenke <martin at meltin.net>
Date:   Tue Sep 19 23:38:31 2017 +1000

    ctdb-tests: Replace parse_ip() -> ctdb_sock_addr_from_string()
    
    ... and ctdb_sock_addr_set_port() where required.
    
    Signed-off-by: Martin Schwenke <martin at meltin.net>
    Reviewed-by: Amitay Isaacs <amitay at gmail.com>

commit a0051b80d5126cca879bb1add24212020f9d5810
Author: Martin Schwenke <martin at meltin.net>
Date:   Tue Sep 19 23:28:45 2017 +1000

    ctdb-tools: Replace parse_ip() -> ctdb_sock_addr_from_string()
    
    Signed-off-by: Martin Schwenke <martin at meltin.net>
    Reviewed-by: Amitay Isaacs <amitay at gmail.com>

commit 4683ef28ab9674f49fa050075186011a671d4c85
Author: Martin Schwenke <martin at meltin.net>
Date:   Tue Sep 19 23:19:00 2017 +1000

    ctdb-common: Remove unused function parse_ip_port()
    
    Signed-off-by: Martin Schwenke <martin at meltin.net>
    Reviewed-by: Amitay Isaacs <amitay at gmail.com>

commit 3ee9822f9d776fcc57978e426c9ae8187cd5b1c6
Author: Martin Schwenke <martin at meltin.net>
Date:   Tue Sep 19 23:17:36 2017 +1000

    ctdb-tools: Replace parse_ip_port() -> ctdb_sock_addr_from_string()
    
    Signed-off-by: Martin Schwenke <martin at meltin.net>
    Reviewed-by: Amitay Isaacs <amitay at gmail.com>

commit cadd0d51fb2fe861291f54cd8fc896c86bf76883
Author: Martin Schwenke <martin at meltin.net>
Date:   Tue Sep 19 23:12:15 2017 +1000

    ctdb-common: Remove unused function ctdb_parse_connections()
    
    Signed-off-by: Martin Schwenke <martin at meltin.net>
    Reviewed-by: Amitay Isaacs <amitay at gmail.com>

commit 96e3ea54621f04f84b10b34caa0a1c13cb3a885b
Author: Martin Schwenke <martin at meltin.net>
Date:   Tue Sep 19 23:10:55 2017 +1000

    ctdb-tools: Use ctdb_connection_list_read()
    
    Signed-off-by: Martin Schwenke <martin at meltin.net>
    Reviewed-by: Amitay Isaacs <amitay at gmail.com>

commit ddd97553f0a8bfaada178ec4a7460d76fa21f079
Author: Amitay Isaacs <amitay at gmail.com>
Date:   Fri Sep 29 14:23:24 2017 +1000

    ctdb-common: Do not queue a packet if queue does not have valid fd
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=13056
    
    The only time a ctdb_queue is created without valid fd is when CTDB
    is trying to establish connections with other nodes in the cluster.
    All the other uses always create a ctdb_queue with valid fd.
    
    This avoids queueing up packets for dead nodes or nodes that are not
    running in the cluster and stops consuming memory.
    
    Signed-off-by: Amitay Isaacs <amitay at gmail.com>
    Reviewed-by: Martin Schwenke <martin at meltin.net>

commit bf11bea5dbb589186a205fa1d81368cc89a6139b
Author: Amitay Isaacs <amitay at gmail.com>
Date:   Thu Sep 28 11:47:24 2017 +1000

    ctdb-tests: Send broadcast to connected nodes, not configured nodes
    
    https://bugzilla.samba.org/show_bug.cgi?id=13056
    
    Signed-off-by: Amitay Isaacs <amitay at gmail.com>
    Reviewed-by: Martin Schwenke <martin at meltin.net>

commit 70d306373e80eafe3a356c60a823a2577001d7d1
Author: Amitay Isaacs <amitay at gmail.com>
Date:   Thu Sep 28 11:47:00 2017 +1000

    ctdb-daemon: Send broadcast to connected nodes, not configured nodes
    
    https://bugzilla.samba.org/show_bug.cgi?id=13056
    
    Database recovery takes care of attaching missing databases on all the nodes.
    
    Signed-off-by: Amitay Isaacs <amitay at gmail.com>
    Reviewed-by: Martin Schwenke <martin at meltin.net>

-----------------------------------------------------------------------

Summary of changes:
 ctdb/common/ctdb_io.c                   |   5 ++
 ctdb/common/ctdb_util.c                 |   7 ++-
 ctdb/common/system.h                    |   7 ---
 ctdb/common/system_util.c               | 102 +-------------------------------
 ctdb/server/ctdb_ltdb_server.c          |   5 +-
 ctdb/tests/src/cluster_wait.c           |   2 +-
 ctdb/tests/src/fake_ctdbd.c             |  17 ++++--
 ctdb/tests/src/ipalloc_read_known_ips.c |   6 +-
 ctdb/tools/ctdb.c                       |  86 ++++++++++++++++-----------
 ctdb/wscript                            |   3 +-
 10 files changed, 86 insertions(+), 154 deletions(-)


Changeset truncated at 500 lines:

diff --git a/ctdb/common/ctdb_io.c b/ctdb/common/ctdb_io.c
index 152d535..3e732e8 100644
--- a/ctdb/common/ctdb_io.c
+++ b/ctdb/common/ctdb_io.c
@@ -300,6 +300,11 @@ int ctdb_queue_send(struct ctdb_queue *queue, uint8_t *data, uint32_t length)
 	struct ctdb_queue_pkt *pkt;
 	uint32_t length2, full_length;
 
+	/* If the queue does not have valid fd, no point queueing a packet */
+	if (queue->fd == -1) {
+		return 0;
+	}
+
 	if (queue->alignment) {
 		/* enforce the length and alignment rules from the tcp packet allocator */
 		length2 = (length+(queue->alignment-1)) & ~(queue->alignment-1);
diff --git a/ctdb/common/ctdb_util.c b/ctdb/common/ctdb_util.c
index 72358ca..901e5e2 100644
--- a/ctdb/common/ctdb_util.c
+++ b/ctdb/common/ctdb_util.c
@@ -29,6 +29,8 @@
 
 #include "ctdb_private.h"
 
+#include "protocol/protocol_util.h"
+
 #include "common/reqid.h"
 #include "common/system.h"
 #include "common/common.h"
@@ -172,6 +174,7 @@ int ctdb_parse_address(TALLOC_CTX *mem_ctx, const char *str,
 {
 	struct servent *se;
 	int port;
+	int ret;
 
 	setservent(0);
 	se = getservbyname("ctdb", "tcp");
@@ -183,9 +186,11 @@ int ctdb_parse_address(TALLOC_CTX *mem_ctx, const char *str,
 		port = ntohs(se->s_port);
 	}
 
-	if (! parse_ip(str, NULL, port, address)) {
+	ret = ctdb_sock_addr_from_string(str, address, false);
+	if (ret != 0) {
 		return -1;
 	}
+	ctdb_sock_addr_set_port(address, port);
 
 	return 0;
 }
diff --git a/ctdb/common/system.h b/ctdb/common/system.h
index 2875760..ae01c58 100644
--- a/ctdb/common/system.h
+++ b/ctdb/common/system.h
@@ -48,12 +48,8 @@ int ctdb_get_peer_pid(const int fd, pid_t *peer_pid);
 bool set_scheduler(void);
 void reset_scheduler(void);
 
-bool parse_ipv4(const char *s, unsigned port, struct sockaddr_in *sin);
-bool parse_ip(const char *addr, const char *ifaces, unsigned port,
-	      ctdb_sock_addr *saddr);
 bool parse_ip_mask(const char *str, const char *ifaces, ctdb_sock_addr *addr,
 		   unsigned *mask);
-bool parse_ip_port(const char *addr, ctdb_sock_addr *saddr);
 
 void lockdown_memory(bool valgrinding);
 
@@ -62,7 +58,4 @@ void mkdir_p_or_die(const char *dir, int mode);
 
 void ctdb_wait_for_process_to_exit(pid_t pid);
 
-int ctdb_parse_connections(FILE *fp, TALLOC_CTX *mem_ctx,
-			   int *num_conn, struct ctdb_connection **out);
-
 #endif /* __CTDB_SYSTEM_H__ */
diff --git a/ctdb/common/system_util.c b/ctdb/common/system_util.c
index 96ea71d..63dcd53 100644
--- a/ctdb/common/system_util.c
+++ b/ctdb/common/system_util.c
@@ -114,7 +114,7 @@ void reset_scheduler(void)
 #endif
 }
 
-bool parse_ipv4(const char *s, unsigned port, struct sockaddr_in *sin)
+static bool parse_ipv4(const char *s, unsigned port, struct sockaddr_in *sin)
 {
 	sin->sin_family = AF_INET;
 	sin->sin_port   = htons(port);
@@ -161,7 +161,8 @@ static bool parse_ipv6(const char *s, const char *ifaces, unsigned port, ctdb_so
 /*
   parse an ip
  */
-bool parse_ip(const char *addr, const char *ifaces, unsigned port, ctdb_sock_addr *saddr)
+static bool parse_ip(const char *addr, const char *ifaces, unsigned port,
+		     ctdb_sock_addr *saddr)
 {
 	char *p;
 	bool ret;
@@ -244,46 +245,6 @@ bool parse_ip_mask(const char *str, const char *ifaces, ctdb_sock_addr *addr, un
 	return ret;
 }
 
-/*
-  parse a ip:port pair
- */
-bool parse_ip_port(const char *addr, ctdb_sock_addr *saddr)
-{
-	char *p;
-	char s[64]; /* Much longer than INET6_ADDRSTRLEN */
-	unsigned port;
-	char *endp = NULL;
-	ssize_t len;
-	bool ret;
-
-	len = strlen(addr);
-	if (len >= sizeof(s)) {
-		DEBUG(DEBUG_ERR, ("Address %s is unreasonably long\n", addr));
-		return false;
-	}
-
-	strncpy(s, addr, len+1);
-
-	p = rindex(s, ':');
-	if (p == NULL) {
-		DEBUG(DEBUG_ERR, (__location__ " This addr: %s does not contain a port number\n", s));
-		return false;
-	}
-
-	port = strtoul(p+1, &endp, 10);
-	if (endp == NULL || *endp != 0) {
-		/* trailing garbage */
-		DEBUG(DEBUG_ERR, (__location__ " Trailing garbage after the port in %s\n", s));
-		return false;
-	}
-	*p = 0;
-
-	/* now is this a ipv4 or ipv6 address ?*/
-	ret = parse_ip(s, NULL, port, saddr);
-
-	return ret;
-}
-
 /* we don't lock future pages here; it would increase the chance that
  * we'd fail to mmap later on. */
 void lockdown_memory(bool valgrinding)
@@ -378,60 +339,3 @@ void ctdb_wait_for_process_to_exit(pid_t pid)
 		sleep(5);
 	}
 }
-
-int ctdb_parse_connections(FILE *fp, TALLOC_CTX *mem_ctx,
-			   int *num_conn, struct ctdb_connection **out)
-{
-	struct ctdb_connection *conn = NULL;
-	char line[128], src[128], dst[128]; /* long enough for IPv6 */
-	int line_num, ret;
-	int num = 0, max = 0;
-
-	line_num = 0;
-	while (! feof(fp)) {
-		if (fgets(line, sizeof(line), fp) == NULL) {
-			break;
-		}
-		line_num += 1;
-
-		/* Skip empty lines */
-		if (line[0] == '\n') {
-			continue;
-		}
-
-		ret = sscanf(line, "%s %s\n", src, dst);
-		if (ret != 2) {
-			DEBUG(DEBUG_ERR, ("Bad line [%d]: %s\n",
-					  line_num, line));
-			talloc_free(conn);
-			return EINVAL;
-		}
-
-		if (num >= max) {
-			max += 1024;
-			conn = talloc_realloc(mem_ctx, conn,
-					      struct ctdb_connection, max);
-			if (conn == NULL) {
-				return ENOMEM;
-			}
-		}
-
-		if (! parse_ip_port(src, &conn[num].src)) {
-			DEBUG(DEBUG_ERR, ("Invalid IP address %s\n", src));
-			talloc_free(conn);
-			return EINVAL;
-		}
-
-		if (! parse_ip_port(dst, &conn[num].dst)) {
-			DEBUG(DEBUG_ERR, ("Invalid IP address %s\n", dst));
-			talloc_free(conn);
-			return EINVAL;
-		}
-
-		num += 1;
-	}
-
-	*num_conn = num;
-	*out = conn;
-	return 0;
-}
diff --git a/ctdb/server/ctdb_ltdb_server.c b/ctdb/server/ctdb_ltdb_server.c
index d837838..c199aac 100644
--- a/ctdb/server/ctdb_ltdb_server.c
+++ b/ctdb/server/ctdb_ltdb_server.c
@@ -1206,7 +1206,7 @@ int32_t ctdb_control_db_attach(struct ctdb_context *ctdb, TDB_DATA indata,
 	}
 
 	/* tell all the other nodes about this database */
-	ctdb_daemon_send_control(ctdb, CTDB_BROADCAST_ALL, 0, opcode,
+	ctdb_daemon_send_control(ctdb, CTDB_BROADCAST_CONNECTED, 0, opcode,
 				 0, CTDB_CTRL_FLAG_NOREPLY,
 				 indata, NULL, NULL);
 
@@ -1260,7 +1260,8 @@ int32_t ctdb_control_db_detach(struct ctdb_context *ctdb, TDB_DATA indata,
 		client = reqid_find(ctdb->idr, client_id, struct ctdb_client);
 		if (client != NULL) {
 			/* forward the control to all the nodes */
-			ctdb_daemon_send_control(ctdb, CTDB_BROADCAST_ALL, 0,
+			ctdb_daemon_send_control(ctdb,
+						 CTDB_BROADCAST_CONNECTED, 0,
 						 CTDB_CONTROL_DB_DETACH, 0,
 						 CTDB_CTRL_FLAG_NOREPLY,
 						 indata, NULL, NULL);
diff --git a/ctdb/tests/src/cluster_wait.c b/ctdb/tests/src/cluster_wait.c
index 1405738..ecd2efd 100644
--- a/ctdb/tests/src/cluster_wait.c
+++ b/ctdb/tests/src/cluster_wait.c
@@ -264,7 +264,7 @@ static void cluster_wait_join_unregistered(struct tevent_req *subreq)
 	msg.data.data = tdb_null;
 
 	subreq = ctdb_client_message_send(state, state->ev, state->client,
-					  CTDB_BROADCAST_ALL, &msg);
+					  CTDB_BROADCAST_CONNECTED, &msg);
 	if (tevent_req_nomem(subreq, req)) {
 		return;
 	}
diff --git a/ctdb/tests/src/fake_ctdbd.c b/ctdb/tests/src/fake_ctdbd.c
index 98aacbe..06b5b22 100644
--- a/ctdb/tests/src/fake_ctdbd.c
+++ b/ctdb/tests/src/fake_ctdbd.c
@@ -37,7 +37,6 @@
 #include "protocol/protocol_util.h"
 
 #include "common/comm.h"
-#include "common/system.h"
 #include "common/logging.h"
 #include "common/tunable.h"
 #include "common/srvid.h"
@@ -170,6 +169,7 @@ static bool nodemap_parse(struct node_map *node_map)
 		char *ip;
 		ctdb_sock_addr saddr;
 		struct node *node;
+		int ret;
 
 		if (line[0] == '\n') {
 			break;
@@ -194,10 +194,12 @@ static bool nodemap_parse(struct node_map *node_map)
 			fprintf(stderr, "bad line (%s) - missing IP\n", line);
 			continue;
 		}
-		if (!parse_ip(tok, NULL, CTDB_PORT, &saddr)) {
+		ret = ctdb_sock_addr_from_string(tok, &saddr, false);
+		if (ret != 0) {
 			fprintf(stderr, "bad line (%s) - invalid IP\n", line);
 			continue;
 		}
+		ctdb_sock_addr_set_port(&saddr, CTDB_PORT);
 		ip = talloc_strdup(node_map, tok);
 		if (ip == NULL) {
 			goto fail;
@@ -249,7 +251,8 @@ static bool nodemap_parse(struct node_map *node_map)
 		}
 		node = &node_map->node[node_map->num_nodes];
 
-		parse_ip(ip, NULL, CTDB_PORT, &node->addr);
+		ctdb_sock_addr_from_string(ip, &node->addr, false);
+		ctdb_sock_addr_set_port(&node->addr, CTDB_PORT);
 		node->pnn = pnn;
 		node->flags = flags;
 		node->capabilities = capabilities;
@@ -275,11 +278,14 @@ static bool node_map_add(struct ctdb_node_map *nodemap,
 	ctdb_sock_addr addr;
 	uint32_t num;
 	struct ctdb_node_and_flags *n;
+	int ret;
 
-	if (! parse_ip(nstr, NULL, CTDB_PORT, &addr)) {
+	ret = ctdb_sock_addr_from_string(nstr, &addr, false);
+	if (ret != 0) {
 		fprintf(stderr, "Invalid IP address %s\n", nstr);
 		return false;
 	}
+	ctdb_sock_addr_set_port(&addr, CTDB_PORT);
 
 	num = nodemap->num;
 	nodemap->node = talloc_realloc(nodemap, nodemap->node,
@@ -1959,7 +1965,8 @@ static void control_reload_nodes_file(TALLOC_CTX *mem_ctx,
 			node = &node_map->node[i];
 
 			node->flags |= NODE_FLAGS_DELETED;
-			parse_ip("0.0.0.0", NULL, 0, &node->addr);
+			ctdb_sock_addr_from_string("0.0.0.0", &node->addr,
+						   false);
 
 			continue;
 		}
diff --git a/ctdb/tests/src/ipalloc_read_known_ips.c b/ctdb/tests/src/ipalloc_read_known_ips.c
index 5725d6d..354f7ec 100644
--- a/ctdb/tests/src/ipalloc_read_known_ips.c
+++ b/ctdb/tests/src/ipalloc_read_known_ips.c
@@ -25,8 +25,8 @@
 #include "lib/util/debug.h"
 
 #include "protocol/protocol.h"
+#include "protocol/protocol_util.h"
 #include "common/logging.h"
-#include "common/system.h"
 
 #include "ipalloc_read_known_ips.h"
 
@@ -69,6 +69,7 @@ static bool read_ctdb_public_ip_info_node(bool multi,
 	}
 
 	while (fgets(line, sizeof(line), stdin) != NULL) {
+		int ret;
 
 		/* Get rid of pesky newline */
 		if ((t = strchr(line, '\n')) != NULL) {
@@ -87,7 +88,8 @@ static bool read_ctdb_public_ip_info_node(bool multi,
 			continue;
 		}
 
-		if (!parse_ip(tok, NULL, 0, &addr)) {
+		ret = ctdb_sock_addr_from_string(tok, &addr, false);
+		if (ret != 0) {
 			D_ERR("ERROR, bad address :%s\n", tok);
 			continue;
 		}
diff --git a/ctdb/tools/ctdb.c b/ctdb/tools/ctdb.c
index a135da2..a5cfaf4 100644
--- a/ctdb/tools/ctdb.c
+++ b/ctdb/tools/ctdb.c
@@ -382,8 +382,10 @@ static bool node_map_add(struct ctdb_node_map *nodemap,
 	ctdb_sock_addr addr;
 	uint32_t num;
 	struct ctdb_node_and_flags *n;
+	int ret;
 
-	if (! parse_ip(nstr, NULL, 0, &addr)) {
+	ret = ctdb_sock_addr_from_string(nstr, &addr, false);
+	if (ret != 0) {
 		fprintf(stderr, "Invalid IP address %s\n", nstr);
 		return false;
 	}
@@ -1714,7 +1716,8 @@ static int control_ipinfo(TALLOC_CTX *mem_ctx, struct ctdb_context *ctdb,
 		usage("ipinfo");
 	}
 
-	if (! parse_ip(argv[0], NULL, 0, &addr)) {
+	ret = ctdb_sock_addr_from_string(argv[0], &addr, false);
+	if (ret != 0) {
 		fprintf(stderr, "Invalid IP address %s\n", argv[0]);
 		return 1;
 	}
@@ -2984,7 +2987,8 @@ static int control_gratarp(TALLOC_CTX *mem_ctx, struct ctdb_context *ctdb,
 		usage("gratarp");
 	}
 
-	if (! parse_ip(argv[0], NULL, 0, &addr_info.addr)) {
+	ret = ctdb_sock_addr_from_string(argv[0], &addr_info.addr, false);
+	if (ret != 0) {
 		fprintf(stderr, "Invalid IP address %s\n", argv[0]);
 		return 1;
 	}
@@ -3013,19 +3017,19 @@ static int control_tickle(TALLOC_CTX *mem_ctx, struct ctdb_context *ctdb,
 	}
 
 	if (argc == 0) {
-		struct ctdb_connection *clist;
-		int count;
+		struct ctdb_connection_list *clist;
 		int i, num_failed;
 
-		ret = ctdb_parse_connections(stdin, mem_ctx, &count, &clist);
+		/* Client first but the src/dst logic is confused */
+		ret = ctdb_connection_list_read(mem_ctx, false, &clist);
 		if (ret != 0) {
 			return ret;
 		}
 
 		num_failed = 0;
-		for (i=0; i<count; i++) {
-			ret = ctdb_sys_send_tcp(&clist[i].src,
-						&clist[i].dst,
+		for (i = 0; i < clist->num; i++) {
+			ret = ctdb_sys_send_tcp(&clist->conn[i].src,
+						&clist->conn[i].dst,
 						0, 0, 0);
 			if (ret != 0) {
 				num_failed += 1;
@@ -3044,12 +3048,14 @@ static int control_tickle(TALLOC_CTX *mem_ctx, struct ctdb_context *ctdb,
 	}
 
 
-	if (! parse_ip_port(argv[0], &src)) {
+	ret = ctdb_sock_addr_from_string(argv[0], &src, true);
+	if (ret != 0) {
 		fprintf(stderr, "Invalid IP address %s\n", argv[0]);
 		return 1;
 	}
 
-	if (! parse_ip_port(argv[1], &dst)) {
+	ret = ctdb_sock_addr_from_string(argv[1], &dst, true);
+	if (ret != 0) {
 		fprintf(stderr, "Invalid IP address %s\n", argv[1]);
 		return 1;
 	}
@@ -3079,10 +3085,12 @@ static int control_gettickles(TALLOC_CTX *mem_ctx, struct ctdb_context *ctdb,
 		port = strtoul(argv[1], NULL, 10);
 	}
 
-	if (! parse_ip(argv[0], NULL, port, &addr)) {
+	ret = ctdb_sock_addr_from_string(argv[0], &addr, false);
+	if (ret != 0) {
 		fprintf(stderr, "Invalid IP address %s\n", argv[0]);
 		return 1;
 	}
+	ctdb_sock_addr_set_port(&addr, port);
 
 	ret = ctdb_ctrl_get_tcp_tickle_list(mem_ctx, ctdb->ev, ctdb->client,
 					    ctdb->cmd_pnn, TIMEOUT(), &addr,
@@ -3136,7 +3144,7 @@ typedef void (*clist_request_func)(struct ctdb_req_control *request,
 typedef int (*clist_reply_func)(struct ctdb_reply_control *reply);
 
 struct process_clist_state {
-	struct ctdb_connection *clist;
+	struct ctdb_connection_list *clist;
 	int count;
 	int num_failed, num_total;
 	clist_reply_func reply_func;
@@ -3147,8 +3155,7 @@ static void process_clist_done(struct tevent_req *subreq);
 static struct tevent_req *process_clist_send(
 					TALLOC_CTX *mem_ctx,
 					struct ctdb_context *ctdb,
-					struct ctdb_connection *clist,
-					int count,
+					struct ctdb_connection_list *clist,
 					clist_request_func request_func,
 					clist_reply_func reply_func)
 {
@@ -3163,11 +3170,10 @@ static struct tevent_req *process_clist_send(
 	}
 
 	state->clist = clist;
-	state->count = count;
 	state->reply_func = reply_func;
 
-	for (i=0; i<count; i++) {
-		request_func(&request, &clist[i]);
+	for (i = 0; i < clist->num; i++) {
+		request_func(&request, &clist->conn[i]);
 		subreq = ctdb_client_control_send(state, ctdb->ev,
 						  ctdb->client, ctdb->cmd_pnn,
 						  TIMEOUT(), &request);
@@ -3205,7 +3211,7 @@ static void process_clist_done(struct tevent_req *subreq)
 
 done:
 	state->num_total += 1;
-	if (state->num_total == state->count) {
+	if (state->num_total == state->clist->num) {
 		tevent_req_done(req);
 	}
 }
@@ -3229,19 +3235,19 @@ static int control_addtickle(TALLOC_CTX *mem_ctx, struct ctdb_context *ctdb,
 	}
 
 	if (argc == 0) {
-		struct ctdb_connection *clist;
+		struct ctdb_connection_list *clist;
 		struct tevent_req *req;
-		int count;
 
-		ret = ctdb_parse_connections(stdin, mem_ctx, &count, &clist);
+		/* Client first but the src/dst logic is confused */
+		ret = ctdb_connection_list_read(mem_ctx, false, &clist);
 		if (ret != 0) {
 			return ret;
 		}
-		if (count == 0) {
+		if (clist->num == 0) {
 			return 0;
 		}
 
-		req = process_clist_send(mem_ctx, ctdb, clist, count,


-- 
Samba Shared Repository



More information about the samba-cvs mailing list