From 034c986b9b665714aca09e5422bef24466604115 Mon Sep 17 00:00:00 2001 From: Susant Palai Date: Fri, 15 Apr 2016 05:15:33 -0400 Subject: dht/rebalance: Handle GF_DEFRAG_STOP Backport of http://review.gluster.org/14004 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. BUG: 1330529 Change-Id: I9019a715c7b4673b8bb5a75d7d33a18add85ce33 Reviewed-by: N Balachandran Signed-off-by: Susant Palai Reviewed-on: http://review.gluster.org/14076 NetBSD-regression: NetBSD Build System CentOS-regression: Gluster Build System Reviewed-by: Jeff Darcy Smoke: Gluster Build System --- xlators/cluster/dht/src/dht-rebalance.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'xlators/cluster/dht') diff --git a/xlators/cluster/dht/src/dht-rebalance.c b/xlators/cluster/dht/src/dht-rebalance.c index de241352d00..f41aa224642 100644 --- a/xlators/cluster/dht/src/dht-rebalance.c +++ b/xlators/cluster/dht/src/dht-rebalance.c @@ -2074,6 +2074,10 @@ gf_defrag_task (void *opaque) while (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; } @@ -2137,6 +2141,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; } @@ -2195,10 +2206,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, -- cgit