dht/rebalance: Handle GF_DEFRAG_STOP
Problem: On a rebal stop, the migrator threads don't intimate the crawler thread to wake up in case it is waiting on signal from migrator thread. Change-Id: I3cc4be41a4db25f48fee059ebb79a97ee99dcd00 BUG: 1327507 Signed-off-by: Susant Palai <spalai@redhat.com> Reviewed-on: http://review.gluster.org/14004 Smoke: Gluster Build System <jenkins@build.gluster.com> NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org> CentOS-regression: Gluster Build System <jenkins@build.gluster.com> Reviewed-by: N Balachandran <nbalacha@redhat.com> Reviewed-by: Jeff Darcy <jdarcy@redhat.com>
This commit is contained in:
parent
3021a9ab66
commit
61b42d3cdc
@ -2070,6 +2070,10 @@ gf_defrag_task (void *opaque)
|
||||
while (_gf_true) {
|
||||
|
||||
if (defrag->defrag_status != GF_DEFRAG_STATUS_STARTED) {
|
||||
pthread_cond_broadcast (
|
||||
&defrag->rebalance_crawler_alarm);
|
||||
pthread_cond_broadcast (
|
||||
&defrag->parallel_migration_cond);
|
||||
goto out;
|
||||
}
|
||||
|
||||
@ -2133,6 +2137,13 @@ gf_defrag_task (void *opaque)
|
||||
|
||||
defrag->defrag_status =
|
||||
GF_DEFRAG_STATUS_FAILED;
|
||||
|
||||
pthread_cond_broadcast (
|
||||
&defrag->rebalance_crawler_alarm);
|
||||
|
||||
pthread_cond_broadcast (
|
||||
&defrag->parallel_migration_cond);
|
||||
|
||||
goto out;
|
||||
}
|
||||
|
||||
@ -2191,10 +2202,16 @@ gf_defrag_get_entry (xlator_t *this, int i, struct dht_container **container,
|
||||
xlator_t *hashed_subvol = NULL;
|
||||
xlator_t *cached_subvol = NULL;
|
||||
|
||||
if (defrag->defrag_status != GF_DEFRAG_STATUS_STARTED) {
|
||||
ret = -1;
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (dir_dfmeta->offset_var[i].readdir_done == 1) {
|
||||
ret = 0;
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (dir_dfmeta->fetch_entries[i] == 1) {
|
||||
ret = syncop_readdirp (conf->local_subvols[i], fd, 131072,
|
||||
dir_dfmeta->offset_var[i].offset,
|
||||
|
Loading…
x
Reference in New Issue
Block a user