[SCM] Samba Shared Repository - branch v4-11-test updated

Karolin Seeger kseeger at samba.org
Thu Mar 19 10:56:02 UTC 2020


The branch, v4-11-test has been updated
       via  ab7fe462500 ctdb-tcp: Do not stop outbound connection in ctdb_tcp_node_connect()
       via  482e40c0560 ctdb-tcp: Factor out function ctdb_tcp_start_outgoing()
       via  f1ed1860b07 ctdb-tcp: add ctdb_tcp_stop_incoming()
       via  8cfc1a398d1 ctdb-tcp: rename ctdb_tcp_stop_connection() to ctdb_tcp_stop_outgoing()
       via  a1a955a77f9 ctdb-tcp: Remove redundant restart in ctdb_tcp_tnode_cb()
       via  42a76edd5d1 ctdb-tcp: always call node_dead() upcall in ctdb_tcp_tnode_cb()
       via  04e5ac81498 ctdb-tcp: move free of inbound queue to TCP restart
       via  b6419a9e9fc ctdb-daemon: more logical whitespace, debug modernisation
       via  503427f7d67 ctdb-daemon: ensure restart() callback is called in half-connected state
       via  586ac88bca4 ctdb-daemon: Rename ctdb_context private_data to transport_data
       via  2cb3749ef90 ctdb-daemon: Rename ctdb_node private_data to transport_data
      from  aff55431702 nmblib: avoid undefined behaviour in handle_name_ptrs()

https://git.samba.org/?p=samba.git;a=shortlog;h=v4-11-test


- Log -----------------------------------------------------------------
commit ab7fe4625009d7edd2ffb9f22b914b6fa0d0d03d
Author: Martin Schwenke <martin at meltin.net>
Date:   Fri Mar 6 16:11:23 2020 +1100

    ctdb-tcp: Do not stop outbound connection in ctdb_tcp_node_connect()
    
    The only place the outgoing connection needs to be stopped is when
    there is a timeout when waiting for the connection to become writable.
    Add a new function ctdb_tcp_node_connect_timeout() to handle this
    case.
    
    All of the other cases are attempts to establish a new outgoing
    connection (initial attempt, retry after an error or disconnect, ...)
    so drop stopping the connection in those cases.
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=14295
    
    Signed-off-by: Amitay Isaacs <amitay at gmail.com>
    Signed-off-by: Martin Schwenke <martin at meltin.net>
    
    Autobuild-User(master): Martin Schwenke <martins at samba.org>
    Autobuild-Date(master): Thu Mar 12 05:29:20 UTC 2020 on sn-devel-184
    
    (cherry picked from commit 319c93f0c6a949545229b616dfbd4f51baf11171)
    
    Autobuild-User(v4-11-test): Karolin Seeger <kseeger at samba.org>
    Autobuild-Date(v4-11-test): Thu Mar 19 10:55:49 UTC 2020 on sn-devel-184

commit 482e40c0560119a1b1906ff27f0b55beab274a96
Author: Martin Schwenke <martin at meltin.net>
Date:   Fri Mar 6 15:59:32 2020 +1100

    ctdb-tcp: Factor out function ctdb_tcp_start_outgoing()
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=14295
    
    Signed-off-by: Amitay Isaacs <amitay at gmail.com>
    Signed-off-by: Martin Schwenke <martin at meltin.net>
    (cherry picked from commit 3c8747fe29486a4f95308b335a5e3ec1807f62cb)

commit f1ed1860b0747b9de39928bd5390e8beb09e948b
Author: Ralph Boehme <slow at samba.org>
Date:   Sat Feb 29 11:54:51 2020 +0100

    ctdb-tcp: add ctdb_tcp_stop_incoming()
    
    No change in behaviour.  This makes the code self-documenting.
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=14295
    
    Signed-off-by: Ralph Boehme <slow at samba.org>
    Signed-off-by: Martin Schwenke <martin at meltin.net>
    (cherry picked from commit 2c73dbafba50b28e72a8ec7b4382fae42fca6d17)

commit 8cfc1a398d1ada22b7d48114700cc7caf7399a32
Author: Ralph Boehme <slow at samba.org>
Date:   Fri Feb 28 11:36:00 2020 +0100

    ctdb-tcp: rename ctdb_tcp_stop_connection() to ctdb_tcp_stop_outgoing()
    
    No change in behaviour.  This makes the code self-documenting.
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=14295
    
    Signed-off-by: Ralph Boehme <slow at samba.org>
    Reviewed-by: Martin Schwenke <martin at meltin.net>
    (cherry picked from commit 1e2a967ff41cc29c3a0d7f61a46937c68fdb90ba)

commit a1a955a77f9b67b7e8d8e271b3a2c71c62f52be6
Author: Ralph Boehme <slow at samba.org>
Date:   Sat Feb 29 12:28:20 2020 +0100

    ctdb-tcp: Remove redundant restart in ctdb_tcp_tnode_cb()
    
    The node dead upcall has already restarted the outgoing connection.
    There's no need to repeat it.
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=14295
    
    Signed-off-by: Ralph Boehme <slow at samba.org>
    Signed-off-by: Martin Schwenke <martin at meltin.net>
    (cherry picked from commit ea37ecdcd5960311f54a7a5510b88a654da23daa)

commit 42a76edd5d144c495de31517cb642416a5ab2875
Author: Ralph Boehme <slow at samba.org>
Date:   Sat Feb 29 12:13:12 2020 +0100

    ctdb-tcp: always call node_dead() upcall in ctdb_tcp_tnode_cb()
    
    ctdb_tcp_tnode_cb() is called when we receive data on the outgoing connection.
    
    This can happen when we get an EOF on the connection because the other side as
    closed. In this case data will be NULL.
    
    It would also be called if we received data from the peer. In this case data
    will not be NULL.
    
    The latter case is a fatal error though and we already call
    ctdb_tcp_stop_connection() for this case as well, which means even though the
    node is not fully connected anymore, by not calling the node_dead() upcall
    NODE_FLAGS_DISCONNECTED will not be set.
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=14295
    
    Signed-off-by: Ralph Boehme <slow at samba.org>
    Reviewed-by: Martin Schwenke <martin at meltin.net>
    (cherry picked from commit b83ef98c7466b2a81968555de83fb977bb6ca9f0)

commit 04e5ac81498cf5c160c5cc506c06993dd0c007b0
Author: Noel Power <noel.power at suse.com>
Date:   Sat Feb 29 15:49:28 2020 +0000

    ctdb-tcp: move free of inbound queue to TCP restart
    
    Since commit 77deaadca8e8dbc3c92ea16893099c72f6dc874e, a nodeA which
    had previously accepted a connection from nodeB (where nodeB dies
    e.g. as as result of fencing) when nodeB attempts to connect again
    after restarting is always rejected with
    
     ctdb_listen_event: Incoming queue active, rejecting connection from w.x.y.z
    
    messages.
    
    Consolidate dead node handling in the TCP restart handling.
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=14295
    
    Signed-off-by: Noel Power <noel.power at suse.com>
    Reviewed-by: Ralph Boehme <slow at samba.org>
    Reviewed-by: Martin Schwenke <martin at meltin.net>
    (cherry picked from commit 0ff1b78fc2f0491f9e11131d0040bdaba8873770)

commit b6419a9e9fcee7560d181382970e7f05e874f63d
Author: Martin Schwenke <martin at meltin.net>
Date:   Sun Mar 1 16:40:41 2020 +1100

    ctdb-daemon: more logical whitespace, debug modernisation
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=14295
    
    Signed-off-by: Martin Schwenke <martin at meltin.net>
    Reviewed-by: Ralph Boehme <slow at samba.org>
    (cherry picked from commit 15762a34559599cf908e30651a2d4c11560068ed)

commit 503427f7d67b94841c117bb3bf9e77587589ac19
Author: Ralph Boehme <slow at samba.org>
Date:   Sat Feb 29 12:26:19 2020 +0100

    ctdb-daemon: ensure restart() callback is called in half-connected state
    
    If NODE_FLAGS_DISCONNECTED is set the node can be in half-connected state. With
    this change we ensure to restart the transport for this case.
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=14295
    
    Signed-off-by: Ralph Boehme <slow at samba.org>
    Reviewed-by: Martin Schwenke <martin at meltin.net>
    (cherry picked from commit 6a4fa0785fc83561939fa41617d526eb96c1af89)

commit 586ac88bca4fcaef3532022e21177aed27350d9d
Author: Martin Schwenke <martin at meltin.net>
Date:   Tue Nov 12 12:12:46 2019 +1100

    ctdb-daemon: Rename ctdb_context private_data to transport_data
    
    This gives a casual reader a useful clue.
    
    Signed-off-by: Martin Schwenke <martin at meltin.net>
    Reviewed-by: Amitay Isaacs <amitay at gmail.com>
    (cherry picked from commit 750f3938e4fcd6743954db6b1132751a90ee6107)

commit 2cb3749ef906f78ff7b85f780a15563d6471fb40
Author: Martin Schwenke <martin at meltin.net>
Date:   Tue Nov 12 12:04:22 2019 +1100

    ctdb-daemon: Rename ctdb_node private_data to transport_data
    
    This gives a casual reader a useful clue.
    
    Signed-off-by: Martin Schwenke <martin at meltin.net>
    Reviewed-by: Amitay Isaacs <amitay at gmail.com>
    (cherry picked from commit 53f8492caafa8556d0c2d3f272d08ce5ce098c25)

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

Summary of changes:
 ctdb/ib/ibw_ctdb.c          | 11 ++++--
 ctdb/ib/ibw_ctdb_init.c     | 13 ++++---
 ctdb/include/ctdb_private.h |  4 +--
 ctdb/server/ctdb_server.c   | 13 ++++---
 ctdb/tcp/ctdb_tcp.h         |  3 +-
 ctdb/tcp/tcp_connect.c      | 82 +++++++++++++++++++++++++++++----------------
 ctdb/tcp/tcp_init.c         | 20 +++++------
 ctdb/tcp/tcp_io.c           |  5 ++-
 8 files changed, 92 insertions(+), 59 deletions(-)


Changeset truncated at 500 lines:

diff --git a/ctdb/ib/ibw_ctdb.c b/ctdb/ib/ibw_ctdb.c
index 458646faae0..53911240ff7 100644
--- a/ctdb/ib/ibw_ctdb.c
+++ b/ctdb/ib/ibw_ctdb.c
@@ -55,7 +55,8 @@ int ctdb_ibw_get_address(struct ctdb_context *ctdb,
 
 int ctdb_ibw_node_connect(struct ctdb_node *node)
 {
-	struct ctdb_ibw_node *cn = talloc_get_type(node->private_data, struct ctdb_ibw_node);
+	struct ctdb_ibw_node *cn = talloc_get_type(node->transport_data,
+						   struct ctdb_ibw_node);
 	int	rc;
 
 	assert(cn!=NULL);
@@ -118,7 +119,9 @@ int ctdb_ibw_connstate_handler(struct ibw_ctx *ctx, struct ibw_conn *conn)
 		case IBWC_CONNECTED: { /* after ibw_accept or ibw_connect */
 			struct ctdb_node *node = talloc_get_type(conn->conn_userdata, struct ctdb_node);
 			if (node!=NULL) { /* after ibw_connect */
-				struct ctdb_ibw_node *cn = talloc_get_type(node->private_data, struct ctdb_ibw_node);
+				struct ctdb_ibw_node *cn = talloc_get_type(
+					node->transport_data,
+					struct ctdb_ibw_node);
 
 				node->ctdb->upcalls->node_connected(node);
 				ctdb_flush_cn_queue(cn);
@@ -136,7 +139,9 @@ int ctdb_ibw_connstate_handler(struct ibw_ctx *ctx, struct ibw_conn *conn)
 		case IBWC_ERROR: {
 			struct ctdb_node *node = talloc_get_type(conn->conn_userdata, struct ctdb_node);
 			if (node!=NULL) {
-				struct ctdb_ibw_node *cn = talloc_get_type(node->private_data, struct ctdb_ibw_node);
+				struct ctdb_ibw_node *cn = talloc_get_type(
+					node->transport_data,
+					struct ctdb_ibw_node);
 				struct ibw_ctx *ictx = cn->conn->ctx;
 
 				DEBUG(DEBUG_DEBUG, ("IBWC_ERROR, reconnecting...\n"));
diff --git a/ctdb/ib/ibw_ctdb_init.c b/ctdb/ib/ibw_ctdb_init.c
index 7e77ec08031..f9d00c60605 100644
--- a/ctdb/ib/ibw_ctdb_init.c
+++ b/ctdb/ib/ibw_ctdb_init.c
@@ -40,7 +40,8 @@
 
 static int ctdb_ibw_listen(struct ctdb_context *ctdb, int backlog)
 {
-	struct ibw_ctx *ictx = talloc_get_type(ctdb->private_data, struct ibw_ctx);
+	struct ibw_ctx *ictx = talloc_get_type(ctdb->transport_data,
+					       struct ibw_ctx);
 
 	assert(ictx!=NULL);
 
@@ -62,12 +63,13 @@ static int ctdb_ibw_listen(struct ctdb_context *ctdb, int backlog)
  */
 static int ctdb_ibw_add_node(struct ctdb_node *node)
 {
-	struct ibw_ctx *ictx = talloc_get_type(node->ctdb->private_data, struct ibw_ctx);
+	struct ibw_ctx *ictx = talloc_get_type(node->ctdb->transport_data,
+					       struct ibw_ctx);
 	struct ctdb_ibw_node *cn = talloc_zero(node, struct ctdb_ibw_node);
 
 	assert(cn!=NULL);
 	cn->conn = ibw_conn_new(ictx, node);
-	node->private_data = (void *)cn;
+	node->transport_data = (void *)cn;
 
 	return (cn->conn!=NULL ? 0 : -1);
 }
@@ -153,7 +155,8 @@ int ctdb_flush_cn_queue(struct ctdb_ibw_node *cn)
 
 static int ctdb_ibw_queue_pkt(struct ctdb_node *node, uint8_t *data, uint32_t length)
 {
-	struct ctdb_ibw_node *cn = talloc_get_type(node->private_data, struct ctdb_ibw_node);
+	struct ctdb_ibw_node *cn = talloc_get_type(node->transport_data,
+						   struct ctdb_ibw_node);
 	int	rc;
 
 	assert(length>=sizeof(uint32_t));
@@ -245,7 +248,7 @@ int ctdb_ibw_init(struct ctdb_context *ctdb)
 	}
 
 	ctdb->methods = &ctdb_ibw_methods;
-	ctdb->private_data = ictx;
+	ctdb->transport_data = ictx;
 	
 	DEBUG(DEBUG_DEBUG, ("ctdb_ibw_init succeeded.\n"));
 	return 0;
diff --git a/ctdb/include/ctdb_private.h b/ctdb/include/ctdb_private.h
index 1f168dae2b8..7f160c0c9db 100644
--- a/ctdb/include/ctdb_private.h
+++ b/ctdb/include/ctdb_private.h
@@ -74,7 +74,7 @@ struct ctdb_node {
 	struct ctdb_context *ctdb;
 	ctdb_sock_addr address;
 	const char *name; /* for debug messages */
-	void *private_data; /* private to transport */
+	void *transport_data; /* private to transport */
 	uint32_t pnn;
 	uint32_t flags;
 
@@ -286,7 +286,7 @@ struct ctdb_context {
 	char *err_msg;
 	const struct ctdb_methods *methods; /* transport methods */
 	const struct ctdb_upcalls *upcalls; /* transport upcalls */
-	void *private_data; /* private to transport */
+	void *transport_data; /* private to transport */
 	struct ctdb_db_context *db_list;
 	struct srvid_context *srv;
 	struct srvid_context *tunnels;
diff --git a/ctdb/server/ctdb_server.c b/ctdb/server/ctdb_server.c
index 9724d1fe0a8..4b4c2e9896f 100644
--- a/ctdb/server/ctdb_server.c
+++ b/ctdb/server/ctdb_server.c
@@ -301,6 +301,12 @@ done:
 */
 void ctdb_node_dead(struct ctdb_node *node)
 {
+	if (node->ctdb->methods == NULL) {
+		DBG_ERR("Can not restart transport while shutting down\n");
+		return;
+	}
+	node->ctdb->methods->restart(node);
+
 	if (node->flags & NODE_FLAGS_DISCONNECTED) {
 		DEBUG(DEBUG_INFO,("%s: node %s is already marked disconnected: %u connected\n", 
 			 node->ctdb->name, node->name, 
@@ -315,13 +321,6 @@ void ctdb_node_dead(struct ctdb_node *node)
 	DEBUG(DEBUG_ERR,("%s: node %s is dead: %u connected\n",
 		 node->ctdb->name, node->name, node->ctdb->num_connected));
 	ctdb_daemon_cancel_controls(node->ctdb, node);
-
-	if (node->ctdb->methods == NULL) {
-		DEBUG(DEBUG_ERR,(__location__ " Can not restart transport while shutting down daemon.\n"));
-		return;
-	}
-
-	node->ctdb->methods->restart(node);
 }
 
 /*
diff --git a/ctdb/tcp/ctdb_tcp.h b/ctdb/tcp/ctdb_tcp.h
index daabad74297..cb8d66fa5dc 100644
--- a/ctdb/tcp/ctdb_tcp.h
+++ b/ctdb/tcp/ctdb_tcp.h
@@ -48,7 +48,8 @@ void ctdb_tcp_node_connect(struct tevent_context *ev, struct tevent_timer *te,
 			   struct timeval t, void *private_data);
 void ctdb_tcp_read_cb(uint8_t *data, size_t cnt, void *args);
 void ctdb_tcp_tnode_cb(uint8_t *data, size_t cnt, void *private_data);
-void ctdb_tcp_stop_connection(struct ctdb_node *node);
+void ctdb_tcp_stop_outgoing(struct ctdb_node *node);
+void ctdb_tcp_stop_incoming(struct ctdb_node *node);
 
 #define CTDB_TCP_ALIGNMENT 8
 
diff --git a/ctdb/tcp/tcp_connect.c b/ctdb/tcp/tcp_connect.c
index 04897f44249..d9bc52aa22f 100644
--- a/ctdb/tcp/tcp_connect.c
+++ b/ctdb/tcp/tcp_connect.c
@@ -38,12 +38,12 @@
 #include "ctdb_tcp.h"
 
 /*
-  stop any connecting (established or pending) to a node
+  stop any outgoing connection (established or pending) to a node
  */
-void ctdb_tcp_stop_connection(struct ctdb_node *node)
+void ctdb_tcp_stop_outgoing(struct ctdb_node *node)
 {
 	struct ctdb_tcp_node *tnode = talloc_get_type(
-		node->private_data, struct ctdb_tcp_node);
+		node->transport_data, struct ctdb_tcp_node);
 
 	TALLOC_FREE(tnode->out_queue);
 	TALLOC_FREE(tnode->connect_te);
@@ -54,6 +54,16 @@ void ctdb_tcp_stop_connection(struct ctdb_node *node)
 	}
 }
 
+/*
+  stop incoming connection to a node
+ */
+void ctdb_tcp_stop_incoming(struct ctdb_node *node)
+{
+	struct ctdb_tcp_node *tnode = talloc_get_type(
+		node->transport_data, struct ctdb_tcp_node);
+
+	TALLOC_FREE(tnode->in_queue);
+}
 
 /*
   called when a complete packet has come in - should not happen on this socket
@@ -62,17 +72,9 @@ void ctdb_tcp_stop_connection(struct ctdb_node *node)
 void ctdb_tcp_tnode_cb(uint8_t *data, size_t cnt, void *private_data)
 {
 	struct ctdb_node *node = talloc_get_type(private_data, struct ctdb_node);
-	struct ctdb_tcp_node *tnode = talloc_get_type(
-		node->private_data, struct ctdb_tcp_node);
 
-	if (data == NULL) {
-		node->ctdb->upcalls->node_dead(node);
-	}
+	node->ctdb->upcalls->node_dead(node);
 
-	ctdb_tcp_stop_connection(node);
-	tnode->connect_te = tevent_add_timer(node->ctdb->ev, tnode,
-					     timeval_current_ofs(3, 0),
-					     ctdb_tcp_node_connect, node);
 	TALLOC_FREE(data);
 }
 
@@ -85,7 +87,7 @@ static void ctdb_node_connect_write(struct tevent_context *ev,
 {
 	struct ctdb_node *node = talloc_get_type(private_data,
 						 struct ctdb_node);
-	struct ctdb_tcp_node *tnode = talloc_get_type(node->private_data,
+	struct ctdb_tcp_node *tnode = talloc_get_type(node->transport_data,
 						      struct ctdb_tcp_node);
 	struct ctdb_context *ctdb = node->ctdb;
 	int error = 0;
@@ -98,7 +100,7 @@ static void ctdb_node_connect_write(struct tevent_context *ev,
 
 	ret = getsockopt(tnode->out_fd, SOL_SOCKET, SO_ERROR, &error, &len);
 	if (ret != 0 || error != 0) {
-		ctdb_tcp_stop_connection(node);
+		ctdb_tcp_stop_outgoing(node);
 		tnode->connect_te = tevent_add_timer(ctdb->ev, tnode,
 						    timeval_current_ofs(1, 0),
 						    ctdb_tcp_node_connect, node);
@@ -136,7 +138,7 @@ static void ctdb_node_connect_write(struct tevent_context *ev,
 					    node->name);
 	if (tnode->out_queue == NULL) {
 		DBG_ERR("Failed to set up outgoing queue\n");
-		ctdb_tcp_stop_connection(node);
+		ctdb_tcp_stop_outgoing(node);
 		tnode->connect_te = tevent_add_timer(ctdb->ev,
 						     tnode,
 						     timeval_current_ofs(1, 0),
@@ -159,15 +161,17 @@ static void ctdb_node_connect_write(struct tevent_context *ev,
 }
 
 
+static void ctdb_tcp_node_connect_timeout(struct tevent_context *ev,
+					  struct tevent_timer *te,
+					  struct timeval t,
+					  void *private_data);
+
 /*
   called when we should try and establish a tcp connection to a node
 */
-void ctdb_tcp_node_connect(struct tevent_context *ev, struct tevent_timer *te,
-			   struct timeval t, void *private_data)
+static void ctdb_tcp_start_outgoing(struct ctdb_node *node)
 {
-	struct ctdb_node *node = talloc_get_type(private_data,
-						 struct ctdb_node);
-	struct ctdb_tcp_node *tnode = talloc_get_type(node->private_data, 
+	struct ctdb_tcp_node *tnode = talloc_get_type(node->transport_data,
 						      struct ctdb_tcp_node);
 	struct ctdb_context *ctdb = node->ctdb;
         ctdb_sock_addr sock_in;
@@ -176,8 +180,6 @@ void ctdb_tcp_node_connect(struct tevent_context *ev, struct tevent_timer *te,
         ctdb_sock_addr sock_out;
 	int ret;
 
-	ctdb_tcp_stop_connection(node);
-
 	sock_out = node->address;
 
 	tnode->out_fd = socket(sock_out.sa.sa_family, SOCK_STREAM, IPPROTO_TCP);
@@ -254,13 +256,13 @@ void ctdb_tcp_node_connect(struct tevent_context *ev, struct tevent_timer *te,
 	tnode->connect_te = tevent_add_timer(ctdb->ev,
 					     tnode,
 					     timeval_current_ofs(1, 0),
-					     ctdb_tcp_node_connect,
+					     ctdb_tcp_node_connect_timeout,
 					     node);
 
 	return;
 
 failed:
-	ctdb_tcp_stop_connection(node);
+	ctdb_tcp_stop_outgoing(node);
 	tnode->connect_te = tevent_add_timer(ctdb->ev,
 					     tnode,
 					     timeval_current_ofs(1, 0),
@@ -268,6 +270,29 @@ failed:
 					     node);
 }
 
+void ctdb_tcp_node_connect(struct tevent_context *ev,
+			   struct tevent_timer *te,
+			   struct timeval t,
+			   void *private_data)
+{
+	struct ctdb_node *node = talloc_get_type_abort(private_data,
+						       struct ctdb_node);
+
+	ctdb_tcp_start_outgoing(node);
+}
+
+static void ctdb_tcp_node_connect_timeout(struct tevent_context *ev,
+					  struct tevent_timer *te,
+					  struct timeval t,
+					  void *private_data)
+{
+	struct ctdb_node *node = talloc_get_type_abort(private_data,
+						       struct ctdb_node);
+
+	ctdb_tcp_stop_outgoing(node);
+	ctdb_tcp_start_outgoing(node);
+}
+
 /*
   called when we get contacted by another node
   currently makes no attempt to check if the connection is really from a ctdb
@@ -277,7 +302,8 @@ static void ctdb_listen_event(struct tevent_context *ev, struct tevent_fd *fde,
 			      uint16_t flags, void *private_data)
 {
 	struct ctdb_context *ctdb = talloc_get_type(private_data, struct ctdb_context);
-	struct ctdb_tcp *ctcp = talloc_get_type(ctdb->private_data, struct ctdb_tcp);
+	struct ctdb_tcp *ctcp = talloc_get_type(ctdb->transport_data,
+						struct ctdb_tcp);
 	ctdb_sock_addr addr;
 	socklen_t len;
 	int fd;
@@ -300,7 +326,7 @@ static void ctdb_listen_event(struct tevent_context *ev, struct tevent_fd *fde,
 		return;
 	}
 
-	tnode = talloc_get_type_abort(node->private_data,
+	tnode = talloc_get_type_abort(node->transport_data,
 				      struct ctdb_tcp_node);
 	if (tnode == NULL) {
 		/* This can't happen - see ctdb_tcp_initialise() */
@@ -368,7 +394,7 @@ static void ctdb_listen_event(struct tevent_context *ev, struct tevent_fd *fde,
 */
 static int ctdb_tcp_listen_automatic(struct ctdb_context *ctdb)
 {
-	struct ctdb_tcp *ctcp = talloc_get_type(ctdb->private_data,
+	struct ctdb_tcp *ctcp = talloc_get_type(ctdb->transport_data,
 						struct ctdb_tcp);
         ctdb_sock_addr sock;
 	int lock_fd;
@@ -509,7 +535,7 @@ failed:
 */
 int ctdb_tcp_listen(struct ctdb_context *ctdb)
 {
-	struct ctdb_tcp *ctcp = talloc_get_type(ctdb->private_data,
+	struct ctdb_tcp *ctcp = talloc_get_type(ctdb->transport_data,
 						struct ctdb_tcp);
         ctdb_sock_addr sock;
 	int sock_size;
diff --git a/ctdb/tcp/tcp_init.c b/ctdb/tcp/tcp_init.c
index 0eb9799ac4a..3c99c8b31f5 100644
--- a/ctdb/tcp/tcp_init.c
+++ b/ctdb/tcp/tcp_init.c
@@ -58,7 +58,7 @@ static int ctdb_tcp_add_node(struct ctdb_node *node)
 	tnode->out_fd = -1;
 	tnode->ctdb = node->ctdb;
 
-	node->private_data = tnode;
+	node->transport_data = tnode;
 	talloc_set_destructor(tnode, tnode_destructor);
 
 	return 0;
@@ -97,7 +97,7 @@ static int ctdb_tcp_connect_node(struct ctdb_node *node)
 {
 	struct ctdb_context *ctdb = node->ctdb;
 	struct ctdb_tcp_node *tnode = talloc_get_type(
-		node->private_data, struct ctdb_tcp_node);
+		node->transport_data, struct ctdb_tcp_node);
 
 	/* startup connection to the other server - will happen on
 	   next event loop */
@@ -118,11 +118,11 @@ static int ctdb_tcp_connect_node(struct ctdb_node *node)
 static void ctdb_tcp_restart(struct ctdb_node *node)
 {
 	struct ctdb_tcp_node *tnode = talloc_get_type(
-		node->private_data, struct ctdb_tcp_node);
+		node->transport_data, struct ctdb_tcp_node);
 
 	DEBUG(DEBUG_NOTICE,("Tearing down connection to dead node :%d\n", node->pnn));
-
-	ctdb_tcp_stop_connection(node);
+	ctdb_tcp_stop_incoming(node);
+	ctdb_tcp_stop_outgoing(node);
 
 	tnode->connect_te = tevent_add_timer(node->ctdb->ev, tnode,
 					     timeval_zero(),
@@ -135,15 +135,15 @@ static void ctdb_tcp_restart(struct ctdb_node *node)
 */
 static void ctdb_tcp_shutdown(struct ctdb_context *ctdb)
 {
-	struct ctdb_tcp *ctcp = talloc_get_type(ctdb->private_data,
+	struct ctdb_tcp *ctcp = talloc_get_type(ctdb->transport_data,
 						struct ctdb_tcp);
 	uint32_t i;
 
 	talloc_free(ctcp);
-	ctdb->private_data = NULL;
+	ctdb->transport_data = NULL;
 
 	for (i=0; i<ctdb->num_nodes; i++) {
-		TALLOC_FREE(ctdb->nodes[i]->private_data);
+		TALLOC_FREE(ctdb->nodes[i]->transport_data);
 	}
 }
 
@@ -191,7 +191,7 @@ static const struct ctdb_methods ctdb_tcp_methods = {
 
 static int tcp_ctcp_destructor(struct ctdb_tcp *ctcp)
 {
-	ctcp->ctdb->private_data = NULL;
+	ctcp->ctdb->transport_data = NULL;
 	ctcp->ctdb->methods = NULL;
 	
 	return 0;
@@ -209,7 +209,7 @@ int ctdb_tcp_init(struct ctdb_context *ctdb)
 
 	ctcp->listen_fd = -1;
 	ctcp->ctdb      = ctdb;
-	ctdb->private_data = ctcp;
+	ctdb->transport_data = ctcp;
 	ctdb->methods = &ctdb_tcp_methods;
 
 	talloc_set_destructor(ctcp, tcp_ctcp_destructor);
diff --git a/ctdb/tcp/tcp_io.c b/ctdb/tcp/tcp_io.c
index 2d8ec0f7062..bcb18fbf300 100644
--- a/ctdb/tcp/tcp_io.c
+++ b/ctdb/tcp/tcp_io.c
@@ -39,7 +39,7 @@ void ctdb_tcp_read_cb(uint8_t *data, size_t cnt, void *args)
 {
 	struct ctdb_node *node = talloc_get_type_abort(args, struct ctdb_node);
 	struct ctdb_tcp_node *tnode = talloc_get_type_abort(
-		node->private_data, struct ctdb_tcp_node);
+		node->transport_data, struct ctdb_tcp_node);
 	struct ctdb_req_header *hdr = (struct ctdb_req_header *)data;
 
 	if (data == NULL) {
@@ -75,7 +75,6 @@ void ctdb_tcp_read_cb(uint8_t *data, size_t cnt, void *args)
 	return;
 
 failed:
-	TALLOC_FREE(tnode->in_queue);
 	node->ctdb->upcalls->node_dead(node);
 
 	TALLOC_FREE(data);
@@ -86,7 +85,7 @@ failed:
 */
 int ctdb_tcp_queue_pkt(struct ctdb_node *node, uint8_t *data, uint32_t length)
 {
-	struct ctdb_tcp_node *tnode = talloc_get_type(node->private_data,
+	struct ctdb_tcp_node *tnode = talloc_get_type(node->transport_data,
 						      struct ctdb_tcp_node);
 	if (tnode->out_queue == NULL) {
 		DBG_DEBUG("No outgoing connection, dropping packet\n");


-- 
Samba Shared Repository



More information about the samba-cvs mailing list