diff options
author | N Balachandran <nbalacha@redhat.com> | 2018-02-05 13:39:22 +0530 |
---|---|---|
committer | N Balachandran <nbalacha@redhat.com> | 2018-02-05 13:43:08 +0530 |
commit | 3f824314f6367206681152c7523bacbfb30fa945 (patch) | |
tree | c917a6d46b17343365e1b9ebd15498f825b2a45d /xlators/cluster/dht | |
parent | e7ee4d8949b015a1421d4d97b763ccb4dcfc6eb1 (diff) |
cluster/dht: Cleanup on fallocate failure
It looks like fallocate leaves a non-empty
file behind in case of some failures. We now
truncate the file to 0 bytes on failure in
__dht_rebalance_create_dst_file.
Change-Id: Ia4ad7b94bb3624a301fcc87d9e36c4dc751edb59
BUG: 1541916
Signed-off-by: N Balachandran <nbalacha@redhat.com>
Diffstat (limited to 'xlators/cluster/dht')
-rw-r--r-- | xlators/cluster/dht/src/dht-rebalance.c | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/xlators/cluster/dht/src/dht-rebalance.c b/xlators/cluster/dht/src/dht-rebalance.c index d9c3149049c..4ebdf05387a 100644 --- a/xlators/cluster/dht/src/dht-rebalance.c +++ b/xlators/cluster/dht/src/dht-rebalance.c @@ -676,6 +676,7 @@ __dht_rebalance_create_dst_file (xlator_t *this, xlator_t *to, xlator_t *from, int *fop_errno) { int ret = -1; + int ret2 = -1; fd_t *fd = NULL; struct iatt new_stbuf = {0,}; struct iatt check_stbuf= {0,}; @@ -836,7 +837,7 @@ __dht_rebalance_create_dst_file (xlator_t *this, xlator_t *to, xlator_t *from, if (-ret == ENOENT) { gf_msg (this->name, GF_LOG_ERROR, -ret, - DHT_MSG_MIGRATE_FILE_FAILED, "%s: file does not exists" + DHT_MSG_MIGRATE_FILE_FAILED, "%s: file does not exist" "on %s", loc->path, to->name); *fop_errno = -ret; ret = -1; @@ -868,7 +869,22 @@ __dht_rebalance_create_dst_file (xlator_t *this, xlator_t *to, xlator_t *from, DHT_MSG_MIGRATE_FILE_FAILED, "fallocate failed for %s on %s", loc->path, to->name); + *fop_errno = -ret; + + /* fallocate does not release the space + * in some cases + */ + ret2 = syncop_ftruncate (to, fd, 0, + NULL, NULL); + if (ret2 < 0) { + gf_msg (this->name, + GF_LOG_WARNING, -ret2, + DHT_MSG_MIGRATE_FILE_FAILED, + "ftruncate failed for " + "%s on %s", + loc->path, to->name); + } goto out; } } |