From b2a1be0f7bf5e19b266ee57c3287ee9f9170e2f7 Mon Sep 17 00:00:00 2001 From: Xavier Hernandez Date: Mon, 6 Oct 2014 16:34:58 +0200 Subject: ec: Fix incorrect management of healed bricks The final lookup made to restore final file attributes after a self-heal did clear the mask of bad bricks, causing that the final setattr won't modify any brick at all. This caused that some attriutes, specially the modification time of the file didn't get updated properly. Now the mask of healed bricks is saved before doing the last lookup. It's also used to correctly report the repaired bricks. This is a backport of http://review.gluster.org/8905/ Change-Id: Ib94083c9e1b562515dfb54f9574120f1f031dccc BUG: 1149725 Signed-off-by: Xavier Hernandez Reviewed-on: http://review.gluster.org/8906 Reviewed-by: Dan Lambright Tested-by: Gluster Build System Reviewed-by: Vijay Bellur --- tests/basic/ec/self-heal.t | 63 +++++++++++++++++++++++----------------------- 1 file changed, 31 insertions(+), 32 deletions(-) (limited to 'tests') diff --git a/tests/basic/ec/self-heal.t b/tests/basic/ec/self-heal.t index 99cfd9420aa..b7f09a56cd6 100644 --- a/tests/basic/ec/self-heal.t +++ b/tests/basic/ec/self-heal.t @@ -12,7 +12,7 @@ if [ ! -d $tmp ]; then exit 1 fi -TESTS_EXPECTED_IN_LOOP=85 +TESTS_EXPECTED_IN_LOOP=250 TEST glusterd TEST pidof glusterd @@ -34,13 +34,20 @@ done cd $M0 TEST cp $tmp/test test TEST chmod 644 test +TEST touch -d "@946681200" test EXPECT "-rw-r--r--" stat -c "%A" test +EXPECT "946681200" stat -c "%Y" test for idx1 in {0..5}; do TEST chmod 666 ${brick[$idx1]}/test + TEST truncate -s 0 ${brick[$idx1]}/test + TEST setfattr -n user.test -v "test1" ${brick[$idx1]}/test sleep 1 EXPECT "-rw-r--r--" stat -c "%A" test - EXPECT_WITHIN 5 "-rw-r--r--" stat -c "%A" ${brick[$idx1]}/test + EXPECT_WITHIN $HEAL_TIMEOUT "262144" stat -c "%s" ${brick[$idx1]}/test + EXPECT_WITHIN $HEAL_TIMEOUT "-rw-r--r--" stat -c "%A" ${brick[$idx1]}/test + EXPECT_WITHIN $HEAL_TIMEOUT "946681200" stat -c "%Y" ${brick[$idx1]}/test + TEST ! getfattr -n user.test ${brick[$idx1]}/test done for idx1 in {0..4}; do @@ -48,32 +55,24 @@ for idx1 in {0..4}; do if [ $idx1 -ne $idx2 ]; then TEST chmod 666 ${brick[$idx1]}/test TEST chmod 600 ${brick[$idx2]}/test + TEST truncate -s 0 ${brick[$idx1]}/test + TEST truncate -s 2097152 ${brick[$idx2]}/test + TEST setfattr -n user.test -v "test1" ${brick[$idx1]}/test + TEST setfattr -n user.test -v "test2" ${brick[$idx2]}/test sleep 1 EXPECT "-rw-r--r--" stat -c "%A" test - EXPECT_WITHIN 5 "-rw-r--r--" stat -c "%A" ${brick[$idx1]}/test - EXPECT_WITHIN 5 "-rw-r--r--" stat -c "%A" ${brick[$idx2]}/test + EXPECT_WITHIN $HEAL_TIMEOUT "262144" stat -c "%s" ${brick[$idx1]}/test + EXPECT_WITHIN $HEAL_TIMEOUT "262144" stat -c "%s" ${brick[$idx2]}/test + EXPECT_WITHIN $HEAL_TIMEOUT "-rw-r--r--" stat -c "%A" ${brick[$idx1]}/test + EXPECT_WITHIN $HEAL_TIMEOUT "-rw-r--r--" stat -c "%A" ${brick[$idx2]}/test + EXPECT_WITHIN $HEAL_TIMEOUT "946681200" stat -c "%Y" ${brick[$idx1]}/test + EXPECT_WITHIN $HEAL_TIMEOUT "946681200" stat -c "%Y" ${brick[$idx2]}/test + TEST ! getfattr -n user.test ${brick[$idx1]}/test + TEST ! getfattr -n user.test ${brick[$idx2]}/test fi done done -TEST truncate -s 0 ${brick[0]}/test -TEST truncate -s 2097152 ${brick[1]}/test -TEST setfattr -n user.test -v "test1" ${brick[0]}/test -TEST setfattr -n user.test -v "test2" ${brick[1]}/test -TEST chmod 600 ${brick[0]}/test -TEST chmod 666 ${brick[1]}/test -sleep 1 - -EXPECT "1048576" stat -c "%s" test -TEST ! getfattr -n user.test test - -EXPECT_WITHIN 5 "262144" stat -c "%s" ${brick[0]}/test -EXPECT_WITHIN 5 "262144" stat -c "%s" ${brick[1]}/test -TEST ! getfattr -n user.test ${brick[0]}/test -TEST ! getfattr -n user.test ${brick[1]}/test -EXPECT "-rw-r--r--" stat -c "%A" ${brick[0]}/test -EXPECT "-rw-r--r--" stat -c "%A" ${brick[1]}/test - TEST kill_brick $V0 $H0 $B0/${V0}0 TEST kill_brick $V0 $H0 $B0/${V0}1 TEST cp $tmp/test test2 @@ -101,22 +100,22 @@ cd $M0 EXPECT "1048576" stat -c "%s" test2 EXPECT "-rwxrwxrwx" stat -c "%A" test2 -EXPECT_WITHIN 5 "262144" stat -c "%s" ${brick[0]}/test2 -EXPECT_WITHIN 5 "262144" stat -c "%s" ${brick[1]}/test2 -EXPECT "-rwxrwxrwx" stat -c "%A" ${brick[0]}/test2 -EXPECT "-rwxrwxrwx" stat -c "%A" ${brick[1]}/test2 +EXPECT_WITHIN $HEAL_TIMEOUT "262144" stat -c "%s" ${brick[0]}/test2 +EXPECT_WITHIN $HEAL_TIMEOUT "262144" stat -c "%s" ${brick[1]}/test2 +EXPECT_WITHIN $HEAL_TIMEOUT "-rwxrwxrwx" stat -c "%A" ${brick[0]}/test2 +EXPECT_WITHIN $HEAL_TIMEOUT "-rwxrwxrwx" stat -c "%A" ${brick[1]}/test2 TEST ls -al dir1 -EXPECT_WITHIN 5 "1" eval "if [ -d ${brick[0]}/dir1 ]; then echo 1; fi" -EXPECT_WITHIN 5 "1" eval "if [ -d ${brick[1]}/dir1 ]; then echo 1; fi" +EXPECT_WITHIN $HEAL_TIMEOUT "1" eval "if [ -d ${brick[0]}/dir1 ]; then echo 1; fi" +EXPECT_WITHIN $HEAL_TIMEOUT "1" eval "if [ -d ${brick[1]}/dir1 ]; then echo 1; fi" TEST [ -h test3 ] -EXPECT_WITHIN 5 "1" eval "if [ -h ${brick[0]}/test3 ]; then echo 1; fi" -EXPECT_WITHIN 5 "1" eval "if [ -h ${brick[1]}/test3 ]; then echo 1; fi" +EXPECT_WITHIN $HEAL_TIMEOUT "1" eval "if [ -h ${brick[0]}/test3 ]; then echo 1; fi" +EXPECT_WITHIN $HEAL_TIMEOUT "1" eval "if [ -h ${brick[1]}/test3 ]; then echo 1; fi" EXPECT "2" stat -c "%h" test4 -EXPECT_WITHIN 5 "3" stat -c "%h" ${brick[0]}/test4 -EXPECT_WITHIN 5 "3" stat -c "%h" ${brick[1]}/test4 +EXPECT_WITHIN $HEAL_TIMEOUT "3" stat -c "%h" ${brick[0]}/test4 +EXPECT_WITHIN $HEAL_TIMEOUT "3" stat -c "%h" ${brick[1]}/test4 rm -rf $tmp -- cgit