Replace pipe-based HMP savevm/loadvm, nbd_server_start/add, and info snapshots with QMP equivalents.
Signed-off-by: Marc-André Lureau <[email protected]> --- tests/qemu-iotests/267 | 139 +++++++++----- tests/qemu-iotests/267.out | 447 ++++++++++++++++++++++++++++++++++----------- 2 files changed, 435 insertions(+), 151 deletions(-) diff --git a/tests/qemu-iotests/267 b/tests/qemu-iotests/267 index e14aeb1f18d0..68c2f2cbebb1 100755 --- a/tests/qemu-iotests/267 +++ b/tests/qemu-iotests/267 @@ -29,6 +29,7 @@ status=1 # failure is the default! _cleanup() { + _cleanup_qemu _cleanup_test_img rm -f "$SOCK_DIR/nbd" } @@ -37,6 +38,7 @@ 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 @@ -48,38 +50,53 @@ _require_drivers copy-on-read _unsupported_imgopts 'refcount_bits=1[^0-9]' data_file _require_devices virtio-blk -_require_hmp - -do_run_qemu() -{ - echo Testing: "$@" - ( - if ! test -t 0; then - while read cmd; do - echo $cmd - done - fi - echo quit - ) | $QEMU -nographic -monitor stdio -nodefaults "$@" - echo -} - -run_qemu() -{ - do_run_qemu "$@" 2>&1 | _filter_testdir | _filter_qemu | _filter_hmp | - _filter_generated_node_ids | _filter_imgfmt | _filter_vmstate_size -} size=128M +# snapshot-save/snapshot-load are job-based QMP commands; wait for +# "concluded" (auto-dismiss to "null" only fires on the next command). run_test() { + local snapshot_node="$1" + shift + if [ -n "$BACKING_FILE" ]; then _make_test_img -b "$BACKING_FILE" -F $IMGFMT $size else _make_test_img $size fi - printf "savevm snap0\ninfo snapshots\nloadvm snap0\n" | run_qemu "$@" | _filter_date + + echo Testing: "$@" | _filter_testdir | _filter_imgfmt + _launch_qemu -nodefaults "$@" + _send_qemu_cmd $QEMU_HANDLE \ + "{ 'execute': 'qmp_capabilities' }" \ + 'return' + + # snapshot-save + _send_qemu_cmd $QEMU_HANDLE \ + "{ 'execute': 'snapshot-save', + 'arguments': { 'job-id': 'save0', 'tag': 'snap0', + 'vmstate': '$snapshot_node', + 'devices': [\"$snapshot_node\"] } }" \ + 'return' + silent=yes _send_qemu_cmd $QEMU_HANDLE '' '"concluded"' + + # snapshot-load + _send_qemu_cmd $QEMU_HANDLE \ + "{ 'execute': 'snapshot-load', + 'arguments': { 'job-id': 'load0', 'tag': 'snap0', + 'vmstate': '$snapshot_node', + 'devices': [\"$snapshot_node\"] } }" \ + 'return' + silent=yes _send_qemu_cmd $QEMU_HANDLE '' '"concluded"' + + _send_qemu_cmd $QEMU_HANDLE \ + "{ 'execute': 'quit' }" \ + 'return' + wait=1 _cleanup_qemu + + $QEMU_IMG snapshot -l "$TEST_IMG" | _filter_date | _filter_vmstate_size + echo } @@ -87,31 +104,31 @@ echo echo "=== No block devices at all ===" echo -run_test +run_test nonexistent echo echo "=== -drive if=none ===" echo -run_test -drive driver=file,file="$TEST_IMG",if=none -run_test -drive driver=$IMGFMT,file="$TEST_IMG",if=none -run_test -drive driver=$IMGFMT,file="$TEST_IMG",if=none -device virtio-blk,drive=none0 +run_test drv0 -drive driver=file,file="$TEST_IMG",if=none,node-name=drv0 +run_test drv0 -drive driver=$IMGFMT,file="$TEST_IMG",if=none,node-name=drv0 +run_test drv0 -drive driver=$IMGFMT,file="$TEST_IMG",if=none,node-name=drv0 -device virtio-blk,drive=none0 echo echo "=== -drive if=virtio ===" echo -run_test -drive driver=file,file="$TEST_IMG",if=virtio -run_test -drive driver=$IMGFMT,file="$TEST_IMG",if=virtio +run_test drv0 -drive driver=file,file="$TEST_IMG",if=virtio,node-name=drv0 +run_test drv0 -drive driver=$IMGFMT,file="$TEST_IMG",if=virtio,node-name=drv0 echo echo "=== Simple -blockdev ===" echo -run_test -blockdev driver=file,filename="$TEST_IMG",node-name=file -run_test -blockdev driver=file,filename="$TEST_IMG",node-name=file \ +run_test file -blockdev driver=file,filename="$TEST_IMG",node-name=file +run_test fmt -blockdev driver=file,filename="$TEST_IMG",node-name=file \ -blockdev driver=$IMGFMT,file=file,node-name=fmt -run_test -blockdev driver=file,filename="$TEST_IMG",node-name=file \ +run_test fmt -blockdev driver=file,filename="$TEST_IMG",node-name=file \ -blockdev driver=raw,file=file,node-name=raw \ -blockdev driver=$IMGFMT,file=raw,node-name=fmt @@ -119,7 +136,7 @@ echo echo "=== -blockdev with a filter on top ===" echo -run_test -blockdev driver=file,filename="$TEST_IMG",node-name=file \ +run_test fmt -blockdev driver=file,filename="$TEST_IMG",node-name=file \ -blockdev driver=$IMGFMT,file=file,node-name=fmt \ -blockdev driver=copy-on-read,file=fmt,node-name=filter @@ -130,12 +147,12 @@ echo TEST_IMG="$TEST_IMG.base" _make_test_img $size BACKING_FILE="$TEST_IMG.base" \ -run_test -blockdev driver=file,filename="$TEST_IMG.base",node-name=backing-file \ +run_test fmt -blockdev driver=file,filename="$TEST_IMG.base",node-name=backing-file \ -blockdev driver=file,filename="$TEST_IMG",node-name=file \ -blockdev driver=$IMGFMT,file=file,backing=backing-file,node-name=fmt BACKING_FILE="$TEST_IMG.base" \ -run_test -blockdev driver=file,filename="$TEST_IMG.base",node-name=backing-file \ +run_test fmt -blockdev driver=file,filename="$TEST_IMG.base",node-name=backing-file \ -blockdev driver=$IMGFMT,file=backing-file,node-name=backing-fmt \ -blockdev driver=file,filename="$TEST_IMG",node-name=file \ -blockdev driver=$IMGFMT,file=file,backing=backing-fmt,node-name=fmt @@ -152,18 +169,48 @@ echo "=== -blockdev with NBD server on the backing file ===" echo _make_test_img -b "$TEST_IMG.base" -F $IMGFMT $size -cat <<EOF | -nbd_server_start unix:$SOCK_DIR/nbd -nbd_server_add -w backing-fmt -savevm snap0 -info snapshots -loadvm snap0 -EOF -run_qemu -blockdev driver=file,filename="$TEST_IMG.base",node-name=backing-file \ - -blockdev driver=$IMGFMT,file=backing-file,node-name=backing-fmt \ - -blockdev driver=file,filename="$TEST_IMG",node-name=file \ - -blockdev driver=$IMGFMT,file=file,backing=backing-fmt,node-name=fmt | - _filter_date + +_launch_qemu -nodefaults \ + -blockdev driver=file,filename="$TEST_IMG.base",node-name=backing-file \ + -blockdev driver=$IMGFMT,file=backing-file,node-name=backing-fmt \ + -blockdev driver=file,filename="$TEST_IMG",node-name=file \ + -blockdev driver=$IMGFMT,file=file,backing=backing-fmt,node-name=fmt + +_send_qemu_cmd $QEMU_HANDLE \ + "{ 'execute': 'qmp_capabilities' }" \ + 'return' + +_send_qemu_cmd $QEMU_HANDLE \ + "{ 'execute': 'nbd-server-start', + 'arguments': { 'addr': { 'type': 'unix', + 'data': { 'path': '$SOCK_DIR/nbd' } } } }" \ + 'return' + +_send_qemu_cmd $QEMU_HANDLE \ + "{ 'execute': 'nbd-server-add', + 'arguments': { 'device': 'backing-fmt', 'writable': true } }" \ + 'return' + +_send_qemu_cmd $QEMU_HANDLE \ + "{ 'execute': 'snapshot-save', + 'arguments': { 'job-id': 'save0', 'tag': 'snap0', + 'vmstate': 'fmt', + 'devices': [\"fmt\", \"backing-fmt\"] } }" \ + 'return' +silent=yes _send_qemu_cmd $QEMU_HANDLE '' '"concluded"' + +_send_qemu_cmd $QEMU_HANDLE \ + "{ 'execute': 'snapshot-load', + 'arguments': { 'job-id': 'load0', 'tag': 'snap0', + 'vmstate': 'fmt', + 'devices': [\"fmt\", \"backing-fmt\"] } }" \ + 'return' +silent=yes _send_qemu_cmd $QEMU_HANDLE '' '"concluded"' + +_send_qemu_cmd $QEMU_HANDLE \ + "{ 'execute': 'quit' }" \ + 'return' +wait=1 _cleanup_qemu # This time, a snapshot should be created on both files echo Internal snapshots on overlay: diff --git a/tests/qemu-iotests/267.out b/tests/qemu-iotests/267.out index 37b7ebd28049..30e094f8b98f 100644 --- a/tests/qemu-iotests/267.out +++ b/tests/qemu-iotests/267.out @@ -4,125 +4,301 @@ QA output created by 267 Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728 Testing: -QEMU X.Y.Z monitor - type 'help' for more information -(qemu) savevm snap0 -Error: no block device can store vmstate for snapshot -(qemu) info snapshots -Error: no block device can store vmstate for snapshot -(qemu) loadvm snap0 -Error: no block device can store vmstate for snapshot -(qemu) quit +{ 'execute': 'qmp_capabilities' } +{"return": {}} +{ 'execute': 'snapshot-save', + 'arguments': { 'job-id': 'save0', 'tag': 'snap0', + 'vmstate': 'nonexistent', + 'devices': ["nonexistent"] } } +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "created", "id": "save0"}} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "running", "id": "save0"}} +{"return": {}} +{ 'execute': 'snapshot-load', + 'arguments': { 'job-id': 'load0', 'tag': 'snap0', + 'vmstate': 'nonexistent', + 'devices': ["nonexistent"] } } +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "created", "id": "load0"}} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "running", "id": "load0"}} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "STOP"} +{"return": {}} +{ 'execute': 'quit' } +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false, "reason": "host-qmp-quit"}} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "null", "id": "load0"}} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "null", "id": "save0"}} +{"return": {}} === -drive if=none === Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728 -Testing: -drive driver=file,file=TEST_DIR/t.IMGFMT,if=none -QEMU X.Y.Z monitor - type 'help' for more information -(qemu) savevm snap0 -Error: Device 'none0' is writable but does not support snapshots -(qemu) info snapshots -Error: no block device can store vmstate for snapshot -(qemu) loadvm snap0 -Error: Device 'none0' is writable but does not support snapshots -(qemu) quit +Testing: -drive driver=file,file=TEST_DIR/t.IMGFMT,if=none,node-name=drv0 +{ 'execute': 'qmp_capabilities' } +{"return": {}} +{ 'execute': 'snapshot-save', + 'arguments': { 'job-id': 'save0', 'tag': 'snap0', + 'vmstate': 'drv0', + 'devices': ["drv0"] } } +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "created", "id": "save0"}} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "running", "id": "save0"}} +{"return": {}} +{ 'execute': 'snapshot-load', + 'arguments': { 'job-id': 'load0', 'tag': 'snap0', + 'vmstate': 'drv0', + 'devices': ["drv0"] } } +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "created", "id": "load0"}} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "running", "id": "load0"}} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "STOP"} +{"return": {}} +{ 'execute': 'quit' } +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false, "reason": "host-qmp-quit"}} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "null", "id": "load0"}} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "null", "id": "save0"}} +{"return": {}} Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728 -Testing: -drive driver=IMGFMT,file=TEST_DIR/t.IMGFMT,if=none -QEMU X.Y.Z monitor - type 'help' for more information -(qemu) savevm snap0 -(qemu) info snapshots -List of snapshots present on all disks: +Testing: -drive driver=IMGFMT,file=TEST_DIR/t.IMGFMT,if=none,node-name=drv0 +{ 'execute': 'qmp_capabilities' } +{"return": {}} +{ 'execute': 'snapshot-save', + 'arguments': { 'job-id': 'save0', 'tag': 'snap0', + 'vmstate': 'drv0', + 'devices': ["drv0"] } } +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "created", "id": "save0"}} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "running", "id": "save0"}} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "STOP"} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "RESUME"} +{"return": {}} +{ 'execute': 'snapshot-load', + 'arguments': { 'job-id': 'load0', 'tag': 'snap0', + 'vmstate': 'drv0', + 'devices': ["drv0"] } } +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "created", "id": "load0"}} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "running", "id": "load0"}} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "STOP"} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "RESUME"} +{"return": {}} +{ 'execute': 'quit' } +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false, "reason": "host-qmp-quit"}} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "null", "id": "load0"}} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "null", "id": "save0"}} +{"return": {}} +Snapshot list: ID TAG VM_SIZE DATE VM_CLOCK ICOUNT --- snap0 SIZE yyyy-mm-dd hh:mm:ss 0000:00:00.000 -- -(qemu) loadvm snap0 -(qemu) quit +1 snap0 SIZE yyyy-mm-dd hh:mm:ss 0000:00:00.000 -- Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728 -Testing: -drive driver=IMGFMT,file=TEST_DIR/t.IMGFMT,if=none -device virtio-blk,drive=none0 -QEMU X.Y.Z monitor - type 'help' for more information -(qemu) savevm snap0 -(qemu) info snapshots -List of snapshots present on all disks: +Testing: -drive driver=IMGFMT,file=TEST_DIR/t.IMGFMT,if=none,node-name=drv0 -device virtio-blk,drive=none0 +{ 'execute': 'qmp_capabilities' } +{"return": {}} +{ 'execute': 'snapshot-save', + 'arguments': { 'job-id': 'save0', 'tag': 'snap0', + 'vmstate': 'drv0', + 'devices': ["drv0"] } } +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "created", "id": "save0"}} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "running", "id": "save0"}} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "STOP"} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "RESUME"} +{"return": {}} +{ 'execute': 'snapshot-load', + 'arguments': { 'job-id': 'load0', 'tag': 'snap0', + 'vmstate': 'drv0', + 'devices': ["drv0"] } } +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "created", "id": "load0"}} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "running", "id": "load0"}} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "STOP"} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "RESUME"} +{"return": {}} +{ 'execute': 'quit' } +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false, "reason": "host-qmp-quit"}} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "null", "id": "load0"}} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "null", "id": "save0"}} +{"return": {}} +Snapshot list: ID TAG VM_SIZE DATE VM_CLOCK ICOUNT --- snap0 SIZE yyyy-mm-dd hh:mm:ss 0000:00:00.000 -- -(qemu) loadvm snap0 -(qemu) quit +1 snap0 SIZE yyyy-mm-dd hh:mm:ss 0000:00:00.000 -- === -drive if=virtio === Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728 -Testing: -drive driver=file,file=TEST_DIR/t.IMGFMT,if=virtio -QEMU X.Y.Z monitor - type 'help' for more information -(qemu) savevm snap0 -Error: Device 'virtio0' is writable but does not support snapshots -(qemu) info snapshots -Error: no block device can store vmstate for snapshot -(qemu) loadvm snap0 -Error: Device 'virtio0' is writable but does not support snapshots -(qemu) quit +Testing: -drive driver=file,file=TEST_DIR/t.IMGFMT,if=virtio,node-name=drv0 +{ 'execute': 'qmp_capabilities' } +{"return": {}} +{ 'execute': 'snapshot-save', + 'arguments': { 'job-id': 'save0', 'tag': 'snap0', + 'vmstate': 'drv0', + 'devices': ["drv0"] } } +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "created", "id": "save0"}} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "running", "id": "save0"}} +{"return": {}} +{ 'execute': 'snapshot-load', + 'arguments': { 'job-id': 'load0', 'tag': 'snap0', + 'vmstate': 'drv0', + 'devices': ["drv0"] } } +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "created", "id": "load0"}} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "running", "id": "load0"}} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "STOP"} +{"return": {}} +{ 'execute': 'quit' } +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false, "reason": "host-qmp-quit"}} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "null", "id": "load0"}} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "null", "id": "save0"}} +{"return": {}} Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728 -Testing: -drive driver=IMGFMT,file=TEST_DIR/t.IMGFMT,if=virtio -QEMU X.Y.Z monitor - type 'help' for more information -(qemu) savevm snap0 -(qemu) info snapshots -List of snapshots present on all disks: +Testing: -drive driver=IMGFMT,file=TEST_DIR/t.IMGFMT,if=virtio,node-name=drv0 +{ 'execute': 'qmp_capabilities' } +{"return": {}} +{ 'execute': 'snapshot-save', + 'arguments': { 'job-id': 'save0', 'tag': 'snap0', + 'vmstate': 'drv0', + 'devices': ["drv0"] } } +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "created", "id": "save0"}} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "running", "id": "save0"}} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "STOP"} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "RESUME"} +{"return": {}} +{ 'execute': 'snapshot-load', + 'arguments': { 'job-id': 'load0', 'tag': 'snap0', + 'vmstate': 'drv0', + 'devices': ["drv0"] } } +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "created", "id": "load0"}} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "running", "id": "load0"}} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "STOP"} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "RESUME"} +{"return": {}} +{ 'execute': 'quit' } +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false, "reason": "host-qmp-quit"}} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "null", "id": "load0"}} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "null", "id": "save0"}} +{"return": {}} +Snapshot list: ID TAG VM_SIZE DATE VM_CLOCK ICOUNT --- snap0 SIZE yyyy-mm-dd hh:mm:ss 0000:00:00.000 -- -(qemu) loadvm snap0 -(qemu) quit +1 snap0 SIZE yyyy-mm-dd hh:mm:ss 0000:00:00.000 -- === Simple -blockdev === Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728 Testing: -blockdev driver=file,filename=TEST_DIR/t.IMGFMT,node-name=file -QEMU X.Y.Z monitor - type 'help' for more information -(qemu) savevm snap0 -Error: Device 'file' is writable but does not support snapshots -(qemu) info snapshots -Error: no block device can store vmstate for snapshot -(qemu) loadvm snap0 -Error: Device 'file' is writable but does not support snapshots -(qemu) quit +{ 'execute': 'qmp_capabilities' } +{"return": {}} +{ 'execute': 'snapshot-save', + 'arguments': { 'job-id': 'save0', 'tag': 'snap0', + 'vmstate': 'file', + 'devices': ["file"] } } +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "created", "id": "save0"}} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "running", "id": "save0"}} +{"return": {}} +{ 'execute': 'snapshot-load', + 'arguments': { 'job-id': 'load0', 'tag': 'snap0', + 'vmstate': 'file', + 'devices': ["file"] } } +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "created", "id": "load0"}} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "running", "id": "load0"}} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "STOP"} +{"return": {}} +{ 'execute': 'quit' } +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false, "reason": "host-qmp-quit"}} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "null", "id": "load0"}} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "null", "id": "save0"}} +{"return": {}} Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728 Testing: -blockdev driver=file,filename=TEST_DIR/t.IMGFMT,node-name=file -blockdev driver=IMGFMT,file=file,node-name=fmt -QEMU X.Y.Z monitor - type 'help' for more information -(qemu) savevm snap0 -(qemu) info snapshots -List of snapshots present on all disks: +{ 'execute': 'qmp_capabilities' } +{"return": {}} +{ 'execute': 'snapshot-save', + 'arguments': { 'job-id': 'save0', 'tag': 'snap0', + 'vmstate': 'fmt', + 'devices': ["fmt"] } } +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "created", "id": "save0"}} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "running", "id": "save0"}} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "STOP"} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "RESUME"} +{"return": {}} +{ 'execute': 'snapshot-load', + 'arguments': { 'job-id': 'load0', 'tag': 'snap0', + 'vmstate': 'fmt', + 'devices': ["fmt"] } } +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "created", "id": "load0"}} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "running", "id": "load0"}} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "STOP"} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "RESUME"} +{"return": {}} +{ 'execute': 'quit' } +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false, "reason": "host-qmp-quit"}} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "null", "id": "load0"}} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "null", "id": "save0"}} +{"return": {}} +Snapshot list: ID TAG VM_SIZE DATE VM_CLOCK ICOUNT --- snap0 SIZE yyyy-mm-dd hh:mm:ss 0000:00:00.000 -- -(qemu) loadvm snap0 -(qemu) quit +1 snap0 SIZE yyyy-mm-dd hh:mm:ss 0000:00:00.000 -- Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728 Testing: -blockdev driver=file,filename=TEST_DIR/t.IMGFMT,node-name=file -blockdev driver=raw,file=file,node-name=raw -blockdev driver=IMGFMT,file=raw,node-name=fmt -QEMU X.Y.Z monitor - type 'help' for more information -(qemu) savevm snap0 -(qemu) info snapshots -List of snapshots present on all disks: +{ 'execute': 'qmp_capabilities' } +{"return": {}} +{ 'execute': 'snapshot-save', + 'arguments': { 'job-id': 'save0', 'tag': 'snap0', + 'vmstate': 'fmt', + 'devices': ["fmt"] } } +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "created", "id": "save0"}} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "running", "id": "save0"}} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "STOP"} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "RESUME"} +{"return": {}} +{ 'execute': 'snapshot-load', + 'arguments': { 'job-id': 'load0', 'tag': 'snap0', + 'vmstate': 'fmt', + 'devices': ["fmt"] } } +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "created", "id": "load0"}} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "running", "id": "load0"}} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "STOP"} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "RESUME"} +{"return": {}} +{ 'execute': 'quit' } +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false, "reason": "host-qmp-quit"}} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "null", "id": "load0"}} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "null", "id": "save0"}} +{"return": {}} +Snapshot list: ID TAG VM_SIZE DATE VM_CLOCK ICOUNT --- snap0 SIZE yyyy-mm-dd hh:mm:ss 0000:00:00.000 -- -(qemu) loadvm snap0 -(qemu) quit +1 snap0 SIZE yyyy-mm-dd hh:mm:ss 0000:00:00.000 -- === -blockdev with a filter on top === Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728 Testing: -blockdev driver=file,filename=TEST_DIR/t.IMGFMT,node-name=file -blockdev driver=IMGFMT,file=file,node-name=fmt -blockdev driver=copy-on-read,file=fmt,node-name=filter -QEMU X.Y.Z monitor - type 'help' for more information -(qemu) savevm snap0 -(qemu) info snapshots -List of snapshots present on all disks: +{ 'execute': 'qmp_capabilities' } +{"return": {}} +{ 'execute': 'snapshot-save', + 'arguments': { 'job-id': 'save0', 'tag': 'snap0', + 'vmstate': 'fmt', + 'devices': ["fmt"] } } +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "created", "id": "save0"}} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "running", "id": "save0"}} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "STOP"} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "RESUME"} +{"return": {}} +{ 'execute': 'snapshot-load', + 'arguments': { 'job-id': 'load0', 'tag': 'snap0', + 'vmstate': 'fmt', + 'devices': ["fmt"] } } +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "created", "id": "load0"}} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "running", "id": "load0"}} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "STOP"} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "RESUME"} +{"return": {}} +{ 'execute': 'quit' } +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false, "reason": "host-qmp-quit"}} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "null", "id": "load0"}} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "null", "id": "save0"}} +{"return": {}} +Snapshot list: ID TAG VM_SIZE DATE VM_CLOCK ICOUNT --- snap0 SIZE yyyy-mm-dd hh:mm:ss 0000:00:00.000 -- -(qemu) loadvm snap0 -(qemu) quit +1 snap0 SIZE yyyy-mm-dd hh:mm:ss 0000:00:00.000 -- === -blockdev with a backing file === @@ -130,25 +306,65 @@ ID TAG VM_SIZE DATE VM_CLOCK ICOUNT Formatting 'TEST_DIR/t.IMGFMT.base', fmt=IMGFMT size=134217728 Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728 backing_file=TEST_DIR/t.IMGFMT.base backing_fmt=IMGFMT Testing: -blockdev driver=file,filename=TEST_DIR/t.IMGFMT.base,node-name=backing-file -blockdev driver=file,filename=TEST_DIR/t.IMGFMT,node-name=file -blockdev driver=IMGFMT,file=file,backing=backing-file,node-name=fmt -QEMU X.Y.Z monitor - type 'help' for more information -(qemu) savevm snap0 -(qemu) info snapshots -List of snapshots present on all disks: +{ 'execute': 'qmp_capabilities' } +{"return": {}} +{ 'execute': 'snapshot-save', + 'arguments': { 'job-id': 'save0', 'tag': 'snap0', + 'vmstate': 'fmt', + 'devices': ["fmt"] } } +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "created", "id": "save0"}} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "running", "id": "save0"}} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "STOP"} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "RESUME"} +{"return": {}} +{ 'execute': 'snapshot-load', + 'arguments': { 'job-id': 'load0', 'tag': 'snap0', + 'vmstate': 'fmt', + 'devices': ["fmt"] } } +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "created", "id": "load0"}} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "running", "id": "load0"}} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "STOP"} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "RESUME"} +{"return": {}} +{ 'execute': 'quit' } +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false, "reason": "host-qmp-quit"}} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "null", "id": "load0"}} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "null", "id": "save0"}} +{"return": {}} +Snapshot list: ID TAG VM_SIZE DATE VM_CLOCK ICOUNT --- snap0 SIZE yyyy-mm-dd hh:mm:ss 0000:00:00.000 -- -(qemu) loadvm snap0 -(qemu) quit +1 snap0 SIZE yyyy-mm-dd hh:mm:ss 0000:00:00.000 -- Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728 backing_file=TEST_DIR/t.IMGFMT.base backing_fmt=IMGFMT Testing: -blockdev driver=file,filename=TEST_DIR/t.IMGFMT.base,node-name=backing-file -blockdev driver=IMGFMT,file=backing-file,node-name=backing-fmt -blockdev driver=file,filename=TEST_DIR/t.IMGFMT,node-name=file -blockdev driver=IMGFMT,file=file,backing=backing-fmt,node-name=fmt -QEMU X.Y.Z monitor - type 'help' for more information -(qemu) savevm snap0 -(qemu) info snapshots -List of snapshots present on all disks: +{ 'execute': 'qmp_capabilities' } +{"return": {}} +{ 'execute': 'snapshot-save', + 'arguments': { 'job-id': 'save0', 'tag': 'snap0', + 'vmstate': 'fmt', + 'devices': ["fmt"] } } +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "created", "id": "save0"}} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "running", "id": "save0"}} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "STOP"} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "RESUME"} +{"return": {}} +{ 'execute': 'snapshot-load', + 'arguments': { 'job-id': 'load0', 'tag': 'snap0', + 'vmstate': 'fmt', + 'devices': ["fmt"] } } +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "created", "id": "load0"}} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "running", "id": "load0"}} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "STOP"} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "RESUME"} +{"return": {}} +{ 'execute': 'quit' } +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false, "reason": "host-qmp-quit"}} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "null", "id": "load0"}} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "null", "id": "save0"}} +{"return": {}} +Snapshot list: ID TAG VM_SIZE DATE VM_CLOCK ICOUNT --- snap0 SIZE yyyy-mm-dd hh:mm:ss 0000:00:00.000 -- -(qemu) loadvm snap0 -(qemu) quit +1 snap0 SIZE yyyy-mm-dd hh:mm:ss 0000:00:00.000 -- Internal snapshots on overlay: Snapshot list: @@ -159,18 +375,39 @@ Internal snapshots on backing file: === -blockdev with NBD server on the backing file === Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728 backing_file=TEST_DIR/t.IMGFMT.base backing_fmt=IMGFMT -Testing: -blockdev driver=file,filename=TEST_DIR/t.IMGFMT.base,node-name=backing-file -blockdev driver=IMGFMT,file=backing-file,node-name=backing-fmt -blockdev driver=file,filename=TEST_DIR/t.IMGFMT,node-name=file -blockdev driver=IMGFMT,file=file,backing=backing-fmt,node-name=fmt -QEMU X.Y.Z monitor - type 'help' for more information -(qemu) nbd_server_start unix:SOCK_DIR/nbd -(qemu) nbd_server_add -w backing-fmt -(qemu) savevm snap0 -(qemu) info snapshots -List of snapshots present on all disks: -ID TAG VM_SIZE DATE VM_CLOCK ICOUNT --- snap0 SIZE yyyy-mm-dd hh:mm:ss 0000:00:00.000 -- -(qemu) loadvm snap0 -(qemu) quit - +{ 'execute': 'qmp_capabilities' } +{"return": {}} +{ 'execute': 'nbd-server-start', + 'arguments': { 'addr': { 'type': 'unix', + 'data': { 'path': 'SOCK_DIR/nbd' } } } } +{"return": {}} +{ 'execute': 'nbd-server-add', + 'arguments': { 'device': 'backing-fmt', 'writable': true } } +{"return": {}} +{ 'execute': 'snapshot-save', + 'arguments': { 'job-id': 'save0', 'tag': 'snap0', + 'vmstate': 'fmt', + 'devices': ["fmt", "backing-fmt"] } } +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "created", "id": "save0"}} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "running", "id": "save0"}} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "STOP"} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "RESUME"} +{"return": {}} +{ 'execute': 'snapshot-load', + 'arguments': { 'job-id': 'load0', 'tag': 'snap0', + 'vmstate': 'fmt', + 'devices': ["fmt", "backing-fmt"] } } +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "created", "id": "load0"}} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "running", "id": "load0"}} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "STOP"} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "RESUME"} +{"return": {}} +{ 'execute': 'quit' } +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false, "reason": "host-qmp-quit"}} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "BLOCK_EXPORT_DELETED", "data": {"id": "backing-fmt"}} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "null", "id": "load0"}} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "null", "id": "save0"}} +{"return": {}} Internal snapshots on overlay: Snapshot list: ID TAG VM_SIZE DATE VM_CLOCK ICOUNT -- 2.56.0.rc0.29.g47ce80527c56
