Bug 958868
| Summary: | Downstream added "timeout=None" keyword argument causes regression in eventlet | ||
|---|---|---|---|
| Product: | Red Hat Enterprise Linux 6 | Reporter: | Mark McLoughlin <markmc> |
| Component: | python | Assignee: | Bohuslav "Slavek" Kabrda <bkabrda> |
| Status: | CLOSED ERRATA | QA Contact: | Jan Kepler <jkejda> |
| Severity: | urgent | Docs Contact: | |
| Priority: | urgent | ||
| Version: | 6.4 | CC: | apevec, bgollahe, bkabrda, dmalcolm, jkejda, mnewsome, mstuchli, patrickm, pbrady, rkuska, rvokal, zbitter |
| Target Milestone: | rc | Keywords: | Patch, ZStream |
| Target Release: | 6.5 | ||
| Hardware: | Unspecified | ||
| OS: | Unspecified | ||
| Whiteboard: | |||
| Fixed In Version: | python-2.6.6-37.el6 | Doc Type: | Bug Fix |
| Doc Text: | Story Points: | --- | |
| Clone Of: | Environment: | ||
| Last Closed: | 2013-11-21 09:14:43 UTC | Type: | Bug |
| Regression: | --- | Mount Type: | --- |
| Documentation: | --- | CRM: | |
| Verified Versions: | Category: | --- | |
| oVirt Team: | --- | RHEL 7.3 requirements from Atomic Host: | |
| Cloudforms Team: | --- | Target Upstream Version: | |
| Embargoed: | |||
| Bug Depends On: | |||
| Bug Blocks: | 966991 | ||
(In reply to comment #0) > It seems perfectly doable to me that we could get a workaround patch into > eventlet, but the RHEL python maintainers seem more keen to expedite a fix > for python itself in RHEL We have commit rights to RHEL *** Bug 958867 has been marked as a duplicate of this bug. *** (In reply to comment #2) > *** Bug 958867 has been marked as a duplicate of this bug. *** Note that bug 958867 has a minimal reproducer for this behavior. That said, testing for this bug should include the case of using upstream eventlet. I can confirm that we can fix this issue in RHEL 6. This is a regression on side of RHEL, so it makes perfect sense to fix it there, rather then pushing RHEL-specific patch into upstream eventlet. Fixed in (RHEL 6.5): python-2.6.6-37.el6 https://brewweb.devel.redhat.com/taskinfo?taskID=5731264 http://pkgs.devel.redhat.com/cgit/rpms/python/commit/?h=rhel-6.5&id=085f442dd383f774562a8e21e825365e6b9bd080 It would probably be wise to also remove the subprocess_timeout.patch fix from python-eventlet in RHEL 6.5. That would ensure that any code using a combination of eventlet and timeouts will fail immediately even with RHEL's packaged eventlet. With both patches in, eventlet will just silently ignore the timeout parameter and wait forever if anybody attempts to use it with timeouts. It doesn't seem we have eventlet in rhel 6, isn't it in epel? Anyway, I don't see why we should make this fail. Why would timeout get ignored with both patches in? The Python patch only ignores timeout if it wasn't used by calling function. Sorry, my mistake. s/RHEL/EPEL/ We don't want to create a situation where timeouts appear to work, but do nothing. If a user monkey-patches with EPEL python-eventlet and then requests a wait with timeout, then no error will occur, but the wait will never time out. Users will likely regard this (correctly, IMHO) as a bug. Attempting this should raise an error, because it is not supported - eventlet does not have timeouts. Therefore eventlet should not accept and ignore a non-None timeout parameter. It looks like eventlet upstream are going to go ahead and add a workaround for this bug: https://github.com/eventlet/eventlet/pull/34 Since the problem described in this bug report should be resolved in a recent advisory, it has been closed with a resolution of ERRATA. For information on the advisory, and where to find the updated files, follow the link below. If the solution does not work for you, open a new bug report. http://rhn.redhat.com/errata/RHSA-2013-1582.html |
The summary refers to the OpenStack community's perception of RHEL6 because of the issue described below. 1) We backported a patch to RHEL6 from Python 3 which added an optional 'timeout' argument to subprocess.Popen: http://pkgs.devel.redhat.com/cgit/rpms/python/commit/?h=rhel-6.3&id=fc9a3f0e07 This might sound innocuous but it means the wait() function get called with a timeout argument 2) eventlet overrides this function, but doesn't know about the timeout argument, so it fails 3) eventlet doesn't yet support Python 3, so the only time this issue crops up is if you use eventlet on RHEL6 4) We've fixed eventlet in EPEL6, but the issue still remains if you install eventlet from upstream 5) When OpenStack runs CI tests on RHEL, it does indeed install eventlet from upstream and has to manually patch eventlet with this tiny patch You can see how this issue continually rears its head: https://review.openstack.org/28014 http://lists.openstack.org/pipermail/openstack-dev/2013-May/008459.html https://review.openstack.org/28020 https://review.openstack.org/28021 https://review.openstack.org/28022 https://review.openstack.org/28024 https://review.openstack.org/28025 Since the issue is about upstream's CI which uses eventlet from pypi, rather than installing a python-eventlet package ... one way of resolving this issue is fixing eventlet upstream: https://bitbucket.org/eventlet/eventlet/pull-request/30/add-dummy-timeout-parameter-to/diff It seems perfectly doable to me that we could get a workaround patch into eventlet, but the RHEL python maintainers seem more keen to expedite a fix for python itself in RHEL The RHEL patch would be along the lines of: - sts = self.wait(timeout=self._remaining_time(endtime)) + if 'timeout' in self.wait.func_code.co_varnames: + sts = self.wait(timeout=self._remaining_time(endtime)) + else: + self.wait()