summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorN Balachandran <nbalacha@redhat.com>2017-07-10 15:45:04 +0530
committerShyamsundar Ranganathan <srangana@redhat.com>2017-07-19 11:25:43 +0000
commit59d29cfc4300251b8bc92e41e5bc29790d8f2db6 (patch)
treec2ae9e8db03b1e7a8a503734c6f6f4f804bf3107
parent856aa0ff090fa08629493e7848e5c446a93a9f2d (diff)
cluster/dht: Clear clean_dst flag on target change
If the target of a file migration was changed because of min-free-disk limits, the dst_fd was closed but the clean_dst flag was not set to false. If the file could not be created on the new target for some reason, the ftruncate call to clean up the dst was sent on the now invalid fd causing the process to deadlock. > BUG: 1469029 > Signed-off-by: N Balachandran <nbalacha@redhat.com> > Reviewed-on: https://review.gluster.org/17735 > Smoke: Gluster Build System <jenkins@build.gluster.org> > CentOS-regression: Gluster Build System <jenkins@build.gluster.org> > Reviewed-by: Amar Tumballi <amarts@redhat.com> > Reviewed-by: Raghavendra G <rgowdapp@redhat.com> (cherry picked from commit bd71ca4fdf2554dd22c0db70af132a11b966ef38) Change-Id: I5bfa80f519b04567413d84229cf62d143c6e2f04 BUG: 1469459 Signed-off-by: N Balachandran <nbalacha@redhat.com> Reviewed-on: https://review.gluster.org/17745 Smoke: Gluster Build System <jenkins@build.gluster.org> Reviewed-by: Susant Palai <spalai@redhat.com> CentOS-regression: Gluster Build System <jenkins@build.gluster.org> Reviewed-by: Shyamsundar Ranganathan <srangana@redhat.com>
-rw-r--r--xlators/cluster/dht/src/dht-rebalance.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/xlators/cluster/dht/src/dht-rebalance.c b/xlators/cluster/dht/src/dht-rebalance.c
index 97bd6bea6b7..6fdc5b04073 100644
--- a/xlators/cluster/dht/src/dht-rebalance.c
+++ b/xlators/cluster/dht/src/dht-rebalance.c
@@ -1645,10 +1645,14 @@ dht_migrate_file (xlator_t *this, loc_t *loc, xlator_t *from, xlator_t *to,
}
syncop_close (dst_fd);
+ dst_fd = NULL;
old_target = to;
to = new_target;
+ clean_dst = _gf_false;
+
+
/* if the file migration is successful to this new target, then
* update the xattr on the old destination to point the new
* destination. We need to do update this only post migration
@@ -1663,6 +1667,7 @@ dht_migrate_file (xlator_t *this, loc_t *loc, xlator_t *from, xlator_t *to,
} else {
gf_msg (this->name, GF_LOG_INFO, 0, 0, "destination for file "
"- %s is changed to - %s", loc->path, to->name);
+ clean_dst = _gf_true;
}
}