diff options
Diffstat (limited to 'ctdb/tcp/tcp_init.c')
-rw-r--r-- | ctdb/tcp/tcp_init.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/ctdb/tcp/tcp_init.c b/ctdb/tcp/tcp_init.c index f5d4e4c1d6b..1b186c3f400 100644 --- a/ctdb/tcp/tcp_init.c +++ b/ctdb/tcp/tcp_init.c @@ -88,6 +88,24 @@ static int ctdb_tcp_start(struct ctdb_context *ctdb) return 0; } +/* + shutdown and try to restart a connection to a node after it has been + disconnected +*/ +static void ctdb_tcp_restart(struct ctdb_node *node) +{ + struct ctdb_tcp_node *tnode = talloc_get_type( + node->private_data, struct ctdb_tcp_node); + + DEBUG(0,("Tearing down connection to dead node :%d\n", node->pnn)); + + tnode->fd = -1; + ctdb_queue_set_fd(tnode->out_queue, -1); + + event_add_timed(node->ctdb->ev, tnode, timeval_zero(), + ctdb_tcp_node_connect, node); +} + /* shutdown the transport @@ -121,6 +139,7 @@ static const struct ctdb_methods ctdb_tcp_methods = { .add_node = ctdb_tcp_add_node, .allocate_pkt = ctdb_tcp_allocate_pkt, .shutdown = ctdb_tcp_shutdown, + .restart = ctdb_tcp_restart, }; /* |