path: root/xlators/cluster/dht/src/dht-rebalance.c
diff options
authorshishir gowda <>2013-02-25 10:02:15 +0530
committerAnand Avati <>2013-02-25 23:01:28 -0800
commit164c9586ae3b00128dbcea7791fc6178ae82b3af (patch)
treec0ae19a43d8eb0975a5944ba1649c335fb798ab9 /xlators/cluster/dht/src/dht-rebalance.c
parent3f1ef648b969cb0acde4d920fc0ac21f533b51d0 (diff)
cluster/distribute: Preserve file size during rebalance migration
If holes are encountered, then we do not write these to the dst, which sometimes causes file size to be lesser than src. Data is not corrupted, as when non-zero reads are received, we do write that data. Calling a truncrate to give file size to prevent it from being truncated to less than src in case the file end has holes. Thanks to Brian Foster for providing the test case Change-Id: I3cdd143b63ec8d797273d76189dff8b05eb9e551 BUG: 915554 Signed-off-by: shishir gowda <> Reviewed-on: Tested-by: Gluster Build System <> Reviewed-by: Anand Avati <>
Diffstat (limited to 'xlators/cluster/dht/src/dht-rebalance.c')
1 files changed, 6 insertions, 0 deletions
diff --git a/xlators/cluster/dht/src/dht-rebalance.c b/xlators/cluster/dht/src/dht-rebalance.c
index 0652a7aa7..866e38dc7 100644
--- a/xlators/cluster/dht/src/dht-rebalance.c
+++ b/xlators/cluster/dht/src/dht-rebalance.c
@@ -300,6 +300,12 @@ __dht_rebalance_create_dst_file (xlator_t *to, xlator_t *from, loc_t *loc, struc
goto out;
+ ret = syncop_ftruncate (to, fd, stbuf->ia_size);
+ if (ret < 0)
+ gf_log (this->name, GF_LOG_ERROR,
+ "ftruncate failed for %s on %s (%s)",
+ loc->path, to->name, strerror (errno));
ret = syncop_fsetattr (to, fd, stbuf,