From 5cc9ba5cf070f726fcc9dda311372d5dd6aef1da Mon Sep 17 00:00:00 2001 From: Tom Caputi Date: Wed, 13 Mar 2019 14:19:23 -0400 Subject: [PATCH] Make zstreamdump -v more greppable Currently, the verbose output of zstreamdump includes new line characters within some individual records. Presumably, this was originally done to keep the output from getting too wide to fit on a terminal. However, since new flags and struct members have been added, these rules have not been maintained consistently. In addition, these newlines can make it hard to grep the output in some scenarios. This patch simply removes these newlines, making the output easier to grep and removing the inconsistency. Reviewed-by: Brian Behlendorf Reviewed-by: Matt Ahrens Reviewed by: Allan Jude Signed-off-by: Tom Caputi Closes #8493 --- cmd/zstreamdump/zstreamdump.c | 16 +++++++------- .../tests/functional/rsend/rsend.kshlib | 21 ------------------- .../functional/rsend/send-c_zstreamdump.ksh | 6 +++--- 3 files changed, 11 insertions(+), 32 deletions(-) diff --git a/cmd/zstreamdump/zstreamdump.c b/cmd/zstreamdump/zstreamdump.c index a29964cddd..ed88729b51 100644 --- a/cmd/zstreamdump/zstreamdump.c +++ b/cmd/zstreamdump/zstreamdump.c @@ -523,8 +523,8 @@ main(int argc, char *argv[]) ZIO_DATA_MAC_LEN); (void) printf("WRITE object = %llu type = %u " - "checksum type = %u compression type = %u\n" - " flags = %u offset = %llu " + "checksum type = %u compression type = %u " + "flags = %u offset = %llu " "logical_size = %llu " "compressed_size = %llu " "payload_size = %llu props = %llx " @@ -578,10 +578,10 @@ main(int argc, char *argv[]) } if (verbose) { (void) printf("WRITE_BYREF object = %llu " - "checksum type = %u props = %llx\n" - " offset = %llu length = %llu\n" - "toguid = %llx refguid = %llx\n" - " refobject = %llu refoffset = %llu\n", + "checksum type = %u props = %llx " + "offset = %llu length = %llu " + "toguid = %llx refguid = %llx " + "refobject = %llu refoffset = %llu\n", (u_longlong_t)drrwbr->drr_object, drrwbr->drr_checksumtype, (u_longlong_t)drrwbr->drr_key.ddk_prop, @@ -665,8 +665,8 @@ main(int argc, char *argv[]) } if (verbose) { (void) printf("WRITE_EMBEDDED object = %llu " - "offset = %llu length = %llu\n" - " toguid = %llx comp = %u etype = %u " + "offset = %llu length = %llu " + "toguid = %llx comp = %u etype = %u " "lsize = %u psize = %u\n", (u_longlong_t)drrwe->drr_object, (u_longlong_t)drrwe->drr_offset, diff --git a/tests/zfs-tests/tests/functional/rsend/rsend.kshlib b/tests/zfs-tests/tests/functional/rsend/rsend.kshlib index 72d2eb93d4..e8bee12e9a 100644 --- a/tests/zfs-tests/tests/functional/rsend/rsend.kshlib +++ b/tests/zfs-tests/tests/functional/rsend/rsend.kshlib @@ -619,27 +619,6 @@ function stream_has_features return 0 } -# -# Parse zstreamdump -v output. The output varies for each kind of record: -# BEGIN records are simply output as "BEGIN" -# END records are output as "END" -# OBJECT records become "OBJECT " -# FREEOBJECTS records become "FREEOBJECTS " -# FREE records become " " -# WRITE records become: -# " -# " -# -function parse_dump -{ - sed '/^WRITE/{N;s/\n/ /;}' | grep "^[A-Z]" | awk '{ - if ($1 == "BEGIN" || $1 == "END") print $1 - if ($1 == "OBJECT") print $1" "$4 - if ($1 == "FREEOBJECTS") print $1" "$4" "$7 - if ($1 == "FREE") print $1" "$7" "$10 - if ($1 == "WRITE") print $1" "$15" "$21" "$24" "$27" "$30}' -} - # # Given a send stream, verify that the size of the stream matches what's # expected based on the source or target dataset. If the stream is an diff --git a/tests/zfs-tests/tests/functional/rsend/send-c_zstreamdump.ksh b/tests/zfs-tests/tests/functional/rsend/send-c_zstreamdump.ksh index 158223ccf9..52abfe7edc 100755 --- a/tests/zfs-tests/tests/functional/rsend/send-c_zstreamdump.ksh +++ b/tests/zfs-tests/tests/functional/rsend/send-c_zstreamdump.ksh @@ -42,15 +42,15 @@ log_must zfs snapshot $sendfs@full log_must eval "zfs send -c $sendfs@full >$BACKDIR/full" log_must stream_has_features $BACKDIR/full lz4 compressed -cat $BACKDIR/full | zstreamdump -v | parse_dump > $BACKDIR/dump.out +cat $BACKDIR/full | zstreamdump -v > $BACKDIR/dump.out -lsize=$(awk '/^WRITE [^0]/ {lsize += $4} END {printf("%d", lsize)}' \ +lsize=$(awk '/^WRITE [^0]/ {lsize += $24} END {printf("%d", lsize)}' \ $BACKDIR/dump.out) lsize_prop=$(get_prop logicalused $sendfs) within_percent $lsize $lsize_prop 90 || log_fail \ "$lsize and $lsize_prop differed by too much" -csize=$(awk '/^WRITE [^0]/ {csize += $5} END {printf("%d", csize)}' \ +csize=$(awk '/^WRITE [^0]/ {csize += $27} END {printf("%d", csize)}' \ $BACKDIR/dump.out) csize_prop=$(get_prop used $sendfs) within_percent $csize $csize_prop 90 || log_fail \