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.

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
This commit is contained in:
Giuseppe Di Natale 2017-12-19 13:19:24 -08:00 committed by Brian Behlendorf
parent c4ba46dead
commit 89a66a0457
2 changed files with 16 additions and 0 deletions

View File

@ -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

View File

@ -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"