diff options
author | Pranith Kumar K <pkarampu@redhat.com> | 2015-01-08 15:39:40 +0530 |
---|---|---|
committer | Pranith Kumar Karampuri <pkarampu@redhat.com> | 2015-01-28 19:49:53 -0800 |
commit | a48b18d6f661f863371e625084a88a01aaf989f0 (patch) | |
tree | a45a7bad629f4c2b37670db79ab03e80ab1b0c30 /tests | |
parent | b17122ffc75c65bda2cf3b3d99832bbf2718e8d3 (diff) |
cluster/ec: Handle CHILD UP/DOWN in all cases
Problem:
When all the bricks are down at the time of mounting the volume, then mount
command hangs.
Fix:
1. Ignore all CHILD_CONNECTING events comming from subvolumes.
2. On timer expiration (without enough up or down childs) send
CHILD_DOWN.
3. Once enough up or down subvolumes are detected, send the appropriate event.
When rest of the subvols go up/down without changing the overall
ec-up/ec-down send CHILD_MODIFIED to parent subvols.
Change-Id: Ie0194dbadef2dce36ab5eb7beece84a6bf3c631c
BUG: 1179180
Signed-off-by: Pranith Kumar K <pkarampu@redhat.com>
Reviewed-on: http://review.gluster.org/9396
Reviewed-by: Xavier Hernandez <xhernandez@datalab.es>
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/basic/ec/ec-notify.t | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/tests/basic/ec/ec-notify.t b/tests/basic/ec/ec-notify.t new file mode 100644 index 00000000000..586be91bdbe --- /dev/null +++ b/tests/basic/ec/ec-notify.t @@ -0,0 +1,79 @@ +#!/bin/bash + +. $(dirname $0)/../../include.rc +. $(dirname $0)/../../volume.rc + +# This test checks notify part of ec + +cleanup +TEST glusterd +TEST pidof glusterd +TEST $CLI volume create $V0 disperse 3 redundancy 1 $H0:$B0/${V0}{0..2} +TEST $CLI volume start $V0 + +#First time mount tests. +# When all the bricks are up, mount should succeed and up-children +# count should be 3 +TEST $GFS --volfile-id=/$V0 --volfile-server=$H0 $M0; +EXPECT_WITHIN $CHILD_UP_TIMEOUT "3" ec_child_up_count $V0 0 +TEST stat $M0 +EXPECT_WITHIN $UMOUNT_TIMEOUT "Y" force_umount $M0 + +# When the volume is stopped mount succeeds and up-children will be 0 +TEST $CLI volume stop $V0 +TEST $GFS --volfile-id=/$V0 --volfile-server=$H0 $M0; +# Wait for 5 seconds even after that up_count should show 0 +sleep 5; +EXPECT_WITHIN $CHILD_UP_TIMEOUT "0" ec_child_up_count $V0 0 +TEST ! stat $M0 +EXPECT_WITHIN $UMOUNT_TIMEOUT "Y" force_umount $M0 + +# When 2 bricks are up, mount should succeed and up-children +# count should be 2 + +TEST $CLI volume start $V0 +TEST kill_brick $V0 $H0 $B0/${V0}2 +TEST $GFS --volfile-id=/$V0 --volfile-server=$H0 $M0; +EXPECT_WITHIN $CHILD_UP_TIMEOUT "2" ec_child_up_count $V0 0 +TEST stat $M0 +EXPECT_WITHIN $UMOUNT_TIMEOUT "Y" force_umount $M0 + +# When only 1 brick is up mount should fail. +TEST kill_brick $V0 $H0 $B0/${V0}1 +TEST $GFS --volfile-id=/$V0 --volfile-server=$H0 $M0; +# Wait for 5 seconds even after that up_count should show 1 +sleep 5 +EXPECT_WITHIN $CHILD_UP_TIMEOUT "1" ec_child_up_count $V0 0 +TEST ! stat $M0 +EXPECT_WITHIN $UMOUNT_TIMEOUT "Y" force_umount $M0 + +# Mount already succeeded. Test that the brick up down are leading to correct +# state changes in ec. +TEST $CLI volume stop $V0 +TEST $CLI volume start $V0 force +TEST $GFS --volfile-id=/$V0 --volfile-server=$H0 $M0; +EXPECT_WITHIN $CHILD_UP_TIMEOUT "3" ec_child_up_count $V0 0 +TEST touch $M0/a + +# kill 1 brick and the up_count should become 2, fops should still succeed +TEST kill_brick $V0 $H0 $B0/${V0}1 +EXPECT_WITHIN $CHILD_UP_TIMEOUT "2" ec_child_up_count $V0 0 +TEST touch $M0/b + +# kill one more brick and the up_count should become 1, fops should fail +TEST kill_brick $V0 $H0 $B0/${V0}2 +EXPECT_WITHIN $CHILD_UP_TIMEOUT "1" ec_child_up_count $V0 0 +TEST ! touch $M0/c + +# kill one more brick and the up_count should become 0, fops should still fail +TEST kill_brick $V0 $H0 $B0/${V0}0 +EXPECT_WITHIN $CHILD_UP_TIMEOUT "0" ec_child_up_count $V0 0 +TEST ! touch $M0/c + +# Bring up all the bricks up and see that up_count is 3 and fops are succeeding +# again. +TEST $CLI volume start $V0 force +EXPECT_WITHIN $CHILD_UP_TIMEOUT "3" ec_child_up_count $V0 0 +TEST touch $M0/c + +cleanup |