From 3c87f68d93e02a3fa6831289189e556c8248f20d Mon Sep 17 00:00:00 2001 From: Giuseppe Di Natale Date: Fri, 15 Dec 2017 13:26:43 -0800 Subject: [PATCH] Handle broken pipes in arc_summary 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. Signed-off-by: Giuseppe Di Natale --- cmd/arc_summary/arc_summary.py | 13 +++++++++++++ .../cli_user/misc/arc_summary_001_pos.ksh | 3 +++ 2 files changed, 16 insertions(+) diff --git a/cmd/arc_summary/arc_summary.py b/cmd/arc_summary/arc_summary.py index 5da81347cc29..d0867078a7b4 100755 --- a/cmd/arc_summary/arc_summary.py +++ b/cmd/arc_summary/arc_summary.py @@ -47,6 +47,7 @@ import os import sys import time +import errno from subprocess import Popen, PIPE from decimal import Decimal as D @@ -55,6 +56,18 @@ 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 diff --git a/tests/zfs-tests/tests/functional/cli_user/misc/arc_summary_001_pos.ksh b/tests/zfs-tests/tests/functional/cli_user/misc/arc_summary_001_pos.ksh index 67c11c8ab673..6653b9c1ad35 100755 --- a/tests/zfs-tests/tests/functional/cli_user/misc/arc_summary_001_pos.ksh +++ b/tests/zfs-tests/tests/functional/cli_user/misc/arc_summary_001_pos.ksh @@ -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"