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:
parent
9a6c57845a
commit
c2aacf2087
|
@ -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
|
||||||
|
|
|
@ -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"
|
||||||
|
|
Loading…
Reference in New Issue