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 os
import sys import sys
import time import time
import errno
from subprocess import Popen, PIPE from subprocess import Popen, PIPE
from decimal import Decimal as D from decimal import Decimal as D
@ -55,6 +56,18 @@ show_tunable_descriptions = False
alternate_tunable_layout = 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(): def get_Kstat():
"""Collect information on the ZFS subsystem from the /proc virtual """Collect information on the ZFS subsystem from the /proc virtual
file system. The name "kstat" is a holdover from the Solaris utility 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)) ((i = i + 1))
done 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" log_pass "arc_summary.py generates output and doesn't return an error code"