ctdb-tcp: Do not stop outbound connection in ctdb_tcp_node_connect()
authorMartin Schwenke <martin@meltin.net>
Fri, 6 Mar 2020 05:11:23 +0000 (16:11 +1100)
committerKarolin Seeger <kseeger@samba.org>
Tue, 24 Mar 2020 10:48:30 +0000 (10:48 +0000)
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@gmail.com>
Signed-off-by: Martin Schwenke <martin@meltin.net>
Autobuild-User(master): Martin Schwenke <martins@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-10-test): Karolin Seeger <kseeger@samba.org>
Autobuild-Date(v4-10-test): Tue Mar 24 10:48:31 UTC 2020 on sn-devel-144

ctdb/tcp/tcp_connect.c

index 6065829a44e9137d7c29857887b3f9b4299cecd5..6ce3dc16a6da00287464793b68571becfac559b2 100644 (file)
@@ -161,6 +161,11 @@ 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
 */
@@ -251,7 +256,7 @@ static void ctdb_tcp_start_outgoing(struct ctdb_node *node)
        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;
@@ -273,6 +278,17 @@ void ctdb_tcp_node_connect(struct tevent_context *ev,
        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);
 }