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:
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:
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:
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))
(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):
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.