summaryrefslogtreecommitdiffstats
path: root/xlators/cluster/dht
diff options
context:
space:
mode:
authorN Balachandran <nbalacha@redhat.com>2015-11-09 15:49:50 +0530
committerDan Lambright <dlambrig@redhat.com>2015-11-18 07:16:12 -0800
commita1e4be4d277c8150657f7b9fd4b72dcdd639523d (patch)
tree068b9e1924b2138cbc37175b219e94ded90ae4be /xlators/cluster/dht
parentcb76371a56eb90a6f2ac126c876d7a2dc203e16c (diff)
cluster/tier: Do not delete linkto file on demotion
The current DHT migration code will always delete the src linkto file after migration as dht always moves files to the hashed subvol. This is not the case in tiering. The lack of linkto files causes rename to fail leaving 2 files with the same name but different gfids on the volume. Modified to leave the linkto file behind if the source volume is the hashed subvolume. Change-Id: I2b99f7d34b4b719aee6232dc40c6a8f8ba88225d BUG: 1279376 Signed-off-by: N Balachandran <nbalacha@redhat.com> Reviewed-on: http://review.gluster.org/12551 Reviewed-by: Dan Lambright <dlambrig@redhat.com> Tested-by: Dan Lambright <dlambrig@redhat.com>
Diffstat (limited to 'xlators/cluster/dht')
-rw-r--r--xlators/cluster/dht/src/dht-rebalance.c9
-rw-r--r--xlators/cluster/dht/src/tier.h2
2 files changed, 9 insertions, 2 deletions
diff --git a/xlators/cluster/dht/src/dht-rebalance.c b/xlators/cluster/dht/src/dht-rebalance.c
index 7e9ba11fb26..f33ba227797 100644
--- a/xlators/cluster/dht/src/dht-rebalance.c
+++ b/xlators/cluster/dht/src/dht-rebalance.c
@@ -9,6 +9,7 @@
*/
+#include "tier.h"
#include "dht-common.h"
#include "xlator.h"
#include "syscall.h"
@@ -1177,6 +1178,7 @@ dht_migrate_file (xlator_t *this, loc_t *loc, xlator_t *from, xlator_t *to,
gf_boolean_t clean_src = _gf_false;
gf_boolean_t clean_dst = _gf_false;
int log_level = GF_LOG_INFO;
+ gf_boolean_t delete_src_linkto = _gf_true;
defrag = conf->defrag;
if (!defrag)
@@ -1463,9 +1465,11 @@ dht_migrate_file (xlator_t *this, loc_t *loc, xlator_t *from, xlator_t *to,
/* store size of previous migrated file */
if (defrag->tier_conf.is_tier) {
- if (from == conf->subvolumes[0]) {
+ if (from != TIER_HASHED_SUBVOL) {
defrag->tier_conf.st_last_promoted_size = stbuf.ia_size;
} else {
+ /* Don't delete the linkto file on the hashed subvol */
+ delete_src_linkto = _gf_false;
defrag->tier_conf.st_last_demoted_size = stbuf.ia_size;
}
}
@@ -1532,8 +1536,9 @@ dht_migrate_file (xlator_t *this, loc_t *loc, xlator_t *from, xlator_t *to,
rcvd_enoent_from_src = 1;
}
+
if ((gf_uuid_compare (empty_iatt.ia_gfid, loc->gfid) == 0 ) &&
- (!rcvd_enoent_from_src)) {
+ (!rcvd_enoent_from_src) && delete_src_linkto) {
/* take out the source from namespace */
ret = syncop_unlink (from, loc, NULL, NULL);
if (ret) {
diff --git a/xlators/cluster/dht/src/tier.h b/xlators/cluster/dht/src/tier.h
index 0f8107924ea..2a72ae2caf6 100644
--- a/xlators/cluster/dht/src/tier.h
+++ b/xlators/cluster/dht/src/tier.h
@@ -33,6 +33,8 @@
#define PROMOTION_QFILE "promotequeryfile"
#define DEMOTION_QFILE "demotequeryfile"
+#define TIER_HASHED_SUBVOL conf->subvolumes[1]
+
#define GET_QFILE_PATH(is_promotion)\
(is_promotion) ? promotion_qfile : demotion_qfile