summaryrefslogtreecommitdiffstats
path: root/xlators/cluster/ec/src/ec-common.c
diff options
context:
space:
mode:
authorAshish Pandey <aspandey@redhat.com>2016-03-04 13:05:09 +0530
committerPranith Kumar Karampuri <pkarampu@redhat.com>2016-03-15 21:54:28 -0700
commit23ccabbeb7879fd05f415690124bd7b4a74d4d33 (patch)
tree76282645ef4bb1b360470aa59d6b8cd7c184a148 /xlators/cluster/ec/src/ec-common.c
parentb145cd15ded130078c9f1105e76f35d0886e62d5 (diff)
cluster/ec: Provide an option to enable/disable eager lock
Problem: If a fop takes lock, and completes its operation, it waits for 1 second before releasing the lock. However, If ec find any lock contention within this time period, it release the lock immediately before time expires. As we take lock on first brick, for few operations, like read, it might happen that discovery of lock contention might take long time and can degrades the performance. Solution: Provide an option to enable/disable eager lock. If eager lock is disabled, lock will be released as soon as fop completes. gluster v set <VOLUME NAME> disperse.eager-lock on gluster v set <VOLUME NAME> disperse.eager-lock off Change-Id: I000985a787eba3c190fdcd5981dfbf04e64af166 BUG: 1314649 Signed-off-by: Ashish Pandey <aspandey@redhat.com> Reviewed-on: http://review.gluster.org/13605 Smoke: Gluster Build System <jenkins@build.gluster.com> Reviewed-by: Pranith Kumar Karampuri <pkarampu@redhat.com> Tested-by: Pranith Kumar Karampuri <pkarampu@redhat.com> CentOS-regression: Gluster Build System <jenkins@build.gluster.com> NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org>
Diffstat (limited to 'xlators/cluster/ec/src/ec-common.c')
-rw-r--r--xlators/cluster/ec/src/ec-common.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/xlators/cluster/ec/src/ec-common.c b/xlators/cluster/ec/src/ec-common.c
index c371eb6687e..68422f8a728 100644
--- a/xlators/cluster/ec/src/ec-common.c
+++ b/xlators/cluster/ec/src/ec-common.c
@@ -2034,11 +2034,13 @@ void ec_flush_size_version(ec_fop_data_t * fop)
void ec_lock_reuse(ec_fop_data_t *fop)
{
ec_cbk_data_t *cbk;
+ ec_t *ec = NULL;
int32_t i, count;
gf_boolean_t release = _gf_false;
-
+ ec = fop->xl->private;
cbk = fop->answer;
- if (cbk != NULL) {
+
+ if (ec->eager_lock && cbk != NULL) {
if (cbk->xdata != NULL) {
if ((dict_get_int32(cbk->xdata, GLUSTERFS_INODELK_COUNT,
&count) == 0) && (count > 1)) {
@@ -2050,7 +2052,8 @@ void ec_lock_reuse(ec_fop_data_t *fop)
}
}
} else {
- /* If we haven't get an answer with enough quorum, we always release
+ /* If eager lock is disabled or If we haven't get
+ * an answer with enough quorum, we always release
* the lock. */
release = _gf_true;
}