]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
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>
Thu, 19 Mar 2020 12:19:52 +0000 (12:19 +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-12-test): Karolin Seeger <kseeger@samba.org>
Autobuild-Date(v4-12-test): Thu Mar 19 12:19:52 UTC 2020 on sn-devel-184

ctdb/tcp/tcp_connect.c

index 6576f3362cd828650e0d9c02957dac144c8e0ea3..f7703b77f0dfd9c815a6c349ce7205207d9b7367 100644 (file)
@@ -159,6 +159,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
 */
@@ -249,7 +254,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;
@@ -271,6 +276,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);
 }