]> git.proxmox.com Git - mirror_zfs.git/commitdiff
Make zstreamdump -v more greppable
authorTom Caputi <tcaputi@datto.com>
Wed, 13 Mar 2019 18:19:23 +0000 (14:19 -0400)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Wed, 13 Mar 2019 18:19:23 +0000 (11:19 -0700)
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 <behlendorf1@llnl.gov>
Reviewed-by: Matt Ahrens <mahrens@delphix.com>
Reviewed by: Allan Jude <allanjude@freebsd.org>
Signed-off-by: Tom Caputi <tcaputi@datto.com>
Closes #8493

cmd/zstreamdump/zstreamdump.c
tests/zfs-tests/tests/functional/rsend/rsend.kshlib
tests/zfs-tests/tests/functional/rsend/send-c_zstreamdump.ksh

index a29964cddd9e445f00565a929b155670561fd8c3..ed88729b5182616d229e3d6ea5b8f9abd225a893 100644 (file)
@@ -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,
index 72d2eb93d442a1c104b336d49dae52b6f4cf55e0..e8bee12e9af569109822d050d1ba2f72cc079838 100644 (file)
@@ -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 <object num>"
-# FREEOBJECTS records become "FREEOBJECTS <startobj> <numobjs>"
-# FREE records become "<record type> <start> <length>"
-# WRITE records become:
-# "<record type> <compression type> <start> <logical size> <compressed size>
-#  <data size>"
-#
-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
index 158223ccf9433e591ee9d50df31bc50b202ed450..52abfe7edc33ef828bc29e42b551db8edbfa371e 100755 (executable)
@@ -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 \