cc29c12ec6
Since commiteffd60c8
changed how QMP commands are processed, the order of the block-commit return value and job events in iotests 144 wasn't fixed and more and caused the test to fail intermittently. Change the test to cache events first and then print them in a predefined order. Waiting three times for JOB_STATUS_CHANGE is a bit uglier than just waiting for the JOB_STATUS_CHANGE that has "status": "ready", but the tooling we have doesn't seem to allow the latter easily. Fixes:effd60c878
Resolves: https://gitlab.com/qemu-project/qemu/-/issues/2126 Signed-off-by: Kevin Wolf <kwolf@redhat.com> Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com> Message-id: 20240209173103.239994-1-kwolf@redhat.com Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
126 lines
3.4 KiB
Bash
Executable File
126 lines
3.4 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# group: rw quick
|
|
# Check live snapshot, followed by active commit, and another snapshot.
|
|
#
|
|
# This test is to catch the error case of BZ #1300209:
|
|
# https://bugzilla.redhat.com/show_bug.cgi?id=1300209
|
|
#
|
|
# Copyright (C) 2016 Red Hat, Inc.
|
|
#
|
|
# This program is free software; you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation; either version 2 of the License, or
|
|
# (at your option) any later version.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
#
|
|
|
|
# creator
|
|
owner=codyprime@gmail.com
|
|
|
|
seq=`basename $0`
|
|
echo "QA output created by $seq"
|
|
|
|
status=1 # failure is the default!
|
|
|
|
TMP_SNAP1=${TEST_DIR}/tmp.qcow2
|
|
TMP_SNAP2=${TEST_DIR}/tmp2.qcow2
|
|
|
|
_cleanup()
|
|
{
|
|
_cleanup_qemu
|
|
for img in "${TEST_IMG}" "${TMP_SNAP1}" "${TMP_SNAP2}"; do
|
|
_rm_test_img "$img"
|
|
done
|
|
}
|
|
|
|
trap "_cleanup; exit \$status" 0 1 2 3 15
|
|
|
|
# get standard environment, filters and checks
|
|
. ./common.rc
|
|
. ./common.filter
|
|
. ./common.qemu
|
|
|
|
_supported_fmt qcow2
|
|
_supported_proto file
|
|
|
|
size=512M
|
|
|
|
_make_test_img $size
|
|
|
|
echo
|
|
echo === Launching QEMU ===
|
|
echo
|
|
|
|
qemu_comm_method="qmp"
|
|
_launch_qemu -drive file="${TEST_IMG}",if=virtio
|
|
h=$QEMU_HANDLE
|
|
|
|
|
|
echo
|
|
echo === Performing Live Snapshot 1 ===
|
|
echo
|
|
|
|
_send_qemu_cmd $h "{ 'execute': 'qmp_capabilities' }" "return"
|
|
|
|
|
|
# First live snapshot, new overlay as active layer
|
|
_send_qemu_cmd $h "{ 'execute': 'blockdev-snapshot-sync',
|
|
'arguments': {
|
|
'device': 'virtio0',
|
|
'snapshot-file':'${TMP_SNAP1}',
|
|
'format': 'qcow2'
|
|
}
|
|
}" "return"
|
|
|
|
echo
|
|
echo === Performing block-commit on active layer ===
|
|
echo
|
|
|
|
capture_events="BLOCK_JOB_READY JOB_STATUS_CHANGE"
|
|
|
|
# Block commit on active layer, push the new overlay into base
|
|
_send_qemu_cmd $h "{ 'execute': 'block-commit',
|
|
'arguments': {
|
|
'device': 'virtio0'
|
|
}
|
|
}" "return"
|
|
|
|
_wait_event $h "JOB_STATUS_CHANGE"
|
|
_wait_event $h "JOB_STATUS_CHANGE"
|
|
_wait_event $h "JOB_STATUS_CHANGE"
|
|
|
|
_wait_event $h "BLOCK_JOB_READY"
|
|
|
|
capture_events=
|
|
|
|
_send_qemu_cmd $h "{ 'execute': 'block-job-complete',
|
|
'arguments': {
|
|
'device': 'virtio0'
|
|
}
|
|
}" '"status": "null"'
|
|
|
|
echo
|
|
echo === Performing Live Snapshot 2 ===
|
|
echo
|
|
|
|
# New live snapshot, new overlays as active layer
|
|
_send_qemu_cmd $h "{ 'execute': 'blockdev-snapshot-sync',
|
|
'arguments': {
|
|
'device': 'virtio0',
|
|
'snapshot-file':'${TMP_SNAP2}',
|
|
'format': 'qcow2'
|
|
}
|
|
}" "return"
|
|
|
|
# success, all done
|
|
echo "*** done"
|
|
rm -f $seq.full
|
|
status=0
|