summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xtests/basic/tier/tier.t21
-rw-r--r--xlators/cluster/dht/src/tier.c16
2 files changed, 34 insertions, 3 deletions
diff --git a/tests/basic/tier/tier.t b/tests/basic/tier/tier.t
index b3daae35843..ee730e727bc 100755
--- a/tests/basic/tier/tier.t
+++ b/tests/basic/tier/tier.t
@@ -52,6 +52,15 @@ function confirm_vol_stopped {
fi
}
+function check_counters_nonzero {
+ $CLI volume rebalance $V0 tier status | grep ' 0 '
+ if [ $? == 0 ]; then
+ echo "1"
+ else
+ echo "0"
+ fi
+}
+
DEMOTE_TIMEOUT=12
PROMOTE_TIMEOUT=5
MIGRATION_TIMEOUT=10
@@ -62,12 +71,17 @@ TEST pidof glusterd
TEST $CLI volume create $V0 replica 2 $H0:$B0/${V0}{0..$LAST_BRICK}
# testing bug 1215122, ie should fail if replica count and bricks are not compatible.
+
TEST ! $CLI volume attach-tier $V0 replica 5 $H0:$B0/${V0}$CACHE_BRICK_FIRST $H0:$B0/${V0}$CACHE_BRICK_LAST
TEST $CLI volume start $V0
+# The following two commands instigate a graph switch. Do them
+# before attaching the tier. If done on a tiered volume the rebalance
+# daemon will terminate and must be restarted manually.
TEST $CLI volume set $V0 performance.quick-read off
TEST $CLI volume set $V0 performance.io-cache off
+
TEST $CLI volume set $V0 features.ctr-enabled on
#Not a tier volume
@@ -78,6 +92,8 @@ TEST ! $CLI volume detach-tier $V0 commit force
TEST $CLI volume attach-tier $V0 replica 2 $H0:$B0/${V0}$CACHE_BRICK_FIRST $H0:$B0/${V0}$CACHE_BRICK_LAST
+$CLI volume rebalance $V0 tier status
+
#Tier options expect non-negative value
TEST ! $CLI volume set $V0 cluster.tier-promote-frequency -1
@@ -128,13 +144,12 @@ sleep 5
EXPECT_WITHIN $PROMOTE_TIMEOUT "0" file_on_fast_tier d1/data2.txt
EXPECT_WITHIN $PROMOTE_TIMEOUT "0" file_on_fast_tier d1/data3.txt
+EXPECT "0" check_counters_nonzero
+
# stop gluster, when it comes back info file should have tiered volume
killall glusterd
TEST glusterd
-# Test rebalance commands
-TEST $CLI volume rebalance $V0 tier status
-
TEST $CLI volume detach-tier $V0 start
TEST $CLI volume detach-tier $V0 commit force
diff --git a/xlators/cluster/dht/src/tier.c b/xlators/cluster/dht/src/tier.c
index c8c6ad94c7e..650414c50d9 100644
--- a/xlators/cluster/dht/src/tier.c
+++ b/xlators/cluster/dht/src/tier.c
@@ -776,6 +776,8 @@ tier_start (xlator_t *this, gf_defrag_info_t *defrag)
pthread_t demote_thread;
gf_boolean_t is_promotion_triggered = _gf_false;
gf_boolean_t is_demotion_triggered = _gf_false;
+ xlator_t *any = NULL;
+ xlator_t *xlator = NULL;
conf = this->private;
@@ -798,6 +800,20 @@ tier_start (xlator_t *this, gf_defrag_info_t *defrag)
while (1) {
+ /*
+ * Check if a graph switch occured. If so, stop migration
+ * thread. It will need to be restarted manually.
+ */
+ any = THIS->ctx->active->first;
+ xlator = xlator_search_by_name(any, this->name);
+
+ if (xlator != this) {
+ gf_msg (this->name, GF_LOG_INFO, 0,
+ DHT_MSG_LOG_TIER_STATUS,
+ "Detected graph switch. Exiting migration daemon.");
+ goto out;
+ }
+
sleep(1);
if (defrag->defrag_status != GF_DEFRAG_STATUS_STARTED) {