Skip to content

Commit

Permalink
Merge pull request #52 from zopefoundation/rehabilitate-mtacceptor
Browse files Browse the repository at this point in the history
Rehabilitate mtacceptor
  • Loading branch information
jimfulton committed Jul 19, 2016
2 parents a9330b7 + b971495 commit d825f15
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 16 deletions.
6 changes: 6 additions & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,12 @@ matrix:
python: 3.4
- os: linux
python: 3.5
- os: linux
python: 3.4
env: ZEO_MTACCEPTOR=1
- os: linux
python: 3.5
env: ZEO_MTACCEPTOR=1
install:
- pip install -U setuptools
- python bootstrap.py
Expand Down
6 changes: 5 additions & 1 deletion src/ZEO/StorageServer.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,10 @@
from ZODB.serialize import referencesf
from ZODB.utils import oid_repr, p64, u64, z64, Lock, RLock

from .asyncio.server import Acceptor
if os.environ.get("ZEO_MTACCEPTOR"): # mainly for tests
from .asyncio.mtacceptor import Acceptor
else:
from .asyncio.server import Acceptor

logger = logging.getLogger('ZEO.StorageServer')

Expand Down Expand Up @@ -655,6 +658,7 @@ def __init__(self, addr, storages,
transaction_timeout=None,
ssl=None,
client_conflict_resolution=False,
Acceptor=Acceptor,
):
"""StorageServer constructor.
Expand Down
35 changes: 20 additions & 15 deletions src/ZEO/asyncio/mtacceptor.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@
import asyncore
import socket
import threading
import time

from .server import ServerProtocol

Expand Down Expand Up @@ -130,7 +131,7 @@ def _open_socket(self):
break

if isinstance(addr, tuple) and addr[1] == 0:
self.addr = addr = self.socket.getsockname()
self.addr = addr = self.socket.getsockname()[:2]

logger.info("listening on %s", str(addr))
self.listen(5)
Expand Down Expand Up @@ -177,20 +178,24 @@ def run():
if self.ssl_context is None:
cr = loop.create_connection((lambda : protocol), sock=sock)
else:
#######################################################
# XXX See http://bugs.python.org/issue27392 :(
_make_ssl_transport = loop._make_ssl_transport
def make_ssl_transport(*a, **kw):
kw['server_side'] = True
return _make_ssl_transport(*a, **kw)
loop._make_ssl_transport = make_ssl_transport
#
#######################################################
cr = loop.create_connection(
(lambda : protocol), sock=sock,
ssl=self.ssl_context,
server_hostname='fu' # http://bugs.python.org/issue27391
)
if hasattr(loop, 'connect_accepted_socket'):
loop.connect_accepted_socket(
(lambda : protocol), sock, ssl=self.ssl_context)
else:
#######################################################
# XXX See http://bugs.python.org/issue27392 :(
_make_ssl_transport = loop._make_ssl_transport
def make_ssl_transport(*a, **kw):
kw['server_side'] = True
return _make_ssl_transport(*a, **kw)
loop._make_ssl_transport = make_ssl_transport
#
#######################################################
cr = loop.create_connection(
(lambda : protocol), sock=sock,
ssl=self.ssl_context,
server_hostname=''
)

asyncio.async(cr, loop=loop)
loop.run_forever()
Expand Down

0 comments on commit d825f15

Please sign in to comment.