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