summaryrefslogtreecommitdiffstats
path: root/xlators/protocol/client/src/client.h
diff options
context:
space:
mode:
authorPranith Kumar K <pkarampu@redhat.com>2014-01-08 17:01:44 +0530
committerNiels de Vos <ndevos@redhat.com>2014-06-27 01:42:03 -0700
commitefb5af6c1a66fc6d8bebb1c96e8b39d6fa6f8dcd (patch)
tree866d0052f2980376e04f3adbfd1ac0bd80056ab6 /xlators/protocol/client/src/client.h
parente672e3dd750eeb39ad1cd2eeb0b7b51920928b50 (diff)
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 <pkarampu@redhat.com> Reviewed-on: http://review.gluster.org/8187 Tested-by: Gluster Build System <jenkins@build.gluster.com> Reviewed-by: Niels de Vos <ndevos@redhat.com>
Diffstat (limited to 'xlators/protocol/client/src/client.h')
-rw-r--r--xlators/protocol/client/src/client.h5
1 files changed, 5 insertions, 0 deletions
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 {