diff options
| author | Pranith Kumar K <pkarampu@redhat.com> | 2014-01-08 17:01:44 +0530 |
|---|---|---|
| committer | Niels de Vos <ndevos@redhat.com> | 2014-06-27 01:42:03 -0700 |
| commit | efb5af6c1a66fc6d8bebb1c96e8b39d6fa6f8dcd (patch) | |
| tree | 866d0052f2980376e04f3adbfd1ac0bd80056ab6 /xlators/protocol/client/src/client.h | |
| parent | e672e3dd750eeb39ad1cd2eeb0b7b51920928b50 (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.h | 5 |
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 { |
