]>
Commit | Line | Data |
---|---|---|
1 | #!/usr/bin/env bash | |
2 | ||
3 | set -ex | |
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 proxy --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 |