diff options
author | Anand Avati <avati@redhat.com> | 2012-09-25 17:08:31 -0700 |
---|---|---|
committer | Anand Avati <avati@redhat.com> | 2012-09-25 21:14:42 -0700 |
commit | f29e26188635231652f57a518d85f110313933a2 (patch) | |
tree | 1f9b7b1f0636a5025bddc00be7fdda1c66a27086 /xlators/protocol/client/src | |
parent | e8712f36335dd3b8508914f917d74b69a2d751a1 (diff) |
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 <avati@redhat.com>
Reviewed-on: http://review.gluster.org/3994
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Amar Tumballi <amarts@redhat.com>
Diffstat (limited to 'xlators/protocol/client/src')
-rw-r--r-- | xlators/protocol/client/src/client-handshake.c | 2 | ||||
-rw-r--r-- | xlators/protocol/client/src/client.c | 5 | ||||
-rw-r--r-- | xlators/protocol/client/src/client.h | 5 |
3 files changed, 11 insertions, 1 deletions
diff --git a/xlators/protocol/client/src/client-handshake.c b/xlators/protocol/client/src/client-handshake.c index 5c4816ee20a..c08faccc75d 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 16c7dee5ece..6cc3c9896ae 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 9d8a818aa9f..420674910a8 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 { |