From efb5af6c1a66fc6d8bebb1c96e8b39d6fa6f8dcd Mon Sep 17 00:00:00 2001 From: Pranith Kumar K Date: Wed, 8 Jan 2014 17:01:44 +0530 Subject: protocol/client: conn-id should be unique when lk-heal is off Backport of http://review.gluster.org/6669 Problem: It was observed that in some cases client disconnects and re-connects before server xlator could detect that a disconnect happened. So it still uses previous fdtable and ltable. But it can so happen that in between disconnect and re-connect an 'unlock' fop may fail because the fds are marked 'bad' in client xlator upon disconnect. Due to this stale locks remain on the brick which lead to hangs/self-heals not happening etc. For the exact bug RCA please look at https://bugzilla.redhat.com/show_bug.cgi?id=1049932#c0 Fix: When lk-heal is not enabled make sure connection-id is different for every setvolume. This will make sure that a previous connection's resources are not re-used in server xlator. BUG: 1113894 Change-Id: I5090f832730e4072c4b6b6758e64f757b911bd49 Signed-off-by: Pranith Kumar K Reviewed-on: http://review.gluster.org/8187 Tested-by: Gluster Build System Reviewed-by: Niels de Vos --- xlators/protocol/client/src/client.h | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'xlators/protocol/client/src/client.h') diff --git a/xlators/protocol/client/src/client.h b/xlators/protocol/client/src/client.h index b31e6172149..8c3481f87b7 100644 --- a/xlators/protocol/client/src/client.h +++ b/xlators/protocol/client/src/client.h @@ -121,6 +121,11 @@ typedef struct clnt_conf { gf_boolean_t filter_o_direct; /* if set, filter O_DIRECT from the flags list of open() */ gf_boolean_t send_gids; /* let the server resolve gids */ + /* set volume is the op which results in creating/re-using + * the conn-id and is called once per connection, this remembers + * how manytimes set_volume is called + */ + uint64_t setvol_count; } clnt_conf_t; typedef struct _client_fd_ctx { -- cgit