Yaniv Bronhaim has uploaded a new change for review. Change subject: Returning namedtuple from util.pidStat for simpler usage ......................................................................
Returning namedtuple from util.pidStat for simpler usage Change-Id: I7cbac1c9175afbdecf42d40290026d518098e193 Signed-off-by: Yaniv Bronhaim <[email protected]> --- M lib/vdsm/utils.py M tests/miscTests.py M tests/utilsTests.py M vdsm/storage/blockSD.py M vdsm/storage/misc.py 5 files changed, 19 insertions(+), 7 deletions(-) git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/24/15024/1 diff --git a/lib/vdsm/utils.py b/lib/vdsm/utils.py index 8b2dd4f..30a0a9f 100644 --- a/lib/vdsm/utils.py +++ b/lib/vdsm/utils.py @@ -26,6 +26,7 @@ Contains a reverse dictionary pointing from error string to its error code. """ +from collections import namedtuple from SimpleXMLRPCServer import SimpleXMLRPCServer from StringIO import StringIO from weakref import proxy @@ -168,6 +169,14 @@ def pidStat(pid): res = [] + stat = namedtuple('stat', 'pid comm state ppid pgrp session \ + tty_nr tpgid flags minflt cminflt majflt cmajflt \ + utime stime cutime cstime priority nice num_threads \ + itrealvalue starttime vsize rss rsslim \ + startcode endcode startstack kstkesp \ + kstkeip signal blocked sigignore sigcatch \ + wchan nswap cnswap exit_signal processor rt_priority \ + policy delayacct_blkio_ticks guest_time cguest_time') with open("/proc/%d/stat" % pid, "r") as f: statline = f.readline() procNameStart = statline.find("(") @@ -177,7 +186,10 @@ args = statline[procNameEnd + 2:].split() res.append(args[0]) res.extend([int(item) for item in args[1:]]) - return tuple(res) + # Only 44 feilds are documented in man page while /proc/pid/stat has 52 + # The rest of the fields contain the process memory layout and + # exit_code, which are not relevant for our use. + return stat._make(res[:44]) def convertToStr(val): diff --git a/tests/miscTests.py b/tests/miscTests.py index 96549c8..f39aac8 100644 --- a/tests/miscTests.py +++ b/tests/miscTests.py @@ -1028,7 +1028,7 @@ proc = misc.execCmd(cmd, sudo=False, nice=10, sync=False) def test(): - nice = utils.pidStat(proc.pid)[18] + nice = utils.pidStat(proc.pid).nice self.assertEquals(nice, 10) utils.retry(AssertionError, test, tries=10, sleep=0.1) diff --git a/tests/utilsTests.py b/tests/utilsTests.py index 758bc8a..a6a222d 100644 --- a/tests/utilsTests.py +++ b/tests/utilsTests.py @@ -53,9 +53,9 @@ args = ["sleep", "3"] sproc = misc.execCmd(args, sync=False, sudo=False) stats = utils.pidStat(sproc.pid) - pid = int(stats[0]) + pid = int(stats.pid) # procName comes in the format of (procname) - name = stats[1] + name = stats.comm self.assertEquals(pid, sproc.pid) self.assertEquals(name, args[0]) sproc.kill() diff --git a/vdsm/storage/blockSD.py b/vdsm/storage/blockSD.py index e8ce11c..2a831cb 100644 --- a/vdsm/storage/blockSD.py +++ b/vdsm/storage/blockSD.py @@ -1119,7 +1119,7 @@ for umountPid in umountPids: try: - state = utils.pidStat(umountPid)[2] + state = utils.pidStat(umountPid).state mountPoint = misc.getCmdArgs(umountPid)[-1] except: # Process probably exited diff --git a/vdsm/storage/misc.py b/vdsm/storage/misc.py index 37dba7c..a550c44 100644 --- a/vdsm/storage/misc.py +++ b/vdsm/storage/misc.py @@ -801,7 +801,7 @@ continue try: - procName = utils.pidStat(pid)[1] + procName = utils.pidStat(pid).comm if procName == name: res.append(pid) except (OSError, IOError): @@ -820,7 +820,7 @@ # Retrying seems to solve it. while len(res) == 0: # cmdline is empty for zombie processes - if utils.pidStat(pid)[2] in ("Z", "z"): + if utils.pidStat(pid).state in ("Z", "z"): return tuple() res = _parseCmdLine(pid) -- To view, visit http://gerrit.ovirt.org/15024 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I7cbac1c9175afbdecf42d40290026d518098e193 Gerrit-PatchSet: 1 Gerrit-Project: vdsm Gerrit-Branch: master Gerrit-Owner: Yaniv Bronhaim <[email protected]> _______________________________________________ vdsm-patches mailing list [email protected] https://lists.fedorahosted.org/mailman/listinfo/vdsm-patches
