Merge "Check whether poll is available or not and let eventlet chose the best hub when it isn't."
This commit is contained in:
commit
6e9b1a52a5
@ -751,6 +751,31 @@ def get_logger(conf, name=None, log_to_console=False, log_route=None,
|
|||||||
return adapted_logger
|
return adapted_logger
|
||||||
|
|
||||||
|
|
||||||
|
def get_hub():
|
||||||
|
"""
|
||||||
|
Checks whether poll is available and falls back
|
||||||
|
on select if it isn't.
|
||||||
|
|
||||||
|
Note about epoll:
|
||||||
|
|
||||||
|
Review: https://review.openstack.org/#/c/18806/
|
||||||
|
|
||||||
|
There was a problem where once out of every 30 quadrillion
|
||||||
|
connections, a coroutine wouldn't wake up when the client
|
||||||
|
closed its end. Epoll was not reporting the event or it was
|
||||||
|
getting swallowed somewhere. Then when that file descriptor
|
||||||
|
was re-used, eventlet would freak right out because it still
|
||||||
|
thought it was waiting for activity from it in some other coro.
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
import select
|
||||||
|
if hasattr(select, "poll"):
|
||||||
|
return "poll"
|
||||||
|
return "selects"
|
||||||
|
except ImportError:
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
def drop_privileges(user):
|
def drop_privileges(user):
|
||||||
"""
|
"""
|
||||||
Sets the userid/groupid of the current process, get session leader, etc.
|
Sets the userid/groupid of the current process, get session leader, etc.
|
||||||
|
@ -33,7 +33,7 @@ from urllib import unquote
|
|||||||
from swift.common.swob import Request
|
from swift.common.swob import Request
|
||||||
from swift.common.utils import capture_stdio, disable_fallocate, \
|
from swift.common.utils import capture_stdio, disable_fallocate, \
|
||||||
drop_privileges, get_logger, NullLogger, config_true_value, \
|
drop_privileges, get_logger, NullLogger, config_true_value, \
|
||||||
validate_configuration
|
validate_configuration, get_hub
|
||||||
|
|
||||||
|
|
||||||
def monkey_patch_mimetools():
|
def monkey_patch_mimetools():
|
||||||
@ -135,7 +135,8 @@ def run_wsgi(conf_file, app_section, *args, **kwargs):
|
|||||||
wsgi.HttpProtocol.log_message = \
|
wsgi.HttpProtocol.log_message = \
|
||||||
lambda s, f, *a: logger.error('ERROR WSGI: ' + f % a)
|
lambda s, f, *a: logger.error('ERROR WSGI: ' + f % a)
|
||||||
wsgi.WRITE_TIMEOUT = int(conf.get('client_timeout') or 60)
|
wsgi.WRITE_TIMEOUT = int(conf.get('client_timeout') or 60)
|
||||||
eventlet.hubs.use_hub('poll')
|
|
||||||
|
eventlet.hubs.use_hub(get_hub())
|
||||||
eventlet.patcher.monkey_patch(all=False, socket=True)
|
eventlet.patcher.monkey_patch(all=False, socket=True)
|
||||||
eventlet_debug = config_true_value(conf.get('eventlet_debug', 'no'))
|
eventlet_debug = config_true_value(conf.get('eventlet_debug', 'no'))
|
||||||
eventlet.debug.hub_exceptions(eventlet_debug)
|
eventlet.debug.hub_exceptions(eventlet_debug)
|
||||||
|
@ -33,13 +33,13 @@ from eventlet.support.greenlets import GreenletExit
|
|||||||
from swift.common.ring import Ring
|
from swift.common.ring import Ring
|
||||||
from swift.common.utils import whataremyips, unlink_older_than, lock_path, \
|
from swift.common.utils import whataremyips, unlink_older_than, lock_path, \
|
||||||
compute_eta, get_logger, write_pickle, renamer, dump_recon_cache, \
|
compute_eta, get_logger, write_pickle, renamer, dump_recon_cache, \
|
||||||
rsync_ip, mkdirs, config_true_value, list_from_csv
|
rsync_ip, mkdirs, config_true_value, list_from_csv, get_hub
|
||||||
from swift.common.bufferedhttp import http_connect
|
from swift.common.bufferedhttp import http_connect
|
||||||
from swift.common.daemon import Daemon
|
from swift.common.daemon import Daemon
|
||||||
from swift.common.http import HTTP_OK, HTTP_INSUFFICIENT_STORAGE
|
from swift.common.http import HTTP_OK, HTTP_INSUFFICIENT_STORAGE
|
||||||
from swift.common.exceptions import PathNotDir
|
from swift.common.exceptions import PathNotDir
|
||||||
|
|
||||||
hubs.use_hub('poll')
|
hubs.use_hub(get_hub())
|
||||||
|
|
||||||
PICKLE_PROTOCOL = 2
|
PICKLE_PROTOCOL = 2
|
||||||
ONE_WEEK = 604800
|
ONE_WEEK = 604800
|
||||||
|
Loading…
Reference in New Issue
Block a user