]> granicus.if.org Git - zfs/commitdiff
Handle broken pipes in arc_summary
authorGiuseppe Di Natale <dinatale2@users.noreply.github.com>
Tue, 19 Dec 2017 21:19:24 +0000 (13:19 -0800)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Tue, 19 Dec 2017 21:19:24 +0000 (13:19 -0800)
Using a command similar to 'arc_summary.py | head' causes
a broken pipe exception. Gracefully exit in the case of a
broken pipe in arc_summary.py.

Reviewed-by: Richard Elling <Richard.Elling@RichardElling.com>
Reviewed-by: loli10K <ezomori.nozomu@gmail.com>
Signed-off-by: Giuseppe Di Natale <dinatale2@llnl.gov>
Closes #6965
Closes #6969

cmd/arc_summary/arc_summary.py
tests/zfs-tests/tests/functional/cli_user/misc/arc_summary_001_pos.ksh

index 2472f87eadf3ae0aa7a1b022ac6a124ffffd9a3b..f6dbb9bfbc1d5836e5fa4dfa9c6cd25b15173006 100755 (executable)
@@ -47,6 +47,7 @@ import getopt
 import os
 import sys
 import time
+import errno
 
 from subprocess import Popen, PIPE
 from decimal import Decimal as D
@@ -55,6 +56,18 @@ show_tunable_descriptions = False
 alternate_tunable_layout = False
 
 
+def handle_Exception(ex_cls, ex, tb):
+    if ex is IOError:
+        if ex.errno == errno.EPIPE:
+            sys.exit()
+
+    if ex is KeyboardInterrupt:
+        sys.exit()
+
+
+sys.excepthook = handle_Exception
+
+
 def get_Kstat():
     """Collect information on the ZFS subsystem from the /proc virtual
     file system. The name "kstat" is a holdover from the Solaris utility
index 67c11c8ab673f1e961ca92226af1c70cbc1dbf94..6653b9c1ad35b7565c141ddba1c596a8fe7f545d 100755 (executable)
@@ -37,4 +37,7 @@ while [[ $i -lt ${#args[*]} ]]; do
         ((i = i + 1))
 done
 
+log_must eval "arc_summary.py | head > /dev/null"
+log_must eval "arc_summary.py | head -1 > /dev/null"
+
 log_pass "arc_summary.py generates output and doesn't return an error code"