summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xtests/basic/tier/tier.t11
-rw-r--r--xlators/cluster/dht/src/dht-common.c31
2 files changed, 24 insertions, 18 deletions
diff --git a/tests/basic/tier/tier.t b/tests/basic/tier/tier.t
index 289fc2935b0..b8aefdfa305 100755
--- a/tests/basic/tier/tier.t
+++ b/tests/basic/tier/tier.t
@@ -137,6 +137,11 @@ TEST ! $CLI volume set $V0 cluster.tier-demote-frequency 4
TEST ! $CLI volume tier $V0 detach commit force
TEST $CLI volume tier $V0 attach replica 2 $H0:$B0/${V0}$CACHE_BRICK_FIRST $H0:$B0/${V0}$CACHE_BRICK_LAST
+# create a file, make sure it can be deleted after attach tier.
+TEST $GFS --volfile-id=/$V0 --volfile-server=$H0 $M0;
+cd $M0
+TEST touch delete_me.txt
+
# stop the volume and restart it. The rebalance daemon should restart.
TEST $CLI volume stop $V0
@@ -156,10 +161,7 @@ TEST $CLI volume set $V0 cluster.tier-promote-frequency $PROMOTE_FREQ
TEST $CLI volume set $V0 cluster.read-freq-threshold 0
TEST $CLI volume set $V0 cluster.write-freq-threshold 0
-TEST $GFS --volfile-id=/$V0 --volfile-server=$H0 $M0;
-
# Basic operations.
-cd $M0
TEST stat .
TEST mkdir d1
TEST [ -d d1 ]
@@ -167,6 +169,7 @@ TEST touch d1/file1
TEST mkdir d1/d2
TEST [ -d d1/d2 ]
TEST find d1
+TEST rm --interactive=never delete_me.txt
mkdir /tmp/d1
# Create a file. It should be on the fast tier.
@@ -199,7 +202,7 @@ cat d1/data3.txt
sleep $PROMOTE_TIMEOUT
sleep $DEMOTE_FREQ
-EXPECT_WITHIN $DEMOTE_TIMEOUT "0" check_counters 2 6
+EXPECT_WITHIN $DEMOTE_TIMEOUT "0" check_counters 2 7
# stop gluster, when it comes back info file should have tiered volume
killall glusterd
diff --git a/xlators/cluster/dht/src/dht-common.c b/xlators/cluster/dht/src/dht-common.c
index 4a55905f36a..ef1776beb30 100644
--- a/xlators/cluster/dht/src/dht-common.c
+++ b/xlators/cluster/dht/src/dht-common.c
@@ -4485,6 +4485,7 @@ dht_readdirp_cbk (call_frame_t *frame, void *cookie, xlator_t *this, int op_ret,
xlator_t *hashed_subvol = 0;
int ret = 0;
int readdir_optimize = 0;
+ dht_inode_ctx_t *ctx = NULL;
INIT_LIST_HEAD (&entries.list);
prev = cookie;
@@ -4578,20 +4579,22 @@ list:
if (orig_entry->dict)
entry->dict = dict_ref (orig_entry->dict);
- /* making sure we set the inode ctx right with layout,
- currently possible only for non-directories, so for
- directories don't set entry inodes */
- if (!IA_ISDIR(entry->d_stat.ia_type) && orig_entry->inode) {
- ret = dht_layout_preset (this, prev->this,
- orig_entry->inode);
- if (ret)
- gf_msg (this->name, GF_LOG_WARNING, 0,
- DHT_MSG_LAYOUT_SET_FAILED,
- "failed to link the layout in inode");
- entry->inode = inode_ref (orig_entry->inode);
- } else if (orig_entry->inode) {
- dht_inode_ctx_time_update (orig_entry->inode, this,
- &entry->d_stat, 1);
+ /* For non-directories don't set inode ctx from readdirp cbk,
+ * let them populate on first lookup, for directories
+ * don't set entry inodes */
+ if (orig_entry->inode) {
+ ret = dht_inode_ctx_get (orig_entry->inode, this, &ctx);
+ if (ret == -1) {
+ entry->inode = NULL;
+ } else {
+ entry->inode = inode_ref (orig_entry->inode);
+ if (IA_ISDIR (entry->d_stat.ia_type)) {
+ dht_inode_ctx_time_update (orig_entry->inode,
+ this, &entry->d_stat, 1);
+
+ }
+
+ }
}
list_add_tail (&entry->list, &entries.list);