diff options
| author | Susant Palai <spalai@redhat.com> | 2016-04-15 05:15:33 -0400 | 
|---|---|---|
| committer | Jeff Darcy <jdarcy@redhat.com> | 2016-04-26 12:02:27 -0700 | 
| commit | 034c986b9b665714aca09e5422bef24466604115 (patch) | |
| tree | e31e83c64de36aaf246c5534c26145071c868e16 | |
| parent | 82b69e2554c5293bc3b15e737e246c4c517b2421 (diff) | |
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 <nbalacha@redhat.com>
Signed-off-by: Susant Palai <spalai@redhat.com>
Reviewed-on: http://review.gluster.org/14076
NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org>
CentOS-regression: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Jeff Darcy <jdarcy@redhat.com>
Smoke: Gluster Build System <jenkins@build.gluster.com>
| -rw-r--r-- | xlators/cluster/dht/src/dht-rebalance.c | 17 | 
1 files changed, 17 insertions, 0 deletions
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,  | 
