4 . $
(dirname $0)/..
/..
/standalone
/ceph-helpers.sh
23 # Look for the command in the user path. If it fails run it as is,
24 # supposing it is in sudo path.
25 cmd
=`which $1 2>/dev/null` || cmd
=$1
27 sudo
-nE "${cmd}" "$@"
34 if [ -e CMakeCache.txt
]; then
35 # running under cmake build dir
37 CEPH_SRC
=$
(readlink
-f $
(dirname $0)/..
/..
/..
/src
)
39 CEPH_BIN
=${CEPH_ROOT}/bin
41 export LD_LIBRARY_PATH
=${CEPH_ROOT}/lib
:${LD_LIBRARY_PATH}
42 export PYTHONPATH
=${PYTHONPATH}:${CEPH_SRC}/pybind
43 for x
in ${CEPH_ROOT}/lib
/cython_modules
/lib
* ; do
44 PYTHONPATH
="${PYTHONPATH}:${x}"
46 PATH
=${CEPH_BIN}:${PATH}
51 trap cleanup INT TERM EXIT
54 dd if=/dev
/urandom of
=${DATA} bs
=1M count
=${SIZE}
56 rbd namespace create
${POOL}/${NS}
58 for ns
in '' ${NS}; do
59 rbd
--dest-pool ${POOL} --dest-namespace "${ns}" --no-progress import \
72 _sudo rbd-nbd unmap
${DEV}
75 for ns
in '' ${NS}; do
76 if rbd
-p ${POOL} --namespace "${ns}" status ${IMAGE} 2>/dev
/null
; then
77 for s
in 0.5 1 2 4 8 16 32; do
79 rbd
-p ${POOL} --namespace "${ns}" status ${IMAGE} |
80 grep 'Watchers: none' && break
82 rbd
-p ${POOL} --namespace "${ns}" snap purge ${IMAGE}
83 rbd
-p ${POOL} --namespace "${ns}" remove ${IMAGE}
86 rbd namespace remove
${POOL}/${NS}
89 function expect_false
()
91 if "$@"; then return 1; else return 0; fi
98 PID
=$
(rbd-nbd
--format xml list-mapped |
$XMLSTARLET sel
-t -v \
99 "//devices/device[pool='${POOL}'][namespace='${ns}'][image='${IMAGE}'][device='${DEV}']/id")
101 ps
-p ${PID} -o cmd |
grep rbd-nbd
112 expect_false rbd-nbd INVALIDCMD
115 expect_false rbd-nbd map
${IMAGE}
117 expect_false _sudo rbd-nbd map INVALIDIMAGE
118 expect_false _sudo rbd-nbd
--device INVALIDDEV map
${IMAGE}
121 expect_false rbd-nbd
--format INVALID list-mapped
122 rbd-nbd
--format json
--pretty-format list-mapped
123 rbd-nbd
--format xml list-mapped
125 # map test using the first unused device
126 DEV
=`_sudo rbd-nbd map ${POOL}/${IMAGE}`
128 # map test specifying the device
129 expect_false _sudo rbd-nbd
--device ${DEV} map ${POOL}/${IMAGE}
131 _sudo rbd-nbd unmap
${DEV}
132 rbd-nbd list-mapped | expect_false
grep "${DEV} $"
134 # XXX: race possible when the device is reused by other process
135 DEV
=`_sudo rbd-nbd --device ${dev1} map ${POOL}/${IMAGE}`
136 [ "${DEV}" = "${dev1}" ]
137 rbd-nbd list-mapped |
grep "${IMAGE}"
141 [ "`dd if=${DATA} bs=1M | md5sum`" = "`_sudo dd if=${DEV} bs=1M | md5sum`" ]
144 dd if=/dev
/urandom of
=${DATA} bs
=1M count
=${SIZE}
145 _sudo
dd if=${DATA} of
=${DEV} bs
=1M oflag
=direct
146 [ "`dd if=${DATA} bs=1M | md5sum`" = "`rbd -p ${POOL} --no-progress export ${IMAGE} - | md5sum`" ]
149 provisioned
=`rbd -p ${POOL} --format xml du ${IMAGE} |
150 $XMLSTARLET sel -t -m "//stats/images/image/provisioned_size" -v .`
151 used
=`rbd -p ${POOL} --format xml du ${IMAGE} |
152 $XMLSTARLET sel -t -m "//stats/images/image/used_size" -v .`
153 [ "${used}" -eq "${provisioned}" ]
154 _sudo mkfs.ext4
-E discard
${DEV} # better idea?
156 provisioned
=`rbd -p ${POOL} --format xml du ${IMAGE} |
157 $XMLSTARLET sel -t -m "//stats/images/image/provisioned_size" -v .`
158 used
=`rbd -p ${POOL} --format xml du ${IMAGE} |
159 $XMLSTARLET sel -t -m "//stats/images/image/used_size" -v .`
160 [ "${used}" -lt "${provisioned}" ]
163 devname
=$
(basename ${DEV})
164 blocks
=$
(awk -v dev
=${devname} '$4 == dev {print $3}' /proc
/partitions
)
166 rbd resize
${POOL}/${IMAGE} --size $
((SIZE
* 2))M
167 rbd info
${POOL}/${IMAGE}
168 blocks2
=$
(awk -v dev
=${devname} '$4 == dev {print $3}' /proc
/partitions
)
170 test ${blocks2} -eq $
((blocks
* 2))
171 rbd resize
${POOL}/${IMAGE} --allow-shrink --size ${SIZE}M
172 blocks2
=$
(awk -v dev
=${devname} '$4 == dev {print $3}' /proc
/partitions
)
174 test ${blocks2} -eq ${blocks}
176 # read-only option test
177 _sudo rbd-nbd unmap
${DEV}
178 DEV
=`_sudo rbd-nbd map --read-only ${POOL}/${IMAGE}`
179 PID
=$
(rbd-nbd list-mapped |
awk -v pool
=${POOL} -v img=${IMAGE} -v dev=${DEV} \
180 '$2 == pool && $3 == img && $5 == dev {print $1}')
182 ps
-p ${PID} -o cmd |
grep rbd-nbd
184 _sudo
dd if=${DEV} of
=/dev
/null bs
=1M
185 expect_false _sudo
dd if=${DATA} of
=${DEV} bs
=1M oflag
=direct
186 _sudo rbd-nbd unmap
${DEV}
188 # exclusive option test
189 DEV
=`_sudo rbd-nbd map --exclusive ${POOL}/${IMAGE}`
192 _sudo
dd if=${DATA} of
=${DEV} bs
=1M oflag
=direct
193 expect_false timeout
10 \
194 rbd bench
${IMAGE} --io-type write --io-size=1024 --io-total=1024
195 _sudo rbd-nbd unmap
${DEV}
197 rbd bench
${IMAGE} --io-type write --io-size=1024 --io-total=1024
199 # unmap by image name test
200 DEV
=`_sudo rbd-nbd map ${POOL}/${IMAGE}`
202 _sudo rbd-nbd unmap
"${IMAGE}"
203 rbd-nbd list-mapped | expect_false
grep "${DEV} $"
205 ps
-p ${PID} -o cmd | expect_false
grep rbd-nbd
207 # map/unmap snap test
208 rbd snap create
${POOL}/${IMAGE}@snap
209 DEV
=`_sudo rbd-nbd map ${POOL}/${IMAGE}@snap`
211 _sudo rbd-nbd unmap
"${IMAGE}@snap"
212 rbd-nbd list-mapped | expect_false
grep "${DEV} $"
214 ps
-p ${PID} -o cmd | expect_false
grep rbd-nbd
216 # map/unmap namespace test
217 rbd snap create
${POOL}/${NS}/${IMAGE}@snap
218 DEV
=`_sudo rbd-nbd map ${POOL}/${NS}/${IMAGE}@snap`
220 _sudo rbd-nbd unmap
"${POOL}/${NS}/${IMAGE}@snap"
221 rbd-nbd list-mapped | expect_false
grep "${DEV} $"
223 ps
-p ${PID} -o cmd | expect_false
grep rbd-nbd
226 DEV
=`_sudo rbd-nbd map ${POOL}/${IMAGE}`
229 for i
in `seq 10`; do
230 rbd-nbd list-mapped | expect_false
grep "^${PID} *${POOL} *${IMAGE}" && break
233 rbd-nbd list-mapped | expect_false
grep "^${PID} *${POOL} *${IMAGE}"