Fix some bugs when testing opensds ansible
[stor4nfv.git] / src / ceph / qa / workunits / rados / test_cache_pool.sh
1 #!/bin/bash -x
2
3 set -e
4
5 expect_false()
6 {
7         set -x
8         if "$@"; then return 1; else return 0; fi
9 }
10
11 # create pools, set up tier relationship
12 ceph osd pool create base_pool 2
13 ceph osd pool application enable base_pool rados
14 ceph osd pool create partial_wrong 2
15 ceph osd pool create wrong_cache 2
16 ceph osd tier add base_pool partial_wrong
17 ceph osd tier add base_pool wrong_cache
18
19 # populate base_pool with some data
20 echo "foo" > foo.txt
21 echo "bar" > bar.txt
22 echo "baz" > baz.txt
23 rados -p base_pool put fooobj foo.txt
24 rados -p base_pool put barobj bar.txt
25 # fill in wrong_cache backwards so we can tell we read from it
26 rados -p wrong_cache put fooobj bar.txt
27 rados -p wrong_cache put barobj foo.txt
28 # partial_wrong gets barobj backwards so we can check promote and non-promote
29 rados -p partial_wrong put barobj foo.txt
30
31 # get the objects back before setting a caching pool
32 rados -p base_pool get fooobj tmp.txt
33 diff -q tmp.txt foo.txt
34 rados -p base_pool get barobj tmp.txt
35 diff -q tmp.txt bar.txt
36
37 # set up redirect and make sure we get backwards results
38 ceph osd tier set-overlay base_pool wrong_cache
39 ceph osd tier cache-mode wrong_cache writeback
40 rados -p base_pool get fooobj tmp.txt
41 diff -q tmp.txt bar.txt
42 rados -p base_pool get barobj tmp.txt
43 diff -q tmp.txt foo.txt
44
45 # switch cache pools and make sure we're doing promote
46 ceph osd tier remove-overlay base_pool
47 ceph osd tier set-overlay base_pool partial_wrong
48 ceph osd tier cache-mode partial_wrong writeback
49 rados -p base_pool get fooobj tmp.txt
50 diff -q tmp.txt foo.txt # hurray, it promoted!
51 rados -p base_pool get barobj tmp.txt
52 diff -q tmp.txt foo.txt # yep, we read partial_wrong's local object!
53
54 # try a nonexistent object and make sure we get an error
55 expect_false rados -p base_pool get bazobj tmp.txt
56
57 # drop the cache entirely and make sure contents are still the same
58 ceph osd tier remove-overlay base_pool
59 rados -p base_pool get fooobj tmp.txt
60 diff -q tmp.txt foo.txt
61 rados -p base_pool get barobj tmp.txt
62 diff -q tmp.txt bar.txt
63
64 # create an empty cache pool and make sure it has objects after reading
65 ceph osd pool create empty_cache 2
66
67 touch empty.txt
68 rados -p empty_cache ls > tmp.txt
69 diff -q tmp.txt empty.txt
70
71 ceph osd tier add base_pool empty_cache
72 ceph osd tier set-overlay base_pool empty_cache
73 ceph osd tier cache-mode empty_cache writeback
74 rados -p base_pool get fooobj tmp.txt
75 rados -p base_pool get barobj tmp.txt
76 expect_false rados -p base_pool get bazobj tmp.txt
77
78 rados -p empty_cache ls > tmp.txt
79 expect_false diff -q tmp.txt empty.txt
80
81 # cleanup
82 ceph osd tier remove-overlay base_pool
83 ceph osd tier remove base_pool wrong_cache
84 ceph osd tier remove base_pool partial_wrong
85 ceph osd tier remove base_pool empty_cache
86 ceph osd pool delete base_pool base_pool --yes-i-really-really-mean-it
87 ceph osd pool delete empty_cache empty_cache --yes-i-really-really-mean-it
88 ceph osd pool delete wrong_cache wrong_cache --yes-i-really-really-mean-it
89 ceph osd pool delete partial_wrong partial_wrong --yes-i-really-really-mean-it
90
91 ## set of base, cache
92 ceph osd pool create base 8
93 ceph osd pool application enable base rados
94 ceph osd pool create cache 8
95
96 ceph osd tier add base cache
97 ceph osd tier cache-mode cache writeback
98 ceph osd tier set-overlay base cache
99
100 # cache-flush, cache-evict
101 rados -p base put foo /etc/passwd
102 expect_false rados -p base cache-evict foo
103 expect_false rados -p base cache-flush foo
104 expect_false rados -p cache cache-evict foo
105 rados -p cache cache-flush foo
106 rados -p cache cache-evict foo
107 rados -p cache ls - | wc -l | grep 0
108
109 # cache-try-flush, cache-evict
110 rados -p base put foo /etc/passwd
111 expect_false rados -p base cache-evict foo
112 expect_false rados -p base cache-flush foo
113 expect_false rados -p cache cache-evict foo
114 rados -p cache cache-try-flush foo
115 rados -p cache cache-evict foo
116 rados -p cache ls - | wc -l | grep 0
117
118 # cache-flush-evict-all
119 rados -p base put bar /etc/passwd
120 rados -p cache ls - | wc -l | grep 1
121 expect_false rados -p base cache-flush-evict-all
122 rados -p cache cache-flush-evict-all
123 rados -p cache ls - | wc -l | grep 0
124
125 # cache-try-flush-evict-all
126 rados -p base put bar /etc/passwd
127 rados -p cache ls - | wc -l | grep 1
128 expect_false rados -p base cache-flush-evict-all
129 rados -p cache cache-try-flush-evict-all
130 rados -p cache ls - | wc -l | grep 0
131
132 # cache flush/evit when clone objects exist
133 rados -p base put testclone /etc/passwd
134 rados -p cache ls - | wc -l | grep 1
135 ceph osd pool mksnap base snap
136 rados -p base put testclone /etc/hosts
137 rados -p cache cache-flush-evict-all
138 rados -p cache ls - | wc -l | grep 0
139
140 ceph osd tier cache-mode cache forward --yes-i-really-mean-it
141 rados -p base -s snap get testclone testclone.txt
142 diff -q testclone.txt /etc/passwd
143 rados -p base get testclone testclone.txt
144 diff -q testclone.txt /etc/hosts
145
146 # test --with-clones option
147 ceph osd tier cache-mode cache writeback
148 rados -p base put testclone2 /etc/passwd
149 rados -p cache ls - | wc -l | grep 1
150 ceph osd pool mksnap base snap1
151 rados -p base put testclone2 /etc/hosts
152 expect_false rados -p cache cache-flush testclone2
153 rados -p cache cache-flush testclone2 --with-clones
154 expect_false rados -p cache cache-evict testclone2
155 rados -p cache cache-evict testclone2 --with-clones
156 rados -p cache ls - | wc -l | grep 0
157
158 rados -p base -s snap1 get testclone2 testclone2.txt
159 diff -q testclone2.txt /etc/passwd
160 rados -p base get testclone2 testclone2.txt
161 diff -q testclone2.txt /etc/hosts
162
163 # cleanup
164 ceph osd tier remove-overlay base
165 ceph osd tier remove base cache
166
167 ceph osd pool delete cache cache --yes-i-really-really-mean-it
168 ceph osd pool delete base base --yes-i-really-really-mean-it
169
170 echo OK