diff options
author | Manikandan Selvaganesh <mselvaga@redhat.com> | 2016-02-05 12:17:22 +0530 |
---|---|---|
committer | Raghavendra G <rgowdapp@redhat.com> | 2016-02-10 22:09:26 -0800 |
commit | b8bd9a6e6e3f50ede4c25dcfc0a05aad53e66c79 (patch) | |
tree | 71d37255fe363f0822b95417d6cd6059cb8b130b /xlators/features/marker | |
parent | 88d772c05c45c467bfccebfc51f6a0e0ea9ca287 (diff) |
quota: Fix incorrect disk usage shown on a tiered volume
When quota is enabled on a tiered volume, incorrect data usage is
shown, it is because, during the process of migrating files in tiering,
we are accounting both for the src file and dst file at some point. By the
time we make the srcfile as a T file, marker has already accounted the
contri and has updated it's parent and also we are not accounting for the
truncate operation done, which accounts to incorrect data usage even after
unlinking the file. The size can increase drastically with multiple promotes
and demotes since the contri keeps changing and the parent is being updated.
Change-Id: Ie567228786713d7dc257ff374a69ad3be40f9e82
BUG: 1304970
Signed-off-by: Manikandan Selvaganesh <mselvaga@redhat.com>
Reviewed-on: http://review.gluster.org/13363
Smoke: Gluster Build System <jenkins@build.gluster.com>
CentOS-regression: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Raghavendra G <rgowdapp@redhat.com>
Reviewed-by: Vijaikumar Mallikarjuna <vmallika@redhat.com>
NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org>
Diffstat (limited to 'xlators/features/marker')
-rw-r--r-- | xlators/features/marker/src/marker.c | 27 |
1 files changed, 23 insertions, 4 deletions
diff --git a/xlators/features/marker/src/marker.c b/xlators/features/marker/src/marker.c index 54dc395d462..a2e91580175 100644 --- a/xlators/features/marker/src/marker.c +++ b/xlators/features/marker/src/marker.c @@ -1736,8 +1736,23 @@ marker_truncate_cbk (call_frame_t *frame, void *cookie, xlator_t *this, priv = this->private; - if (priv->feature_enabled & GF_QUOTA) - mq_initiate_quota_txn (this, &local->loc, postbuf); + if (priv->feature_enabled & GF_QUOTA) { + /* DHT Rebalance process, at the end of migration will + * first make the src file as a linkto file and then + * truncate the file. By doing a truncate after making the + * src file as linkto file, the contri which is already + * accounted is left over. + * So, we need to account for the linkto file when a truncate + * happens, thereby updating the contri properly. + * By passing NULL for postbuf, mq_prevalidate does not check + * for linkto file. + * Same happens with ftruncate as well. + */ + if (postbuf && IS_DHT_LINKFILE_MODE (postbuf)) + mq_initiate_quota_txn (this, &local->loc, NULL); + else + mq_initiate_quota_txn (this, &local->loc, postbuf); + } if (priv->feature_enabled & GF_XTIME) marker_xtime_update_marks (this, local); @@ -1805,8 +1820,12 @@ marker_ftruncate_cbk (call_frame_t *frame, void *cookie, xlator_t *this, priv = this->private; - if (priv->feature_enabled & GF_QUOTA) - mq_initiate_quota_txn (this, &local->loc, postbuf); + if (priv->feature_enabled & GF_QUOTA) { + if (postbuf && IS_DHT_LINKFILE_MODE (postbuf)) + mq_initiate_quota_txn (this, &local->loc, NULL); + else + mq_initiate_quota_txn (this, &local->loc, postbuf); + } if (priv->feature_enabled & GF_XTIME) marker_xtime_update_marks (this, local); |