1
0
mirror of https://github.com/samba-team/samba.git synced 2025-01-05 09:18:06 +03:00

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@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 319c93f0c6)

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
This commit is contained in:
Martin Schwenke 2020-03-06 16:11:23 +11:00 committed by Karolin Seeger
parent 3d7da45136
commit d7936eab41

View 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);
}