qemu-img: Fix Column Width and Improve Formatting in snapshot list

When running the command `qemu-img snapshot -l SNAPSHOT` the output of
VM_CLOCK (measures the offset between host and VM clock) cannot to
accommodate values in the order of thousands (4-digit).

This line [1] hints on the problem. Additionally, the column width for
the VM_CLOCK field was reduced from 15 to 13 spaces in commit b39847a5
in line [2], resulting in a shortage of space.

[1]:
https://gitlab.com/qemu-project/qemu/-/blob/master/block/qapi.c?ref_type=heads#L753
[2]:
https://gitlab.com/qemu-project/qemu/-/blob/master/block/qapi.c?ref_type=heads#L763

This patch restores the column width to 15 spaces and makes adjustments
to the affected iotests accordingly. Furthermore, addresses a potential
source
of confusion by removing whitespace in column headers. Example, VM CLOCK
is modified to VM_CLOCK. Additionally a '--' symbol is introduced when
ICOUNT returns no output for clarity.

Resolves: https://gitlab.com/qemu-project/qemu/-/issues/2062
Fixes: b39847a505 ("migration: introduce icount field for snapshots")
Signed-off-by: Abhiram Tilak <atp.exp@gmail.com>
Message-ID: <20240123050354.22152-2-atp.exp@gmail.com>
[kwolf: Fixed up qemu-iotests 261 and 286]
Reviewed-by: Kevin Wolf <kwolf@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
Abhiram Tilak 2024-01-23 10:33:55 +05:30 committed by Kevin Wolf
parent 7fcb8c89f0
commit 52df1a5b61
7 changed files with 50 additions and 47 deletions

View File

@ -742,15 +742,15 @@ void bdrv_snapshot_dump(QEMUSnapshotInfo *sn)
char *sizing = NULL; char *sizing = NULL;
if (!sn) { if (!sn) {
qemu_printf("%-10s%-17s%8s%20s%13s%11s", qemu_printf("%-7s %-16s %8s %19s %15s %10s",
"ID", "TAG", "VM SIZE", "DATE", "VM CLOCK", "ICOUNT"); "ID", "TAG", "VM_SIZE", "DATE", "VM_CLOCK", "ICOUNT");
} else { } else {
g_autoptr(GDateTime) date = g_date_time_new_from_unix_local(sn->date_sec); g_autoptr(GDateTime) date = g_date_time_new_from_unix_local(sn->date_sec);
g_autofree char *date_buf = g_date_time_format(date, "%Y-%m-%d %H:%M:%S"); g_autofree char *date_buf = g_date_time_format(date, "%Y-%m-%d %H:%M:%S");
secs = sn->vm_clock_nsec / 1000000000; secs = sn->vm_clock_nsec / 1000000000;
snprintf(clock_buf, sizeof(clock_buf), snprintf(clock_buf, sizeof(clock_buf),
"%02d:%02d:%02d.%03d", "%04d:%02d:%02d.%03d",
(int)(secs / 3600), (int)(secs / 3600),
(int)((secs / 60) % 60), (int)((secs / 60) % 60),
(int)(secs % 60), (int)(secs % 60),
@ -759,8 +759,10 @@ void bdrv_snapshot_dump(QEMUSnapshotInfo *sn)
if (sn->icount != -1ULL) { if (sn->icount != -1ULL) {
snprintf(icount_buf, sizeof(icount_buf), snprintf(icount_buf, sizeof(icount_buf),
"%"PRId64, sn->icount); "%"PRId64, sn->icount);
} else {
snprintf(icount_buf, sizeof(icount_buf), "--");
} }
qemu_printf("%-9s %-16s %8s%20s%13s%11s", qemu_printf("%-7s %-16s %8s %19s %15s %10s",
sn->id_str, sn->name, sn->id_str, sn->name,
sizing, sizing,
date_buf, date_buf,

View File

@ -37,8 +37,8 @@ Offset Length File
0x7ffe0000 0x20000 TEST_DIR/t.IMGFMT.itmd 0x7ffe0000 0x20000 TEST_DIR/t.IMGFMT.itmd
0x83400000 0x200 TEST_DIR/t.IMGFMT.itmd 0x83400000 0x200 TEST_DIR/t.IMGFMT.itmd
Snapshot list: Snapshot list:
ID TAG ID TAG
1 snap 1 snap
=== Test pass snapshot.1 === === Test pass snapshot.1 ===
@ -78,8 +78,8 @@ Offset Length File
0x7fff0000 0x10000 TEST_DIR/t.IMGFMT 0x7fff0000 0x10000 TEST_DIR/t.IMGFMT
0x83400000 0x200 TEST_DIR/t.IMGFMT 0x83400000 0x200 TEST_DIR/t.IMGFMT
Snapshot list: Snapshot list:
ID TAG ID TAG
1 snap 1 snap
=== Test pass snapshot.2 === === Test pass snapshot.2 ===
@ -119,8 +119,8 @@ Offset Length File
0x7fff0000 0x10000 TEST_DIR/t.IMGFMT 0x7fff0000 0x10000 TEST_DIR/t.IMGFMT
0x83400000 0x200 TEST_DIR/t.IMGFMT 0x83400000 0x200 TEST_DIR/t.IMGFMT
Snapshot list: Snapshot list:
ID TAG ID TAG
1 snap 1 snap
=== Test pass snapshot.3 === === Test pass snapshot.3 ===
@ -157,8 +157,8 @@ Offset Length File
0x7fff0000 0x10000 TEST_DIR/t.IMGFMT 0x7fff0000 0x10000 TEST_DIR/t.IMGFMT
0x83400000 0x200 TEST_DIR/t.IMGFMT 0x83400000 0x200 TEST_DIR/t.IMGFMT
Snapshot list: Snapshot list:
ID TAG ID TAG
1 snap 1 snap
=== Test pass bitmap.0 === === Test pass bitmap.0 ===

View File

@ -393,7 +393,7 @@ _check_test_img -r all
echo echo
echo "$((sn_count - 1)) snapshots should remain:" echo "$((sn_count - 1)) snapshots should remain:"
echo " qemu-img info reports $(_img_info | grep -c '^ \{32\}') snapshots" echo " qemu-img info reports $(_img_info | grep -c '^ \{30\}') snapshots"
echo " Image header reports $(peek_file_be "$TEST_IMG" 60 4) snapshots" echo " Image header reports $(peek_file_be "$TEST_IMG" 60 4) snapshots"
echo echo
@ -520,7 +520,7 @@ _check_test_img -r all
echo echo
echo '65536 snapshots should remain:' echo '65536 snapshots should remain:'
echo " qemu-img info reports $(_img_info | grep -c '^ \{32\}') snapshots" echo " qemu-img info reports $(_img_info | grep -c '^ \{30\}') snapshots"
echo " Image header reports $(peek_file_be "$TEST_IMG" 60 4) snapshots" echo " Image header reports $(peek_file_be "$TEST_IMG" 60 4) snapshots"
# success, all done # success, all done

View File

@ -33,8 +33,8 @@ QEMU X.Y.Z monitor - type 'help' for more information
(qemu) savevm snap0 (qemu) savevm snap0
(qemu) info snapshots (qemu) info snapshots
List of snapshots present on all disks: List of snapshots present on all disks:
ID TAG VM SIZE DATE VM CLOCK ICOUNT ID TAG VM_SIZE DATE VM_CLOCK ICOUNT
-- snap0 SIZE yyyy-mm-dd hh:mm:ss 00:00:00.000 -- snap0 SIZE yyyy-mm-dd hh:mm:ss 0000:00:00.000 --
(qemu) loadvm snap0 (qemu) loadvm snap0
(qemu) quit (qemu) quit
@ -44,8 +44,8 @@ QEMU X.Y.Z monitor - type 'help' for more information
(qemu) savevm snap0 (qemu) savevm snap0
(qemu) info snapshots (qemu) info snapshots
List of snapshots present on all disks: List of snapshots present on all disks:
ID TAG VM SIZE DATE VM CLOCK ICOUNT ID TAG VM_SIZE DATE VM_CLOCK ICOUNT
-- snap0 SIZE yyyy-mm-dd hh:mm:ss 00:00:00.000 -- snap0 SIZE yyyy-mm-dd hh:mm:ss 0000:00:00.000 --
(qemu) loadvm snap0 (qemu) loadvm snap0
(qemu) quit (qemu) quit
@ -69,8 +69,8 @@ QEMU X.Y.Z monitor - type 'help' for more information
(qemu) savevm snap0 (qemu) savevm snap0
(qemu) info snapshots (qemu) info snapshots
List of snapshots present on all disks: List of snapshots present on all disks:
ID TAG VM SIZE DATE VM CLOCK ICOUNT ID TAG VM_SIZE DATE VM_CLOCK ICOUNT
-- snap0 SIZE yyyy-mm-dd hh:mm:ss 00:00:00.000 -- snap0 SIZE yyyy-mm-dd hh:mm:ss 0000:00:00.000 --
(qemu) loadvm snap0 (qemu) loadvm snap0
(qemu) quit (qemu) quit
@ -94,8 +94,8 @@ QEMU X.Y.Z monitor - type 'help' for more information
(qemu) savevm snap0 (qemu) savevm snap0
(qemu) info snapshots (qemu) info snapshots
List of snapshots present on all disks: List of snapshots present on all disks:
ID TAG VM SIZE DATE VM CLOCK ICOUNT ID TAG VM_SIZE DATE VM_CLOCK ICOUNT
-- snap0 SIZE yyyy-mm-dd hh:mm:ss 00:00:00.000 -- snap0 SIZE yyyy-mm-dd hh:mm:ss 0000:00:00.000 --
(qemu) loadvm snap0 (qemu) loadvm snap0
(qemu) quit (qemu) quit
@ -105,8 +105,8 @@ QEMU X.Y.Z monitor - type 'help' for more information
(qemu) savevm snap0 (qemu) savevm snap0
(qemu) info snapshots (qemu) info snapshots
List of snapshots present on all disks: List of snapshots present on all disks:
ID TAG VM SIZE DATE VM CLOCK ICOUNT ID TAG VM_SIZE DATE VM_CLOCK ICOUNT
-- snap0 SIZE yyyy-mm-dd hh:mm:ss 00:00:00.000 -- snap0 SIZE yyyy-mm-dd hh:mm:ss 0000:00:00.000 --
(qemu) loadvm snap0 (qemu) loadvm snap0
(qemu) quit (qemu) quit
@ -119,8 +119,8 @@ QEMU X.Y.Z monitor - type 'help' for more information
(qemu) savevm snap0 (qemu) savevm snap0
(qemu) info snapshots (qemu) info snapshots
List of snapshots present on all disks: List of snapshots present on all disks:
ID TAG VM SIZE DATE VM CLOCK ICOUNT ID TAG VM_SIZE DATE VM_CLOCK ICOUNT
-- snap0 SIZE yyyy-mm-dd hh:mm:ss 00:00:00.000 -- snap0 SIZE yyyy-mm-dd hh:mm:ss 0000:00:00.000 --
(qemu) loadvm snap0 (qemu) loadvm snap0
(qemu) quit (qemu) quit
@ -134,8 +134,8 @@ QEMU X.Y.Z monitor - type 'help' for more information
(qemu) savevm snap0 (qemu) savevm snap0
(qemu) info snapshots (qemu) info snapshots
List of snapshots present on all disks: List of snapshots present on all disks:
ID TAG VM SIZE DATE VM CLOCK ICOUNT ID TAG VM_SIZE DATE VM_CLOCK ICOUNT
-- snap0 SIZE yyyy-mm-dd hh:mm:ss 00:00:00.000 -- snap0 SIZE yyyy-mm-dd hh:mm:ss 0000:00:00.000 --
(qemu) loadvm snap0 (qemu) loadvm snap0
(qemu) quit (qemu) quit
@ -145,15 +145,15 @@ QEMU X.Y.Z monitor - type 'help' for more information
(qemu) savevm snap0 (qemu) savevm snap0
(qemu) info snapshots (qemu) info snapshots
List of snapshots present on all disks: List of snapshots present on all disks:
ID TAG VM SIZE DATE VM CLOCK ICOUNT ID TAG VM_SIZE DATE VM_CLOCK ICOUNT
-- snap0 SIZE yyyy-mm-dd hh:mm:ss 00:00:00.000 -- snap0 SIZE yyyy-mm-dd hh:mm:ss 0000:00:00.000 --
(qemu) loadvm snap0 (qemu) loadvm snap0
(qemu) quit (qemu) quit
Internal snapshots on overlay: Internal snapshots on overlay:
Snapshot list: Snapshot list:
ID TAG VM SIZE DATE VM CLOCK ICOUNT ID TAG VM_SIZE DATE VM_CLOCK ICOUNT
1 snap0 SIZE yyyy-mm-dd hh:mm:ss 00:00:00.000 1 snap0 SIZE yyyy-mm-dd hh:mm:ss 0000:00:00.000 --
Internal snapshots on backing file: Internal snapshots on backing file:
=== -blockdev with NBD server on the backing file === === -blockdev with NBD server on the backing file ===
@ -166,17 +166,17 @@ QEMU X.Y.Z monitor - type 'help' for more information
(qemu) savevm snap0 (qemu) savevm snap0
(qemu) info snapshots (qemu) info snapshots
List of snapshots present on all disks: List of snapshots present on all disks:
ID TAG VM SIZE DATE VM CLOCK ICOUNT ID TAG VM_SIZE DATE VM_CLOCK ICOUNT
-- snap0 SIZE yyyy-mm-dd hh:mm:ss 00:00:00.000 -- snap0 SIZE yyyy-mm-dd hh:mm:ss 0000:00:00.000 --
(qemu) loadvm snap0 (qemu) loadvm snap0
(qemu) quit (qemu) quit
Internal snapshots on overlay: Internal snapshots on overlay:
Snapshot list: Snapshot list:
ID TAG VM SIZE DATE VM CLOCK ICOUNT ID TAG VM_SIZE DATE VM_CLOCK ICOUNT
1 snap0 SIZE yyyy-mm-dd hh:mm:ss 00:00:00.000 1 snap0 SIZE yyyy-mm-dd hh:mm:ss 0000:00:00.000 --
Internal snapshots on backing file: Internal snapshots on backing file:
Snapshot list: Snapshot list:
ID TAG VM SIZE DATE VM CLOCK ICOUNT ID TAG VM_SIZE DATE VM_CLOCK ICOUNT
1 snap0 SIZE yyyy-mm-dd hh:mm:ss 00:00:00.000 1 snap0 SIZE yyyy-mm-dd hh:mm:ss 0000:00:00.000 --
*** done *** done

View File

@ -69,7 +69,8 @@ $QEMU_IMG snapshot -l "$TEST_IMG" | tail -n 1 | tr -s ' ' \
-e 's/\./(VM state size unit)/' \ -e 's/\./(VM state size unit)/' \
-e 's/\./(snapshot date)/' \ -e 's/\./(snapshot date)/' \
-e 's/\./(snapshot time)/' \ -e 's/\./(snapshot time)/' \
-e 's/\./(VM clock)/' -e 's/\./(VM clock)/' \
-e 's/\./(icount)/'
# success, all done # success, all done
echo "*** done" echo "*** done"

View File

@ -4,5 +4,5 @@ QEMU X.Y.Z monitor - type 'help' for more information
(qemu) savevm abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz (qemu) savevm abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz
(qemu) quit (qemu) quit
Output structure: Output structure:
(snapshot ID) (snapshot name) (VM state size value) (VM state size unit) (snapshot date) (snapshot time) (VM clock) (snapshot ID) (snapshot name) (VM state size value) (VM state size unit) (snapshot date) (snapshot time) (VM clock) (icount)
*** done *** done

View File

@ -14,8 +14,8 @@ wrote 524288/524288 bytes at offset 0
(qemu) quit (qemu) quit
Snapshot list: Snapshot list:
ID TAG VM SIZE DATE VM CLOCK ICOUNT ID TAG VM_SIZE DATE VM_CLOCK ICOUNT
1 snap0 SIZE yyyy-mm-dd hh:mm:ss 00:00:00.000 1 snap0 SIZE yyyy-mm-dd hh:mm:ss 0000:00:00.000 --
No errors were found on the image. No errors were found on the image.
=== Verify that loading the snapshot reverts to the old content === === Verify that loading the snapshot reverts to the old content ===
@ -47,9 +47,9 @@ read 64512/64512 bytes at offset 66560
(qemu) quit (qemu) quit
Snapshot list: Snapshot list:
ID TAG VM SIZE DATE VM CLOCK ICOUNT ID TAG VM_SIZE DATE VM_CLOCK ICOUNT
1 snap0 SIZE yyyy-mm-dd hh:mm:ss 00:00:00.000 1 snap0 SIZE yyyy-mm-dd hh:mm:ss 0000:00:00.000 --
2 snap1 SIZE yyyy-mm-dd hh:mm:ss 00:00:00.000 2 snap1 SIZE yyyy-mm-dd hh:mm:ss 0000:00:00.000 --
No errors were found on the image. No errors were found on the image.
=== qemu-img snapshot can revert to snapshots === === qemu-img snapshot can revert to snapshots ===
@ -79,8 +79,8 @@ read 64512/64512 bytes at offset 66560
(qemu) quit (qemu) quit
Snapshot list: Snapshot list:
ID TAG VM SIZE DATE VM CLOCK ICOUNT ID TAG VM_SIZE DATE VM_CLOCK ICOUNT
1 snap0 SIZE yyyy-mm-dd hh:mm:ss 00:00:00.000 1 snap0 SIZE yyyy-mm-dd hh:mm:ss 0000:00:00.000 --
No errors were found on the image. No errors were found on the image.
=== Error cases === === Error cases ===