diff options
Diffstat (limited to 'tests/bugs')
| -rwxr-xr-x | tests/bugs/bug-853258.t | 45 | ||||
| -rwxr-xr-x | tests/bugs/overlap.py | 59 | 
2 files changed, 104 insertions, 0 deletions
diff --git a/tests/bugs/bug-853258.t b/tests/bugs/bug-853258.t new file mode 100755 index 00000000..c702e6f3 --- /dev/null +++ b/tests/bugs/bug-853258.t @@ -0,0 +1,45 @@ +#!/bin/bash + +. $(dirname $0)/../include.rc +. $(dirname $0)/../volume.rc + +cleanup; + +TEST glusterd +TEST pidof glusterd + +mkdir -p $H0:$B0/${V0}0 +mkdir -p $H0:$B0/${V0}1 +mkdir -p $H0:$B0/${V0}2 +mkdir -p $H0:$B0/${V0}3 + +# Create and start a volume. +TEST $CLI volume create $V0 $H0:$B0/${V0}0 $H0:$B0/${V0}1 $H0:$B0/${V0}2 +TEST $CLI volume start $V0 +EXPECT_WITHIN 15 'Started' volinfo_field $V0 'Status'; + +# Force assignment of initial ranges. +TEST $CLI volume rebalance $V0 fix-layout start +EXPECT_WITHIN 15 "success:" rebalance_status_field $V0 + +# Get the original values. +xattrs="" +for i in $(seq 0 2); do +	xattrs="$xattrs $(dht_get_layout $B0/${V0}$i)" +done + +# Expand the volume and force assignment of new ranges. +TEST $CLI volume add-brick $V0 $H0:$B0/${V0}3 +# Force assignment of initial ranges. +TEST $CLI volume rebalance $V0 fix-layout start +EXPECT_WITHIN 15 "success:" rebalance_status_field $V0 + +for i in $(seq 0 3); do +	xattrs="$xattrs $(dht_get_layout $B0/${V0}$i)" +done + +overlap=$($(dirname $0)/overlap.py $xattrs) +# 2863311531 = 0xaaaaaaab = 2/3 overlap +TEST [ "$overlap" -ge 2863311531 ] + +cleanup diff --git a/tests/bugs/overlap.py b/tests/bugs/overlap.py new file mode 100755 index 00000000..15f2da47 --- /dev/null +++ b/tests/bugs/overlap.py @@ -0,0 +1,59 @@ +#!/usr/bin/python + +import sys + +def calculate_one (ov, nv): +    old_start = int(ov[18:26],16) +    old_end = int(ov[26:34],16) +    new_start = int(nv[18:26],16) +    new_end = int(nv[26:34],16) +    if (new_end < old_start) or (new_start > old_end): +        #print '%s, %s -> ZERO' % (ov, nv) +        return 0 +    all_start = max(old_start,new_start) +    all_end = min(old_end,new_end) +    #print '%s, %s -> %08x' % (ov, nv, all_end - all_start + 1) +    return all_end - all_start + 1 + +def calculate_all (values): +    total = 0 +    nv_index = len(values) / 2 +    for old_val in values[:nv_index]: +        new_val = values[nv_index] +        nv_index += 1 +        total += calculate_one(old_val,new_val) +    return total + +""" +test1_vals = [ +    '0x0000000000000000000000003fffffff',   # first quarter +    '0x0000000000000000400000007fffffff',   # second quarter +    '0x000000000000000080000000ffffffff',   # second half +    '0x00000000000000000000000055555554',   # first third +    '0x000000000000000055555555aaaaaaa9',   # second third +    '0x0000000000000000aaaaaaaaffffffff',   # last third +] + +test2_vals = [ +    '0x0000000000000000000000003fffffff',   # first quarter +    '0x0000000000000000400000007fffffff',   # second quarter +    '0x000000000000000080000000ffffffff',   # second half +    '0x00000000000000000000000055555554',   # first third +    # Next two are (incorrectly) swapped. +    '0x0000000000000000aaaaaaaaffffffff',   # last third +    '0x000000000000000055555555aaaaaaa9',   # second third +] + +print '%08x' % calculate_one(test1_vals[0],test1_vals[3]) +print '%08x' % calculate_one(test1_vals[1],test1_vals[4]) +print '%08x' % calculate_one(test1_vals[2],test1_vals[5]) +print '= %08x' % calculate_all(test1_vals) +print '%08x' % calculate_one(test2_vals[0],test2_vals[3]) +print '%08x' % calculate_one(test2_vals[1],test2_vals[4]) +print '%08x' % calculate_one(test2_vals[2],test2_vals[5]) +print '= %08x' % calculate_all(test2_vals) +""" + +if __name__ == '__main__': +    # Return decimal so bash can reason about it. +    print '%d' % calculate_all(sys.argv[1:])  | 
