From f29e26188635231652f57a518d85f110313933a2 Mon Sep 17 00:00:00 2001 From: Anand Avati Date: Tue, 25 Sep 2012 17:08:31 -0700 Subject: protocol/client: quick-reconnect after portmap query Currently the disconnect after a portmap query is treated like an ordinary disconnect and the reconnection attempt (in this case, to the brick) is attempted only after 3 secs. This results in a delay which is unnecessary. Mark the disconnection happening because of a successful portmap query as needing a 'quick reconnect' to avoid the delay for this special case. Change-Id: I43c8292ff0c30858d883ff3569a3761acbf2f5eb BUG: 860220 Signed-off-by: Anand Avati Reviewed-on: http://review.gluster.org/3994 Tested-by: Gluster Build System Reviewed-by: Amar Tumballi --- xlators/protocol/client/src/client-handshake.c | 2 +- xlators/protocol/client/src/client.c | 5 +++++ xlators/protocol/client/src/client.h | 5 +++++ 3 files changed, 11 insertions(+), 1 deletion(-) (limited to 'xlators/protocol/client/src') diff --git a/xlators/protocol/client/src/client-handshake.c b/xlators/protocol/client/src/client-handshake.c index 5c4816ee2..c08faccc7 100644 --- a/xlators/protocol/client/src/client-handshake.c +++ b/xlators/protocol/client/src/client-handshake.c @@ -1701,6 +1701,7 @@ client_query_portmap_cbk (struct rpc_req *req, struct iovec *iov, int count, voi config.remote_port = rsp.port; rpc_clnt_reconfig (conf->rpc, &config); conf->skip_notify = 1; + conf->quick_reconnect = 1; out: if (frame) @@ -1710,7 +1711,6 @@ out: /* Need this to connect the same transport on different port */ /* ie, glusterd to glusterfsd */ rpc_transport_disconnect (conf->rpc->conn.trans); - rpc_clnt_reconnect (conf->rpc->conn.trans); } return ret; diff --git a/xlators/protocol/client/src/client.c b/xlators/protocol/client/src/client.c index 16c7dee5e..6cc3c9896 100644 --- a/xlators/protocol/client/src/client.c +++ b/xlators/protocol/client/src/client.c @@ -2110,6 +2110,11 @@ client_rpc_notify (struct rpc_clnt *rpc, void *mydata, rpc_clnt_event_t event, conf->connected = 0; conf->skip_notify = 0; + if (conf->quick_reconnect) { + conf->quick_reconnect = 0; + rpc_clnt_start (conf->rpc); + } + break; default: diff --git a/xlators/protocol/client/src/client.h b/xlators/protocol/client/src/client.h index 9d8a818aa..420674910 100644 --- a/xlators/protocol/client/src/client.h +++ b/xlators/protocol/client/src/client.h @@ -109,6 +109,11 @@ typedef struct clnt_conf { means dont register, true means register */ char parent_down; + gf_boolean_t quick_reconnect; /* When reconnecting after + portmap query, do not let + the reconnection happen after + the usual 3-second wait + */ } clnt_conf_t; typedef struct _client_fd_ctx { -- cgit