]>
Commit | Line | Data |
---|---|---|
11fdf7f2 TL |
1 | #!/usr/bin/env bash |
2 | ||
3 | set -ex | |
4 | ||
5 | function get_block_name_prefix() { | |
9f95a23c | 6 | rbd info --format=json $1 | python3 -c "import sys, json; print(json.load(sys.stdin)['block_name_prefix'])" |
11fdf7f2 TL |
7 | } |
8 | ||
9 | function do_pwrite() { | |
10 | local spec=$1 | |
11 | local old_byte=$2 | |
12 | local new_byte=$3 | |
13 | ||
14 | local dev | |
15 | dev=$(sudo rbd map $spec) | |
16 | cmp <(dd if=/dev/zero bs=1M count=10 | tr \\000 \\$old_byte) $dev | |
17 | xfs_io -c "pwrite -b 1M -S $new_byte 0 10M" $dev | |
18 | sudo rbd unmap $dev | |
19 | } | |
20 | ||
21 | function do_cmp() { | |
22 | local spec=$1 | |
23 | local byte=$2 | |
24 | ||
25 | local dev | |
26 | dev=$(sudo rbd map $spec) | |
27 | cmp <(dd if=/dev/zero bs=1M count=10 | tr \\000 \\$byte) $dev | |
28 | sudo rbd unmap $dev | |
29 | } | |
30 | ||
31 | function gen_child_specs() { | |
32 | local i=$1 | |
33 | ||
34 | local child_specs="foo/img$i-clone1 foo/img$i-clone2 foo/ns1/img$i-clone1 foo/ns1/img$i-clone2" | |
35 | if [[ $i -ge 3 ]]; then | |
36 | child_specs="$child_specs foo/ns2/img$i-clone1 foo/ns2/img$i-clone2" | |
37 | fi | |
38 | echo $child_specs | |
39 | } | |
40 | ||
41 | ceph osd pool create foo 12 | |
42 | rbd pool init foo | |
43 | ceph osd pool create bar 12 | |
44 | rbd pool init bar | |
45 | ||
46 | ceph osd set-require-min-compat-client nautilus | |
47 | rbd namespace create foo/ns1 | |
48 | rbd namespace create foo/ns2 | |
49 | ||
50 | SPECS=(foo/img1 foo/img2 foo/ns1/img3 foo/ns1/img4) | |
51 | ||
52 | COUNT=1 | |
53 | for spec in "${SPECS[@]}"; do | |
54 | if [[ $spec =~ img1|img3 ]]; then | |
55 | rbd create --size 10 $spec | |
56 | else | |
57 | rbd create --size 10 --data-pool bar $spec | |
58 | fi | |
59 | do_pwrite $spec 000 $(printf %03d $COUNT) | |
60 | rbd snap create $spec@snap | |
61 | COUNT=$((COUNT + 1)) | |
62 | done | |
63 | for i in {1..4}; do | |
64 | for child_spec in $(gen_child_specs $i); do | |
65 | if [[ $child_spec =~ clone1 ]]; then | |
66 | rbd clone ${SPECS[i - 1]}@snap $child_spec | |
67 | else | |
68 | rbd clone --data-pool bar ${SPECS[i - 1]}@snap $child_spec | |
69 | fi | |
70 | do_pwrite $child_spec $(printf %03d $i) $(printf %03d $COUNT) | |
71 | COUNT=$((COUNT + 1)) | |
72 | done | |
73 | done | |
74 | ||
75 | [[ $(rados -p foo ls | grep -c $(get_block_name_prefix foo/img1)) -eq 3 ]] | |
76 | [[ $(rados -p bar ls | grep -c $(get_block_name_prefix foo/img2)) -eq 3 ]] | |
77 | [[ $(rados -p foo -N ns1 ls | grep -c $(get_block_name_prefix foo/ns1/img3)) -eq 3 ]] | |
78 | [[ $(rados -p bar -N ns1 ls | grep -c $(get_block_name_prefix foo/ns1/img4)) -eq 3 ]] | |
79 | ||
80 | [[ $(rados -p foo ls | grep -c $(get_block_name_prefix foo/img1-clone1)) -eq 3 ]] | |
81 | [[ $(rados -p bar ls | grep -c $(get_block_name_prefix foo/img1-clone2)) -eq 3 ]] | |
82 | [[ $(rados -p foo -N ns1 ls | grep -c $(get_block_name_prefix foo/ns1/img1-clone1)) -eq 3 ]] | |
83 | [[ $(rados -p bar -N ns1 ls | grep -c $(get_block_name_prefix foo/ns1/img1-clone2)) -eq 3 ]] | |
84 | ||
85 | [[ $(rados -p foo ls | grep -c $(get_block_name_prefix foo/img2-clone1)) -eq 3 ]] | |
86 | [[ $(rados -p bar ls | grep -c $(get_block_name_prefix foo/img2-clone2)) -eq 3 ]] | |
87 | [[ $(rados -p foo -N ns1 ls | grep -c $(get_block_name_prefix foo/ns1/img2-clone1)) -eq 3 ]] | |
88 | [[ $(rados -p bar -N ns1 ls | grep -c $(get_block_name_prefix foo/ns1/img2-clone2)) -eq 3 ]] | |
89 | ||
90 | [[ $(rados -p foo ls | grep -c $(get_block_name_prefix foo/img3-clone1)) -eq 3 ]] | |
91 | [[ $(rados -p bar ls | grep -c $(get_block_name_prefix foo/img3-clone2)) -eq 3 ]] | |
92 | [[ $(rados -p foo -N ns1 ls | grep -c $(get_block_name_prefix foo/ns1/img3-clone1)) -eq 3 ]] | |
93 | [[ $(rados -p bar -N ns1 ls | grep -c $(get_block_name_prefix foo/ns1/img3-clone2)) -eq 3 ]] | |
94 | [[ $(rados -p foo -N ns2 ls | grep -c $(get_block_name_prefix foo/ns2/img3-clone1)) -eq 3 ]] | |
95 | [[ $(rados -p bar -N ns2 ls | grep -c $(get_block_name_prefix foo/ns2/img3-clone2)) -eq 3 ]] | |
96 | ||
97 | [[ $(rados -p foo ls | grep -c $(get_block_name_prefix foo/img4-clone1)) -eq 3 ]] | |
98 | [[ $(rados -p bar ls | grep -c $(get_block_name_prefix foo/img4-clone2)) -eq 3 ]] | |
99 | [[ $(rados -p foo -N ns1 ls | grep -c $(get_block_name_prefix foo/ns1/img4-clone1)) -eq 3 ]] | |
100 | [[ $(rados -p bar -N ns1 ls | grep -c $(get_block_name_prefix foo/ns1/img4-clone2)) -eq 3 ]] | |
101 | [[ $(rados -p foo -N ns2 ls | grep -c $(get_block_name_prefix foo/ns2/img4-clone1)) -eq 3 ]] | |
102 | [[ $(rados -p bar -N ns2 ls | grep -c $(get_block_name_prefix foo/ns2/img4-clone2)) -eq 3 ]] | |
103 | ||
104 | COUNT=1 | |
105 | for spec in "${SPECS[@]}"; do | |
106 | do_cmp $spec $(printf %03d $COUNT) | |
107 | COUNT=$((COUNT + 1)) | |
108 | done | |
109 | for i in {1..4}; do | |
110 | for child_spec in $(gen_child_specs $i); do | |
111 | do_cmp $child_spec $(printf %03d $COUNT) | |
112 | COUNT=$((COUNT + 1)) | |
113 | done | |
114 | done | |
115 | ||
116 | echo OK |