3 . $
(dirname $0)/..
/ceph-helpers.sh
21 # Look for the command in the user path. If it fails run it as is,
22 # supposing it is in sudo path.
23 cmd
=`which $1 2>/dev/null` || cmd
=$1
25 sudo
-nE "${cmd}" "$@"
30 if [ -e CMakeCache.txt
]; then
31 # running under cmake build dir
33 CEPH_SRC
=$
(readlink
-f $
(dirname $0)/..
/..
/..
/src
)
35 CEPH_BIN
=${CEPH_ROOT}/bin
37 export LD_LIBRARY_PATH
=${CEPH_ROOT}/lib
:${LD_LIBRARY_PATH}
38 export PYTHONPATH
=${PYTHONPATH}:${CEPH_SRC}/pybind
39 for x
in ${CEPH_ROOT}/lib
/cython_modules
/lib
* ; do
40 PYTHONPATH
="${PYTHONPATH}:${x}"
42 PATH
=${CEPH_BIN}:${PATH}
47 trap cleanup INT TERM EXIT
50 dd if=/dev
/urandom of
=${DATA} bs
=1M count
=${SIZE}
51 rbd
--dest-pool ${POOL} --no-progress import ${DATA} ${IMAGE}
60 _sudo rbd-nbd unmap
${DEV}
62 if rbd
-p ${POOL} status
${IMAGE} 2>/dev
/null
; then
63 for s
in 0.5 1 2 4 8 16 32; do
65 rbd
-p ${POOL} status
${IMAGE} |
grep 'Watchers: none' && break
67 rbd
-p ${POOL} remove
${IMAGE}
71 function expect_false
()
73 if "$@"; then return 1; else return 0; fi
84 expect_false rbd-nbd INVALIDCMD
87 expect_false rbd-nbd map
${IMAGE}
89 expect_false _sudo rbd-nbd map INVALIDIMAGE
90 expect_false _sudo rbd-nbd
--device INVALIDDEV map
${IMAGE}
92 # map test using the first unused device
93 DEV
=`_sudo rbd-nbd map ${POOL}/${IMAGE}`
94 _sudo rbd-nbd list-mapped |
grep "^${DEV}$"
96 # map test specifying the device
97 expect_false _sudo rbd-nbd
--device ${DEV} map ${POOL}/${IMAGE}
99 _sudo rbd-nbd unmap
${DEV}
100 _sudo rbd-nbd list-mapped | expect_false
grep "^${DEV}$"
102 # XXX: race possible when the device is reused by other process
103 DEV
=`_sudo rbd-nbd --device ${dev1} map ${POOL}/${IMAGE}`
104 [ "${DEV}" = "${dev1}" ]
105 _sudo rbd-nbd list-mapped |
grep "^${DEV}$"
108 [ "`dd if=${DATA} bs=1M | md5sum`" = "`_sudo dd if=${DEV} bs=1M | md5sum`" ]
111 dd if=/dev
/urandom of
=${DATA} bs
=1M count
=${SIZE}
112 _sudo
dd if=${DATA} of
=${DEV} bs
=1M oflag
=direct
113 [ "`dd if=${DATA} bs=1M | md5sum`" = "`rbd -p ${POOL} --no-progress export ${IMAGE} - | md5sum`" ]
116 provisioned
=`rbd -p ${POOL} --format xml du ${IMAGE} |
117 $XMLSTARLET sel -t -m "//stats/images/image/provisioned_size" -v .`
118 used
=`rbd -p ${POOL} --format xml du ${IMAGE} |
119 $XMLSTARLET sel -t -m "//stats/images/image/used_size" -v .`
120 [ "${used}" -eq "${provisioned}" ]
121 _sudo mkfs.ext4
-E discard
${DEV} # better idea?
123 provisioned
=`rbd -p ${POOL} --format xml du ${IMAGE} |
124 $XMLSTARLET sel -t -m "//stats/images/image/provisioned_size" -v .`
125 used
=`rbd -p ${POOL} --format xml du ${IMAGE} |
126 $XMLSTARLET sel -t -m "//stats/images/image/used_size" -v .`
127 [ "${used}" -lt "${provisioned}" ]
130 devname
=$
(basename ${DEV})
131 blocks
=$
(awk -v dev
=${devname} '$4 == dev {print $3}' /proc
/partitions
)
133 rbd resize
${POOL}/${IMAGE} --size $
((SIZE
* 2))M
134 rbd info
${POOL}/${IMAGE}
135 blocks2
=$
(awk -v dev
=${devname} '$4 == dev {print $3}' /proc
/partitions
)
137 test ${blocks2} -eq $
((blocks
* 2))
138 rbd resize
${POOL}/${IMAGE} --allow-shrink --size ${SIZE}M
139 blocks2
=$
(awk -v dev
=${devname} '$4 == dev {print $3}' /proc
/partitions
)
141 test ${blocks2} -eq ${blocks}
143 # read-only option test
144 _sudo rbd-nbd unmap
${DEV}
145 DEV
=`_sudo rbd-nbd map --read-only ${POOL}/${IMAGE}`
146 _sudo rbd-nbd list-mapped |
grep "^${DEV}$"
147 _sudo
dd if=${DEV} of
=/dev
/null bs
=1M
148 expect_false _sudo
dd if=${DATA} of
=${DEV} bs
=1M oflag
=direct
149 _sudo rbd-nbd unmap
${DEV}
151 # exclusive option test
152 DEV
=`_sudo rbd-nbd map --exclusive ${POOL}/${IMAGE}`
153 _sudo rbd-nbd list-mapped |
grep "^${DEV}$"
154 _sudo
dd if=${DATA} of
=${DEV} bs
=1M oflag
=direct
155 expect_false timeout
10 \
156 rbd bench
${IMAGE} --io-type write --io-size=1024 --io-total=1024
157 _sudo rbd-nbd unmap
${DEV}
159 rbd bench
${IMAGE} --io-type write --io-size=1024 --io-total=1024