swift/test
Samuel Merritt dc8da5bb19 Use "poll" or "selects" Eventlet hub for all Swift daemons.
Previously, Swift's WSGI servers, the object replicator, and the
object reconstructor were setting Eventlet's hub to either "poll" or
"selects", depending on availability. Other daemons were letting
Eventlet use its default hub, which is "epoll".

In any daemons that fork, we really don't want to use epoll. Epoll
instances end up shared between the parent and all children, and you
get some awful messes when file descriptors are shared.

Here's an example where two processes are trying to wait on the same
file descriptor using the same epoll instance, and everything goes
wrong:

[proc A] epoll_ctl(6, EPOLL_CTL_ADD, 3, ...) = 0

[proc B] epoll_ctl(6, EPOLL_CTL_ADD, 3, ...) = -1 EEXIST (File exists)
[proc B] epoll_wait(6, ...) = 1
[proc B] epoll_ctl(6, EPOLL_CTL_DEL, 3, ...) = 0

[proc A] epoll_wait(6, ...)

This primarily affects the container updater and object updater since
they fork. I've decided to change the hub for all Swift daemons so
that we don't add multiprocessing support to some other daemon someday
and suffer through this same bug again.

This problem was made more apparent by commit 6d16079, which made our
logging mutex use file descriptors. However, it could have struck on
any shared file descriptor on which a read or write returned EAGAIN.

Change-Id: Ic2c1178ac918c88b0b901e581eb4fab3b2666cfe
Closes-Bug: 1722951
2017-10-12 10:45:12 -07:00
..
functional Merge "Fix functest for IPv6 endpoints" 2017-09-30 09:14:11 +00:00
probe Remove all post_as_copy related code and configes 2017-09-16 05:50:41 +00:00
unit Use "poll" or "selects" Eventlet hub for all Swift daemons. 2017-10-12 10:45:12 -07:00
__init__.py Open-code eventlet.listen() 2017-05-11 01:39:14 -06:00
sample.conf [Trivial]Fix some type errors in ../sample.conf 2017-02-12 01:30:34 -08:00