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:12:08 -0800 |
commit | 0c3e7174ac74f7222f3b8a27fe8b146b4c104852 (patch) | |
tree | 02c3986f506f7c03caa5173b24e10bd464c5c5a4 /xlators/features | |
parent | bd71d153475761de4b99bf47d90850dc7f05c4a6 (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.
Backport of http://review.gluster.org/#/c/13363/
> Change-Id: Ie567228786713d7dc257ff374a69ad3be40f9e82
> BUG: 1304970
> Signed-off-by: Manikandan Selvaganesh <mselvaga@redhat.com>
Change-Id: I72138aa3bb9ad180287e9bed916b845ec028f259
BUG: 1305029
Signed-off-by: Manikandan Selvaganesh <mselvaga@redhat.com>
Reviewed-on: http://review.gluster.org/13388
Reviewed-by: Vijaikumar Mallikarjuna <vmallika@redhat.com>
NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org>
CentOS-regression: Gluster Build System <jenkins@build.gluster.com>
Smoke: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Raghavendra G <rgowdapp@redhat.com>
Diffstat (limited to 'xlators/features')
-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 3aae155e85a..ebe18d613c5 100644 --- a/xlators/features/marker/src/marker.c +++ b/xlators/features/marker/src/marker.c @@ -1738,8 +1738,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); @@ -1807,8 +1822,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); |