From 2def6bbfc72f9dd7ae6a16befdaf45ac1076b648 Mon Sep 17 00:00:00 2001 From: Joseph Fernandes Date: Tue, 4 Aug 2015 20:38:06 +0530 Subject: tier/ctr: CTR DB named lookup heal of cold tier during attach tier Heal hardlink in the db for already existing data in the cold tier during attach tier. i.e during fix layout do lookup to files in the cold tier. CTR xlator on the brick/server side does db update/insert of the hardlink on a namelookup. Currently the namedlookup is done synchronous to the fixlayout that is triggered by attach tier. This is not performant, adding more time to fixlayout. The performant approach is record the hardlinks on a compressed datastore and then do the namelookup asynchronously later, giving the ctr db eventual consistency master patch : http://review.gluster.org/#/c/11828/ >>Change-Id: I4ffc337fffe7d447804786851a9183a51b5044a9 >>BUG: 1252586 >>Signed-off-by: Joseph Fernandes >>Reviewed-on: http://review.gluster.org/11828 >>Tested-by: Gluster Build System >>Reviewed-by: Dan Lambright >>Tested-by: Dan Lambright Signed-off-by: Joseph Fernandes Change-Id: I61b185a54ae4e8c1d82804b95a278bfbea870987 BUG: 1261146 Reviewed-on: http://review.gluster.org/12331 Tested-by: NetBSD Build System Tested-by: Gluster Build System Reviewed-by: Dan Lambright Tested-by: Dan Lambright --- tests/basic/tier/legacy-many.t | 122 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 122 insertions(+) create mode 100644 tests/basic/tier/legacy-many.t (limited to 'tests') diff --git a/tests/basic/tier/legacy-many.t b/tests/basic/tier/legacy-many.t new file mode 100644 index 00000000000..17275494aba --- /dev/null +++ b/tests/basic/tier/legacy-many.t @@ -0,0 +1,122 @@ +#!/bin/bash + +. $(dirname $0)/../../include.rc +. $(dirname $0)/../../volume.rc + +LAST_BRICK=3 +CACHE_BRICK_FIRST=4 +CACHE_BRICK_LAST=5 +DEMOTE_TIMEOUT=12 +PROMOTE_TIMEOUT=5 +MIGRATION_TIMEOUT=10 +DEMOTE_FREQ=60 +PROMOTE_FREQ=4 +TEST_DIR="test_files" +NUM_FILES=20 + + +# Grab md5sum without file path (failed attempt notifications are discarded) +function fingerprint { + md5sum $1 2> /dev/null | grep --only-matching -m 1 '^[0-9a-f]*' +} + +# Create a large number of files. Store their md5 signatures. +function create_many_files { + mkdir ${TEST_DIR} + for i in `seq 1 $NUM_FILES`; do + dd if=/dev/urandom of=./${TEST_DIR}/i$i bs=1048576 count=1; + id[i]=$(fingerprint "./${TEST_DIR}/i$i"); + done +} + +function confirm_tier_removed { + $CLI system getspec $V0 | grep $1 + if [ $? == 0 ]; then + echo "1" + else + echo "0" + fi +} + +function confirm_vol_stopped { + $CLI volume stop $1 + if [ $? == 0 ]; then + echo "0" + else + echo "1" + fi +} + +function check_counters { + index=0 + ret=0 + rm -f /tmp/tc*.txt + echo "0" > /tmp/tc2.txt + + $CLI volume rebalance $V0 tier status | grep localhost > /tmp/tc.txt + + promote=`cat /tmp/tc.txt |awk '{print $2}'` + demote=`cat /tmp/tc.txt |awk '{print $3}'` + if [ "${promote}" != "${1}" ]; then + echo "1" > /tmp/tc2.txt + + elif [ "${demote}" != "${2}" ]; then + echo "2" > /tmp/tc2.txt + fi + + # temporarily disable non-Linux tests. + case $OSTYPE in + NetBSD | FreeBSD | Darwin) + echo "0" > /tmp/tc2.txt + ;; + esac + cat /tmp/tc2.txt +} + +function read_all { + for file in * + do + cat $file + done +} + +cleanup + +TEST glusterd +TEST pidof glusterd + +# Create distributed replica volume +TEST $CLI volume create $V0 replica 2 $H0:$B0/${V0}{0..$LAST_BRICK} +TEST $CLI volume start $V0 + +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 + +TEST $GFS --volfile-id=/$V0 --volfile-server=$H0 $M0; + +# Create a number of "legacy" files before attaching tier +cd $M0 +TEST create_many_files +wait + +# Attach tier +TEST $CLI volume attach-tier $V0 replica 2 $H0:$B0/${V0}$CACHE_BRICK_FIRST $H0:$B0/${V0}$CACHE_BRICK_LAST +TEST $CLI volume rebalance $V0 tier status + +TEST $CLI volume set $V0 cluster.tier-demote-frequency $DEMOTE_FREQ +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 + +# Read "legacy" files +drop_cache $M0 +cd ${TEST_DIR} +TEST read_all + +# Test to make sure files were promoted as expected +sleep $DEMOTE_TIMEOUT +EXPECT_WITHIN $DEMOTE_TIMEOUT "0" check_counters 20 0 + +cd; +cleanup -- cgit