Change in vdsm[master]: supervdsm: don't let _runAs return early due to EINTR
nsoffer at redhat.com
nsoffer at redhat.com
Fri Sep 4 23:37:08 UTC 2015
Nir Soffer has posted comments on this change.
Change subject: supervdsm: don't let _runAs return early due to EINTR
......................................................................
Patch Set 1:
(5 comments)
https://gerrit.ovirt.org/#/c/45752/1//COMMIT_MSG
Commit Message:
Line 13: ending child command execution ending in unintentional failure.
Line 14:
Line 15: This is particularly prevalant when subsequent _runAs executions are
Line 16: performed. Termination of the first will result in a SIGCHLD which
Line 17: interrupts polling for the second, as exposed by commit 777c36d6.
So this is a regression triggered by the new check in 777c36d6?
Line 18:
Line 19: Because poll will return early without an exception if the low-level
Line 20: call is interrupted, NoIntrCall() cannot be used and thus a new helper
Line 21: function is provided that retries based on the time elapsed since the
Line 23:
Line 24: PEP-475 will handle this in Python 3.5, but in the meantime this
Line 25: workaround is needed.
Line 26:
Line 27: Change-Id: I25af73a8fe67e7bc434f60a7d8492e33dc3b2ffa
We want to backport this to 3.6 - right?
Add
Backport-To: 3.6
Line 28: Bug-Url: https://bugzilla.redhat.com/1259310
https://gerrit.ovirt.org/#/c/45752/1/lib/vdsm/utils.py
File lib/vdsm/utils.py:
Line 353: This is a workaround until we get the PEP-475 fix for EINTR. It
Line 354: ensures that a multiprocessing.connection.poll() will not return
Line 355: before the timeout due to an interruption.
Line 356: """
Line 357: end = monotonic_time() + timeout
Lets call it deadline for consistently with other code using this pattern.
Line 358: remaining = timeout
Line 359:
Line 360: while not mpConnection.poll(remaining):
Line 361: remaining = end - monotonic_time()
Line 359:
Line 360: while not mpConnection.poll(remaining):
Line 361: remaining = end - monotonic_time()
Line 362: if remaining > 0:
Line 363: continue
Why not:
if remaning <= 0:
return False
Line 364: return False
Line 365:
Line 366: return True
Line 367:
https://gerrit.ovirt.org/#/c/45752/1/vdsm/supervdsmServer
File vdsm/supervdsmServer:
Line 244: proc.start()
Line 245:
Line 246: needReaping = True
Line 247: try:
Line 248: if not utils.NoIntrMPConnPoll(pipe, RUN_AS_TIMEOUT):
This name is little ugly and it is also not really generic helper for utils, but a shim for multiprocessing.
If we don't use this in any other module, I would keep the helper in this module, and call it something like wait_on_pipe(pipe, timeout).
Line 249: try:
Line 250:
Line 251: os.kill(proc.pid, signal.SIGKILL)
Line 252: except OSError as e:
--
To view, visit https://gerrit.ovirt.org/45752
To unsubscribe, visit https://gerrit.ovirt.org/settings
Gerrit-MessageType: comment
Gerrit-Change-Id: I25af73a8fe67e7bc434f60a7d8492e33dc3b2ffa
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Greg Padgett <gpadgett at redhat.com>
Gerrit-Reviewer: Adam Litke <alitke at redhat.com>
Gerrit-Reviewer: Greg Padgett <gpadgett at redhat.com>
Gerrit-Reviewer: Jenkins CI
Gerrit-Reviewer: Nir Soffer <nsoffer at redhat.com>
Gerrit-Reviewer: automation at ovirt.org
Gerrit-HasComments: Yes
More information about the vdsm-patches
mailing list