diff options
author | Kotresh HR <khiremat@redhat.com> | 2017-06-15 08:31:06 -0400 |
---|---|---|
committer | Atin Mukherjee <amukherj@redhat.com> | 2017-06-16 06:01:49 +0000 |
commit | f0fb166078d59cab2a33583591b6448326247c40 (patch) | |
tree | 7b5257b04d2c5ea69f08e0a6a1c9b1751dc7b30f /xlators | |
parent | b9fb7ea63d6120faaeb75ffa0cafbc0ab0e4a619 (diff) |
feature/bitrot: Fix ondemand scrub
The flag which keeps tracks of whether the scrub
frequency is changed from previous value should
not be considered for on-demand scrubbing. It
should be considered only for 'scrub-frequency'
where it should not be re-scheduled if it is
set to same value again. But in case ondemand
scrub, it should start the scrub immediately
no matter what the scrub-frequency.
Reproducer:
1. Enable bitrot
2. Set scrub-throttle
3. Set ondemand scrub
Make sure glusterd is not restarted while doing
below steps
Change-Id: Ice5feaece7fff1579fb009d1a59d2b8292e23e0b
BUG: 1461845
Signed-off-by: Kotresh HR <khiremat@redhat.com>
Reviewed-on: https://review.gluster.org/17552
Smoke: Gluster Build System <jenkins@build.gluster.org>
CentOS-regression: Gluster Build System <jenkins@build.gluster.org>
Reviewed-by: Raghavendra Bhat <raghavendra@redhat.com>
NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org>
Diffstat (limited to 'xlators')
-rw-r--r-- | xlators/features/bit-rot/src/bitd/bit-rot-scrub.c | 5 | ||||
-rw-r--r-- | xlators/features/bit-rot/src/bitd/bit-rot.c | 8 |
2 files changed, 7 insertions, 6 deletions
diff --git a/xlators/features/bit-rot/src/bitd/bit-rot-scrub.c b/xlators/features/bit-rot/src/bitd/bit-rot-scrub.c index 72bdb843488..e043ef84a52 100644 --- a/xlators/features/bit-rot/src/bitd/bit-rot-scrub.c +++ b/xlators/features/bit-rot/src/bitd/bit-rot-scrub.c @@ -1049,16 +1049,11 @@ br_fsscan_ondemand (xlator_t *this) char timestr[1024] = {0,}; struct timeval now = {0,}; br_private_t *priv = NULL; - struct br_scrubber *fsscrub = NULL; struct br_monitor *scrub_monitor = NULL; priv = this->private; - fsscrub = &priv->fsscrub; scrub_monitor = &priv->scrub_monitor; - if (!fsscrub->frequency_reconf) - return 0; - (void) gettimeofday (&now, NULL); timo = BR_SCRUB_ONDEMAND; diff --git a/xlators/features/bit-rot/src/bitd/bit-rot.c b/xlators/features/bit-rot/src/bitd/bit-rot.c index 6e86ceb02e7..c591db53ad4 100644 --- a/xlators/features/bit-rot/src/bitd/bit-rot.c +++ b/xlators/features/bit-rot/src/bitd/bit-rot.c @@ -1680,8 +1680,14 @@ notify (xlator_t *this, int32_t event, void *data, ...) gf_log (this->name, GF_LOG_INFO, "BitRot scrub ondemand " "called"); - if (scrub_monitor->state != BR_SCRUB_STATE_PENDING) + if (scrub_monitor->state != BR_SCRUB_STATE_PENDING) { + gf_msg (this->name, GF_LOG_ERROR, 0, + BRB_MSG_RESCHEDULE_SCRUBBER_FAILED, + "on demand scrub schedule failed. Scrubber is " + "not in pending state. Current state is %d", + scrub_monitor->state); return -2; + } /* Needs synchronization with reconfigure thread */ pthread_mutex_lock (&priv->lock); |