Skip to content

Commit dcd399e

Browse files
authored
Merge pull request ceph#60042 from sunilangadi2/migration_with_namespace_test
qa/workunits/rbd: cover native migration between namespaces Reviewed-by: Ilya Dryomov <[email protected]>
2 parents cf96f21 + 8403096 commit dcd399e

File tree

1 file changed

+91
-50
lines changed

1 file changed

+91
-50
lines changed

qa/workunits/rbd/cli_migration.sh

Lines changed: 91 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,16 @@ TEMPDIR=
55
IMAGE1=image1
66
IMAGE2=image2
77
IMAGE3=image3
8-
IMAGES="${IMAGE1} ${IMAGE2} ${IMAGE3}"
8+
NAMESPACE1=namespace1
9+
NAMESPACE2=namespace2
10+
NAMESPACES="${NAMESPACE1} ${NAMESPACE2}"
11+
IMAGES="${IMAGE1} ${IMAGE2} ${IMAGE3} rbd/${NAMESPACE1}/${IMAGE1} rbd/${NAMESPACE2}/${IMAGE2}"
912

1013
cleanup() {
1114
kill_nbd_server
1215
cleanup_tempdir
1316
remove_images
17+
remove_namespaces
1418
}
1519

1620
setup_tempdir() {
@@ -42,8 +46,11 @@ create_base_image() {
4246
export_raw_image() {
4347
local image=$1
4448

45-
rm -rf "${TEMPDIR}/${image}"
46-
rbd export ${image} "${TEMPDIR}/${image}"
49+
# Replace slashes (/) with underscores (_) for namespace images
50+
local export_image="${image//\//_}"
51+
52+
rm -rf "${TEMPDIR}/${export_image}"
53+
rbd export "${image}" "${TEMPDIR}/${export_image}"
4754
}
4855

4956
export_base_image() {
@@ -69,6 +76,13 @@ remove_images() {
6976
done
7077
}
7178

79+
remove_namespaces() {
80+
for namespace in ${NAMESPACES}
81+
do
82+
rbd namespace remove rbd/${namespace} || true
83+
done
84+
}
85+
7286
kill_nbd_server() {
7387
pkill -9 qemu-nbd || true
7488
}
@@ -90,6 +104,11 @@ compare_images() {
90104
local ret=0
91105

92106
export_raw_image ${dst_image}
107+
108+
# Replace slashes (/) with underscores (_) for namespace images
109+
src_image="${src_image//\//_}"
110+
dst_image="${dst_image//\//_}"
111+
93112
if ! cmp "${TEMPDIR}/${src_image}" "${TEMPDIR}/${dst_image}"
94113
then
95114
show_diff "${TEMPDIR}/${src_image}" "${TEMPDIR}/${dst_image}"
@@ -99,104 +118,112 @@ compare_images() {
99118
}
100119

101120
test_import_native_format() {
102-
local base_image=$1
103-
local dest_image=$2
121+
local base_image_spec=$1
122+
local dest_image_spec=$2
123+
124+
# if base image is from namespace
125+
local base_namespace=""
126+
local base_image=${base_image_spec}
127+
if [[ "${base_image_spec}" == rbd/*/* ]]; then
128+
base_namespace=$(basename "$(dirname "${base_image_spec}")")
129+
base_image=$(basename "${base_image_spec}")
130+
fi
104131

105-
rbd migration prepare --import-only "rbd/${base_image}@2" ${dest_image}
106-
rbd migration abort ${dest_image}
132+
rbd migration prepare --import-only "${base_image_spec}@2" ${dest_image_spec}
133+
rbd migration abort ${dest_image_spec}
107134

108135
local pool_id=$(ceph osd pool ls detail --format xml | xmlstarlet sel -t -v "//pools/pool[pool_name='rbd']/pool_id")
109136
cat > ${TEMPDIR}/spec.json <<EOF
110137
{
111138
"type": "native",
112139
"pool_id": ${pool_id},
113-
"pool_namespace": "",
140+
"pool_namespace": "${base_namespace}",
114141
"image_name": "${base_image}",
115142
"snap_name": "2"
116143
}
117144
EOF
118145
cat ${TEMPDIR}/spec.json
119146

120147
rbd migration prepare --import-only \
121-
--source-spec-path ${TEMPDIR}/spec.json ${dest_image}
148+
--source-spec-path ${TEMPDIR}/spec.json ${dest_image_spec}
122149

123-
compare_images "${base_image}@1" "${dest_image}@1"
124-
compare_images "${base_image}@2" "${dest_image}@2"
150+
compare_images "${base_image_spec}@1" "${dest_image_spec}@1"
151+
compare_images "${base_image_spec}@2" "${dest_image_spec}@2"
125152

126-
rbd migration abort ${dest_image}
153+
rbd migration abort ${dest_image_spec}
127154

128155
rbd migration prepare --import-only \
129-
--source-spec-path ${TEMPDIR}/spec.json ${dest_image}
130-
rbd migration execute ${dest_image}
156+
--source-spec-path ${TEMPDIR}/spec.json ${dest_image_spec}
157+
rbd migration execute ${dest_image_spec}
131158

132-
compare_images "${base_image}@1" "${dest_image}@1"
133-
compare_images "${base_image}@2" "${dest_image}@2"
159+
compare_images "${base_image_spec}@1" "${dest_image_spec}@1"
160+
compare_images "${base_image_spec}@2" "${dest_image_spec}@2"
134161

135-
rbd migration abort ${dest_image}
162+
rbd migration abort ${dest_image_spec}
136163

137164
# no snap name or snap id
138165
expect_false rbd migration prepare --import-only \
139-
--source-spec "{\"type\": \"native\", \"pool_id\": ${pool_id}, \"image_name\": \"${base_image}\"}" \
140-
${dest_image}
166+
--source-spec "{\"type\": \"native\", \"pool_id\": ${pool_id}, \"pool_namespace\": \"${base_namespace}\", \"image_name\": \"${base_image}\"}" \
167+
${dest_image_spec}
141168

142169
# invalid source spec JSON
143170
expect_false rbd migration prepare --import-only \
144-
--source-spec "{\"type\": \"native\", \"pool_id\": ${pool_id}, \"image_name\": \"${base_image}\", \"snap_name\": non-existing}" \
145-
${dest_image}
171+
--source-spec "{\"type\": \"native\", \"pool_id\": ${pool_id}, \"pool_namespace\": \"${base_namespace}\", \"image_name\": \"${base_image}\", \"snap_name\": non-existing}" \
172+
${dest_image_spec}
146173

147174
# non-existing snap name
148175
expect_false rbd migration prepare --import-only \
149-
--source-spec "{\"type\": \"native\", \"pool_id\": ${pool_id}, \"image_name\": \"${base_image}\", \"snap_name\": \"non-existing\"}" \
150-
${dest_image}
176+
--source-spec "{\"type\": \"native\", \"pool_id\": ${pool_id}, \"pool_namespace\": \"${base_namespace}\", \"image_name\": \"${base_image}\", \"snap_name\": \"non-existing\"}" \
177+
${dest_image_spec}
151178

152179
# invalid snap name
153180
expect_false rbd migration prepare --import-only \
154-
--source-spec "{\"type\": \"native\", \"pool_id\": ${pool_id}, \"image_name\": \"${base_image}\", \"snap_name\": 123456}" \
155-
${dest_image}
181+
--source-spec "{\"type\": \"native\", \"pool_id\": ${pool_id}, \"pool_namespace\": \"${base_namespace}\", \"image_name\": \"${base_image}\", \"snap_name\": 123456}" \
182+
${dest_image_spec}
156183

157184
# non-existing snap id passed as int
158185
expect_false rbd migration prepare --import-only \
159-
--source-spec "{\"type\": \"native\", \"pool_id\": ${pool_id}, \"image_name\": \"${base_image}\", \"snap_id\": 123456}" \
160-
${dest_image}
186+
--source-spec "{\"type\": \"native\", \"pool_id\": ${pool_id}, \"pool_namespace\": \"${base_namespace}\", \"image_name\": \"${base_image}\", \"snap_id\": 123456}" \
187+
${dest_image_spec}
161188

162189
# non-existing snap id passed as string
163190
expect_false rbd migration prepare --import-only \
164-
--source-spec "{\"type\": \"native\", \"pool_id\": ${pool_id}, \"image_name\": \"${base_image}\", \"snap_id\": \"123456\"}" \
165-
${dest_image}
191+
--source-spec "{\"type\": \"native\", \"pool_id\": ${pool_id}, \"pool_namespace\": \"${base_namespace}\", \"image_name\": \"${base_image}\", \"snap_id\": \"123456\"}" \
192+
${dest_image_spec}
166193

167194
# invalid snap id
168195
expect_false rbd migration prepare --import-only \
169-
--source-spec "{\"type\": \"native\", \"pool_id\": ${pool_id}, \"image_name\": \"${base_image}\", \"snap_id\": \"foobar\"}" \
170-
${dest_image}
196+
--source-spec "{\"type\": \"native\", \"pool_id\": ${pool_id}, \"pool_namespace\": \"${base_namespace}\", \"image_name\": \"${base_image}\", \"snap_id\": \"foobar\"}" \
197+
${dest_image_spec}
171198

172199
# snap id passed as int
173-
local snap_id=$(rbd snap ls ${base_image} --format xml | xmlstarlet sel -t -v "//snapshots/snapshot[name='2']/id")
200+
local snap_id=$(rbd snap ls ${base_image_spec} --format xml | xmlstarlet sel -t -v "//snapshots/snapshot[name='2']/id")
174201
rbd migration prepare --import-only \
175-
--source-spec "{\"type\": \"native\", \"pool_id\": ${pool_id}, \"image_name\": \"${base_image}\", \"snap_id\": ${snap_id}}" \
176-
${dest_image}
177-
rbd migration abort ${dest_image}
202+
--source-spec "{\"type\": \"native\", \"pool_id\": ${pool_id}, \"pool_namespace\": \"${base_namespace}\", \"image_name\": \"${base_image}\", \"snap_id\": ${snap_id}}" \
203+
${dest_image_spec}
204+
rbd migration abort ${dest_image_spec}
178205

179206
# snap id passed as string
180207
rbd migration prepare --import-only \
181-
--source-spec "{\"type\": \"native\", \"pool_id\": ${pool_id}, \"image_name\": \"${base_image}\", \"snap_id\": \"${snap_id}\"}" \
182-
${dest_image}
183-
rbd migration abort ${dest_image}
208+
--source-spec "{\"type\": \"native\", \"pool_id\": ${pool_id}, \"pool_namespace\": \"${base_namespace}\", \"image_name\": \"${base_image}\", \"snap_id\": \"${snap_id}\"}" \
209+
${dest_image_spec}
210+
rbd migration abort ${dest_image_spec}
184211

185212
rbd migration prepare --import-only \
186-
--source-spec "{\"type\": \"native\", \"pool_id\": ${pool_id}, \"image_name\": \"${base_image}\", \"snap_name\": \"2\"}" \
187-
${dest_image}
188-
rbd migration abort ${dest_image}
213+
--source-spec "{\"type\": \"native\", \"pool_id\": ${pool_id}, \"pool_namespace\": \"${base_namespace}\", \"image_name\": \"${base_image}\", \"snap_name\": \"2\"}" \
214+
${dest_image_spec}
215+
rbd migration abort ${dest_image_spec}
189216

190217
rbd migration prepare --import-only \
191-
--source-spec "{\"type\": \"native\", \"pool_name\": \"rbd\", \"image_name\": \"${base_image}\", \"snap_name\": \"2\"}" \
192-
${dest_image}
193-
rbd migration execute ${dest_image}
194-
rbd migration commit ${dest_image}
218+
--source-spec "{\"type\": \"native\", \"pool_name\": \"rbd\", \"pool_namespace\": \"${base_namespace}\", \"image_name\": \"${base_image}\", \"snap_name\": \"2\"}" \
219+
${dest_image_spec}
220+
rbd migration execute ${dest_image_spec}
221+
rbd migration commit ${dest_image_spec}
195222

196-
compare_images "${base_image}@1" "${dest_image}@1"
197-
compare_images "${base_image}@2" "${dest_image}@2"
223+
compare_images "${base_image_spec}@1" "${dest_image_spec}@1"
224+
compare_images "${base_image_spec}@2" "${dest_image_spec}@2"
198225

199-
remove_image "${dest_image}"
226+
remove_image "${dest_image_spec}"
200227
}
201228

202229
test_import_qcow_format() {
@@ -337,12 +364,12 @@ EOF
337364
cat ${TEMPDIR}/spec.json
338365

339366
cat ${TEMPDIR}/spec.json | rbd migration prepare --import-only \
340-
--source-spec-path - ${dest_image}
367+
--source-spec-path - ${dest_image}
341368
compare_images ${base_image} ${dest_image}
342369
rbd migration abort ${dest_image}
343370

344371
rbd migration prepare --import-only \
345-
--source-spec-path ${TEMPDIR}/spec.json ${dest_image}
372+
--source-spec-path ${TEMPDIR}/spec.json ${dest_image}
346373
rbd migration execute ${dest_image}
347374
rbd migration commit ${dest_image}
348375

@@ -587,4 +614,18 @@ test_import_nbd_stream_qcow2 ${IMAGE2} ${IMAGE3}
587614
test_import_raw_format ${IMAGE1} ${IMAGE2}
588615
test_import_nbd_stream_raw ${IMAGE1} ${IMAGE2}
589616

617+
rbd namespace create rbd/${NAMESPACE1}
618+
rbd namespace create rbd/${NAMESPACE2}
619+
create_base_image rbd/${NAMESPACE1}/${IMAGE1}
620+
export_base_image rbd/${NAMESPACE1}/${IMAGE1}
621+
622+
# Migration from namespace to namespace
623+
test_import_native_format rbd/${NAMESPACE1}/${IMAGE1} rbd/${NAMESPACE2}/${IMAGE2}
624+
625+
# Migration from namespace to non-namespace
626+
test_import_native_format rbd/${NAMESPACE1}/${IMAGE1} ${IMAGE2}
627+
628+
# Migration from non-namespace to namespace
629+
test_import_native_format ${IMAGE1} rbd/${NAMESPACE2}/${IMAGE2}
630+
590631
echo OK

0 commit comments

Comments
 (0)