[pypy-issue] Issue #1941: PyPy + eventlet + urllib3: ValueError: file descriptor cannot be a negative integer (-1) (pypy/pypy)

Andy Freeland issues-reply at bitbucket.org
Tue Dec 2 22:12:46 CET 2014


New issue 1941: PyPy + eventlet + urllib3: ValueError: file descriptor cannot be a negative integer (-1)
https://bitbucket.org/pypy/pypy/issue/1941/pypy-eventlet-urllib3-valueerror-file

Andy Freeland:

When using urllib3 1.9.1's connection pooling on PyPy 2.4.0 on OS X with eventlet 0.15.2, I get occasional file descriptor errors:

```pytb
Traceback (most recent call last):
  File "app_main.py", line 75, in run_toplevel
  File "demo.py", line 17, in <module>
    pool.request('HEAD', TARGET_PATH)
  File "/Users/rouge8/.virtualenvs/tmp-ee0aa913b15a2c5c/site-packages/urllib3/request.py", line 68, in request
    **urlopen_kw)
  File "/Users/rouge8/.virtualenvs/tmp-ee0aa913b15a2c5c/site-packages/urllib3/request.py", line 81, in request_encode_url
    return self.urlopen(method, url, **urlopen_kw)
  File "/Users/rouge8/.virtualenvs/tmp-ee0aa913b15a2c5c/site-packages/urllib3/connectionpool.py", line 511, in urlopen
    conn = self._get_conn(timeout=pool_timeout)
  File "/Users/rouge8/.virtualenvs/tmp-ee0aa913b15a2c5c/site-packages/urllib3/connectionpool.py", line 222, in _get_conn
    if conn and is_connection_dropped(conn):
  File "/Users/rouge8/.virtualenvs/tmp-ee0aa913b15a2c5c/site-packages/urllib3/util/connection.py", line 39, in is_connection_dropped
    p.register(sock, POLLIN)
ValueError: file descriptor cannot be a negative integer (-1)
``` 

Here's a snippet to reproduce:

```python
import eventlet
eventlet.monkey_patch()

import os
import urllib3

TARGET_HOST = os.environ.get('TARGET_HOST', 'http://localhost:9200')
TARGET_PATH = os.environ.get('TARGET_PATH', '/test')

pool = urllib3.connection_from_url(TARGET_HOST)

for i in range(1000):
    pool.request('HEAD', TARGET_PATH)
```

CPython does not raise any errors even on much larger ranges.




More information about the pypy-issue mailing list