diff options
author | Xavier Hernandez <xhernandez@datalab.es> | 2015-08-07 12:37:52 +0200 |
---|---|---|
committer | Pranith Kumar Karampuri <pkarampu@redhat.com> | 2015-08-14 02:09:46 -0700 |
commit | 289d00369f0ddb78f534735f7d3bf86268adac60 (patch) | |
tree | cbc347422a3871c8ea1a24ce8b21ec1ac7902962 /tests | |
parent | 7641eb8b469a6dd4db6db59d2a5ef4d5a65e1a61 (diff) |
cluster/ec: Fix write size in self-heal
Self-heal was always using a fixed block size to heal a file. This
was incorrect for dispersed volumes with a number of data bricks not
being a power of 2.
This patch adjusts the block size to a multiple of the stripe size
of the volume. It also propagates errors detected during the data
heal to stop healing the file and not mark it as healed.
Change-Id: I9ee3fde98a9e5d6116fd096ceef88686fd1d28e2
BUG: 1251446
Signed-off-by: Xavier Hernandez <xhernandez@datalab.es>
Reviewed-on: http://review.gluster.org/11862
Tested-by: NetBSD Build System <jenkins@build.gluster.org>
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Pranith Kumar Karampuri <pkarampu@redhat.com>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/bugs/disperse/bug-1251446.t | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/tests/bugs/disperse/bug-1251446.t b/tests/bugs/disperse/bug-1251446.t new file mode 100644 index 00000000000..f805539b946 --- /dev/null +++ b/tests/bugs/disperse/bug-1251446.t @@ -0,0 +1,50 @@ +#!/bin/bash + +. $(dirname $0)/../../include.rc +. $(dirname $0)/../../volume.rc + +cleanup + +TEST glusterd +TEST pidof glusterd +TEST $CLI volume create $V0 disperse 4 redundancy 1 $H0:$B0/${V0}{0..3} +TEST $CLI volume start $V0 +TEST glusterfs --entry-timeout=0 --attribute-timeout=0 -s $H0 --volfile-id $V0 $M0 +EXPECT_WITHIN $CHILD_UP_TIMEOUT "4" ec_child_up_count $V0 0 + +TEST dd if=/dev/urandom of=$M0/test1 bs=1024k count=2 +cs=$(sha1sum $M0/test1 | awk '{ print $1 }') + +TEST kill_brick $V0 $H0 $B0/${V0}0 +EXPECT '3' online_brick_count + +TEST cp $M0/test1 $M0/test2 +EXPECT "$cs" echo $(sha1sum $M0/test2 | awk '{ print $1 }') + +TEST $CLI volume start $V0 force +EXPECT '4' online_brick_count + +EXPECT_WITHIN $PROCESS_UP_TIMEOUT "[0-9][0-9]*" get_shd_process_pid +TEST $CLI volume heal $V0 full +EXPECT_WITHIN $HEAL_TIMEOUT "0" get_pending_heal_count $V0 + +EXPECT "699392" stat -c "%s" $B0/${V0}0/test2 + +# force cache clear +EXPECT_WITHIN $UMOUNT_TIMEOUT "Y" force_umount $M0 +TEST $CLI volume stop $V0 +TEST $CLI volume start $V0 +TEST glusterfs --entry-timeout=0 --attribute-timeout=0 -s $H0 --volfile-id $V0 $M0 +EXPECT_WITHIN $CHILD_UP_TIMEOUT "4" ec_child_up_count $V0 0 + +TEST kill_brick $V0 $H0 $B0/${V0}3 +EXPECT '3' online_brick_count + +EXPECT "$cs" echo $(sha1sum $M0/test2 | awk '{ print $1 }') + +## cleanup +EXPECT_WITHIN $UMOUNT_TIMEOUT "Y" force_umount $M0 +TEST $CLI volume stop $V0 +TEST $CLI volume delete $V0 + +cleanup; |