11 if [ "$1" == "--tee" ]; then
22 echo "RUN_EXPECT_SUCC: " "$@"
24 [ $?
-ne 0 ] && die
"expected success, but got failure! cmd: $@"
32 if [ -n "$CEPH_BIN" ] ; then
34 RADOS_TOOL
="$CEPH_BIN/rados"
35 CEPH_TOOL
="$CEPH_BIN/ceph"
36 DEDUP_TOOL
="$CEPH_BIN/ceph-dedup-tool"
38 # executables should be installed by the QA env
39 RADOS_TOOL
=$
(which rados
)
40 CEPH_TOOL
=$
(which ceph
)
41 DEDUP_TOOL
=$
(which ceph-dedup-tool
)
47 [ -x "$RADOS_TOOL" ] || die
"couldn't find $RADOS_TOOL binary to test"
48 [ -x "$CEPH_TOOL" ] || die
"couldn't find $CEPH_TOOL binary to test"
50 run_expect_succ
"$CEPH_TOOL" osd pool create
"$POOL" 8
52 function test_dedup_ratio_fixed
()
55 dd if=/dev
/urandom of
=dedup_object_1k bs
=1K count
=1
56 dd if=dedup_object_1k of
=dedup_object_100k bs
=1K count
=100
58 $RADOS_TOOL -p $POOL put
$OBJ .
/dedup_object_100k
59 RESULT
=$
($DEDUP_TOOL --op estimate
--pool $POOL --chunk-size 1024 --chunk-algorithm fixed
--fingerprint-algorithm sha1
--debug |
grep result |
awk '{print$4}')
60 if [ 1024 -ne $RESULT ];
62 die
"Estimate failed expecting 1024 result $RESULT"
66 dd if=/dev
/zero of
=dedup_object_10m bs
=10M count
=1
68 $RADOS_TOOL -p $POOL put
$OBJ .
/dedup_object_10m
69 RESULT
=$
($DEDUP_TOOL --op estimate
--pool $POOL --chunk-size 4096 --chunk-algorithm fixed
--fingerprint-algorithm sha1
--debug |
grep result |
awk '{print$4}')
70 if [ 4096 -ne $RESULT ];
72 die
"Estimate failed expecting 4096 result $RESULT"
78 dd if=/dev
/zero of
=dedup_object_
$num bs
=4M count
=1
79 $RADOS_TOOL -p $POOL put dedup_object_
$num .
/dedup_object_
$num
82 RESULT
=$
($DEDUP_TOOL --op estimate
--pool $POOL --chunk-size 4096 --chunk-algorithm fixed
--fingerprint-algorithm sha1
--max-thread 4 --debug |
grep result |
awk '{print$2}')
84 if [ 98566144 -ne $RESULT ];
86 die
"Estimate failed expecting 98566144 result $RESULT"
89 rm -rf .
/dedup_object_1k .
/dedup_object_100k .
/dedup_object_10m
92 rm -rf .
/dedup_object_
$num
94 $RADOS_TOOL -p $POOL rm $OBJ
97 $RADOS_TOOL -p $POOL rm dedup_object_
$num
101 function test_dedup_chunk_scrub
()
104 CHUNK_POOL
=dedup_chunk_pool
105 run_expect_succ
"$CEPH_TOOL" osd pool create
"$CHUNK_POOL" 8
107 echo "hi there" > foo
109 echo "hi there" > bar
111 echo "there" > foo-chunk
113 echo "CHUNK" > bar-chunk
115 $CEPH_TOOL osd pool
set $POOL fingerprint_algorithm sha1
--yes-i-really-mean-it
117 $RADOS_TOOL -p $POOL put foo .
/foo
118 $RADOS_TOOL -p $POOL put bar .
/bar
120 $RADOS_TOOL -p $CHUNK_POOL put bar-chunk .
/bar-chunk
121 $RADOS_TOOL -p $CHUNK_POOL put foo-chunk .
/foo-chunk
123 $RADOS_TOOL -p $POOL set-chunk bar
0 8 --target-pool $CHUNK_POOL bar-chunk
0 --with-reference
124 $RADOS_TOOL -p $POOL set-chunk foo
0 8 --target-pool $CHUNK_POOL foo-chunk
0 --with-reference
126 echo "There hi" > test_obj
128 $RADOS_TOOL -p $POOL put foo .
/test_obj
130 $RADOS_TOOL -p $POOL put foo .
/test_obj
133 rados
ls -p $CHUNK_POOL
134 CHUNK_OID
=$
(echo -n "There hi" |
sha1sum)
136 POOL_ID
=$
(ceph osd pool
ls detail |
grep $POOL |
awk '{print$2}')
137 $DEDUP_TOOL --op add-chunk-ref
--chunk-pool $CHUNK_POOL --object $CHUNK_OID --target-ref bar
--target-ref-pool-id $POOL_ID
138 RESULT
=$
($DEDUP_TOOL --op get-chunk-ref
--chunk-pool $CHUNK_POOL --object $CHUNK_OID)
140 $DEDUP_TOOL --op chunk-scrub
--chunk-pool $CHUNK_POOL
142 RESULT
=$
($DEDUP_TOOL --op get-chunk-ref
--chunk-pool $CHUNK_POOL --object $CHUNK_OID |
grep bar
)
143 if [ -n "$RESULT" ] ; then
144 $CEPH_TOOL osd pool delete
$POOL $POOL --yes-i-really-really-mean-it
145 $CEPH_TOOL osd pool delete
$CHUNK_POOL $CHUNK_POOL --yes-i-really-really-mean-it
146 die
"Scrub failed expecting bar is removed"
149 $CEPH_TOOL osd pool delete
$CHUNK_POOL $CHUNK_POOL --yes-i-really-really-mean-it
151 rm -rf .
/foo .
/bar .
/foo-chunk .
/bar-chunk .
/test_obj
152 $RADOS_TOOL -p $POOL rm foo
153 $RADOS_TOOL -p $POOL rm bar
156 function test_dedup_ratio_rabin
()
159 echo "abcdefghijklmnop" >> dedup_16
160 for num
in `seq 0 63`
162 dd if=.
/dedup_16 bs
=16 count
=1 >> dedup_object_1k
165 for num
in `seq 0 11`
167 dd if=dedup_object_1k bs
=1K count
=1 >> test_rabin_object
169 $RADOS_TOOL -p $POOL put
$OBJ .
/test_rabin_object
170 RESULT
=$
($DEDUP_TOOL --op estimate
--pool $POOL --min-chunk 1015 --chunk-algorithm rabin
--fingerprint-algorithm rabin
--debug |
grep result
-a |
awk '{print$4}')
171 if [ 4096 -ne $RESULT ];
173 die
"Estimate failed expecting 4096 result $RESULT"
176 echo "a" >> test_rabin_object_2
177 dd if=.
/test_rabin_object bs
=8K count
=1 >> test_rabin_object_2
178 $RADOS_TOOL -p $POOL put
$OBJ"_2" .
/test_rabin_object_2
179 RESULT
=$
($DEDUP_TOOL --op estimate
--pool $POOL --min-chunk 1012 --chunk-algorithm rabin
--fingerprint-algorithm rabin
--debug |
grep result
-a |
awk '{print$4}')
180 if [ 11259 -ne $RESULT ];
182 die
"Estimate failed expecting 11259 result $RESULT"
185 RESULT
=$
($DEDUP_TOOL --op estimate
--pool $POOL --min-chunk 1024 --chunk-mask-bit 3 --chunk-algorithm rabin
--fingerprint-algorithm rabin
--debug |
grep result
-a |
awk '{print$4}')
186 if [ 7170 -ne $RESULT ];
188 die
"Estimate failed expecting 7170 result $RESULT"
191 rm -rf .
/dedup_object_1k .
/test_rabin_object .
/test_rabin_object_2 .
/dedup_16
195 test_dedup_ratio_fixed
196 test_dedup_chunk_scrub
197 test_dedup_ratio_rabin
199 $CEPH_TOOL osd pool delete
$POOL $POOL --yes-i-really-really-mean-it