summaryrefslogtreecommitdiff
path: root/test/shell/cachevol-cachedevice.sh
blob: 2695c989b87fd86eb5b4dabae915be56c654bc70 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
#!/usr/bin/env bash

# Copyright (C) 2018 Red Hat, Inc. All rights reserved.
#
# This copyrighted material is made available to anyone wishing to use,
# modify, copy, or redistribute it subject to the terms and conditions
# of the GNU General Public License v.2.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA

SKIP_WITH_LVMPOLLD=1

. lib/inittest

aux have_cache 1 10 0 || skip
aux have_writecache 1 0 0 || skip

aux prepare_devs 4 64

vgcreate $SHARED $vg "$dev1" "$dev2"

## cache

# use existing cachevol
lvcreate -n $lv1 -l8 -an $vg "$dev1"
lvcreate --type cache -n $lv2 -L40M --cachevol $lv1 -y $vg "$dev2"
check lv_field $vg/$lv2 segtype cache
check lv_field $vg/${lv1}_cvol segtype linear -a
lvremove -y $vg/$lv2

# use entire cachedevice for cachevol
lvcreate --type cache -n $lv2 -L40M --cachedevice "$dev1" -y $vg "$dev2"
check lv_field $vg/$lv2 segtype cache
check lv_field $vg/${lv2}_cache_cvol segtype linear -a
lvremove -y $vg/$lv2

# use part of cachedevice for cachevol
lvcreate --type cache -n $lv2 -L20M --cachedevice "$dev1" --cachesize 16M -y $vg "$dev2"
check lv_field $vg/$lv2 segtype cache
check lv_field $vg/${lv2}_cache_cvol segtype linear -a
lvcreate --type cache -n $lv3 -L20M --cachedevice "$dev1" --cachesize 16M -y $vg "$dev2"
check lv_field $vg/$lv3 segtype cache
check lv_field $vg/${lv3}_cache_cvol segtype linear -a
lvremove -y $vg/$lv2
lvremove -y $vg/$lv3

## writecache

# use existing cachevol
lvcreate -n $lv1 -l8 -an $vg "$dev1"
lvcreate --type writecache -n $lv2 -L40M --cachevol $lv1 -y $vg "$dev2"
check lv_field $vg/$lv2 segtype writecache
check lv_field $vg/${lv1}_cvol segtype linear -a
lvremove -y $vg/$lv2

# use entire cachedevice for cachevol
lvcreate --type writecache -n $lv2 -L40M --cachedevice "$dev1" -y $vg "$dev2"
check lv_field $vg/$lv2 segtype writecache
check lv_field $vg/${lv2}_cache_cvol segtype linear -a
lvremove -y $vg/$lv2

# use part of cachedevice for cachevol
lvcreate --type writecache -n $lv2 -L20M --cachedevice "$dev1" --cachesize 16M -y $vg "$dev2"
check lv_field $vg/$lv2 segtype writecache
check lv_field $vg/${lv2}_cache_cvol segtype linear -a
lvcreate --type writecache -n $lv3 -L20M --cachedevice "$dev1" --cachesize 16M -y $vg "$dev2"
check lv_field $vg/$lv3 segtype writecache
check lv_field $vg/${lv3}_cache_cvol segtype linear -a
lvremove -y $vg/$lv2
lvremove -y $vg/$lv3

## multiple cachedevs

vgextend $vg "$dev3" "$dev4"

lvcreate --type writecache -n $lv2 -L100M --cachedevice "$dev1" --cachedevice "$dev3" -y $vg "$dev2" "$dev4"
check lv_field $vg/${lv2}_cache_cvol lv_size "120.00m"
lvremove -y $vg/$lv2

lvcreate --type writecache -n $lv2 -L100M --cachedevice "$dev1" --cachedevice "$dev3" --cachesize 80M -y $vg "$dev2" "$dev4"
check lv_field $vg/${lv2}_cache_cvol lv_size "80.00m"
lvremove -y $vg/$lv2

pvchange --addtag slow "$dev2"
pvchange --addtag slow "$dev4"
pvchange --addtag fast "$dev1"
pvchange --addtag fast "$dev3"

lvcreate --type writecache -n $lv2 -L100M --cachedevice @fast --cachesize 80M -y $vg @slow
check lv_field $vg/${lv2}_cache_cvol lv_size "80.00m"
lvremove -y $vg/$lv2

lvcreate --type cache -n $lv2 -L100M --cachedevice @fast --cachesize 80M -y $vg @slow
check lv_field $vg/${lv2}_cache_cvol lv_size "80.00m"
lvremove -y $vg/$lv2

## error cases

# cachevol doesn't exist
not lvcreate --type cache -n $lv2 -l8 --cachevol asdf -y $vg "$dev2"
not lvs $vg/$lv1
not lvs $vg/$lv2

# cachedevice doesn't exist
not lvcreate --type cache -n $lv2 -l8 --cachedevice asdf -y $vg "$dev2"
not lvs $vg/$lv1
not lvs $vg/$lv2

# cachevol doesn't exist
not lvcreate --type writecache -n $lv2 -l8 --cachevol asdf -y $vg "$dev2"
not lvs $vg/$lv1
not lvs $vg/$lv2

# cachedevice doesn't exist
not lvcreate --type writecache -n $lv2 -l8 --cachedevice asdf -y $vg "$dev2"
not lvs $vg/$lv1
not lvs $vg/$lv2

# when cachedevice is already being used, cachesize is required to use a part of it
lvcreate -n asdf -l1 $vg "$dev1"
not lvcreate --type writecache -n $lv2 -l8 --cachedevice "$dev1" -y $vg "$dev2"
not lvcreate --type writecache -n $lv2 -l8 --cachedevice "$dev1" --cachedevice "$dev3" -y $vg "$dev2"
not lvs $vg/$lv1
not lvs $vg/$lv2
lvcreate --type writecache -n $lv2 -l8 --cachedevice "$dev1" --cachesize 8M -y $vg "$dev2"
lvs $vg/$lv2
check lv_field $vg/${lv2}_cache_cvol lv_size "8.00m"
lvremove -y $vg/$lv2

vgremove -ff $vg

# lvconvert single step cachevol creation and attachment
# . cache and writecache
# . one or two cachedevices
# . with or without --cachesize
# . using tags for devices

vgcreate $SHARED $vg "$dev1" "$dev2" "$dev3" "$dev4"

lvcreate -n $lv1 -l8 -an $vg "$dev1"
lvconvert -y --type cache --cachedevice "$dev2" $vg/$lv1
check lv_field $vg/$lv1 segtype cache
check lv_field $vg/${lv1}_cache_cvol segtype linear -a
check lv_field $vg/${lv1}_cache_cvol lv_size "60.00m"
lvs -o chunksize $vg/$lv1 |tee out
grep 64.00k out
lvchange -ay $vg/$lv1
lvchange -an $vg/$lv1
lvremove $vg/$lv1

lvcreate -n $lv1 -l8 -an $vg "$dev1"
lvconvert -y --type cache --cachedevice "$dev2" --chunksize 128k $vg/$lv1
check lv_field $vg/$lv1 segtype cache
check lv_field $vg/${lv1}_cache_cvol segtype linear -a
check lv_field $vg/${lv1}_cache_cvol lv_size "60.00m"
lvs -o chunksize $vg/$lv1 |tee out
grep 128.00k out
lvchange -ay $vg/$lv1
lvchange -an $vg/$lv1
lvremove $vg/$lv1

lvcreate -n $lv1 -l8 -an $vg "$dev1"
lvconvert -y --type cache --cachedevice "$dev2" --cachedevice "$dev3" $vg/$lv1
check lv_field $vg/$lv1 segtype cache
check lv_field $vg/${lv1}_cache_cvol lv_size "120.00m"
lvchange -ay $vg/$lv1
lvchange -an $vg/$lv1
lvremove $vg/$lv1

lvcreate -n $lv1 -l8 -an $vg "$dev1"
lvconvert -y --type cache --cachedevice "$dev2" --cachedevice "$dev3" --cachesize 8M $vg/$lv1
check lv_field $vg/$lv1 segtype cache
check lv_field $vg/${lv1}_cache_cvol lv_size "8.00m"
lvchange -ay $vg/$lv1
lvchange -an $vg/$lv1
lvremove $vg/$lv1

lvcreate -n $lv1 -l8 -an $vg "$dev1"
lvconvert -y --type writecache --cachedevice "$dev2" $vg/$lv1
check lv_field $vg/$lv1 segtype writecache
check lv_field $vg/${lv1}_cache_cvol lv_size "60.00m"
lvchange -ay $vg/$lv1
lvchange -an $vg/$lv1
lvremove $vg/$lv1

lvcreate -n $lv1 -l8 -an $vg "$dev1"
lvconvert -y --type writecache --cachedevice "$dev2" --cachedevice "$dev3" $vg/$lv1
check lv_field $vg/$lv1 segtype writecache
check lv_field $vg/${lv1}_cache_cvol lv_size "120.00m"
lvchange -ay $vg/$lv1
lvchange -an $vg/$lv1
lvremove $vg/$lv1

lvcreate -n $lv1 -l8 -an $vg "$dev1"
lvconvert -y --type writecache --cachedevice "$dev2" --cachedevice "$dev3" --cachesize 8M $vg/$lv1
check lv_field $vg/$lv1 segtype writecache
check lv_field $vg/${lv1}_cache_cvol lv_size "8.00m"
lvchange -ay $vg/$lv1
lvchange -an $vg/$lv1
lvremove $vg/$lv1

pvchange --addtag slow "$dev1"
pvchange --addtag fast "$dev2"
pvchange --addtag fast "$dev3"

lvcreate -n $lv1 -l8 -an $vg @slow
lvconvert -y --type cache --cachedevice @fast --cachesize 8M $vg/$lv1
check lv_field $vg/$lv1 segtype cache
check lv_field $vg/${lv1}_cache_cvol lv_size "8.00m"
lvchange -ay $vg/$lv1
lvchange -an $vg/$lv1
lvremove $vg/$lv1

lvcreate -n $lv1 -l8 -an $vg @slow
lvconvert -y --type writecache --cachedevice @fast --cachesize 8M $vg/$lv1
check lv_field $vg/$lv1 segtype writecache
check lv_field $vg/${lv1}_cache_cvol lv_size "8.00m"
lvchange -ay $vg/$lv1
lvchange -an $vg/$lv1
lvremove $vg/$lv1

# if the cache name is used generate a new name
lvcreate -n $lv1 -l8 -an $vg @slow
lvcreate -n ${lv1}_cache -l1 -an $vg @slow
lvconvert -y --type writecache --cachedevice @fast --cachesize 8M $vg/$lv1
check lv_field $vg/$lv1 segtype writecache
check lv_field $vg/${lv1}_cache0_cvol lv_size "8.00m"
lvchange -ay $vg/$lv1
lvchange -an $vg/$lv1
lvremove $vg/$lv1

vgremove -ff $vg