mirror of
https://github.com/frappe/gunicorn.git
synced 2026-01-14 11:09:11 +08:00
Merge pull request #823 from benoitc/gaiohttp_unixsock
Support UNIX sockets in gaiohttp worker
This commit is contained in:
commit
4b1cbe6a37
@ -47,7 +47,7 @@ class AiohttpWorker(base.Worker):
|
|||||||
proto, proto.connection_lost, self.connections, False)
|
proto, proto.connection_lost, self.connections, False)
|
||||||
return proto
|
return proto
|
||||||
|
|
||||||
def factory(self, wsgi, host, port):
|
def factory(self, wsgi, addr):
|
||||||
proto = WSGIServerHttpProtocol(
|
proto = WSGIServerHttpProtocol(
|
||||||
wsgi, readpayload=True,
|
wsgi, readpayload=True,
|
||||||
loop=self.loop,
|
loop=self.loop,
|
||||||
@ -58,8 +58,8 @@ class AiohttpWorker(base.Worker):
|
|||||||
access_log_format=self.cfg.access_log_format)
|
access_log_format=self.cfg.access_log_format)
|
||||||
return self.wrap_protocol(proto)
|
return self.wrap_protocol(proto)
|
||||||
|
|
||||||
def get_factory(self, sock, host, port):
|
def get_factory(self, sock, addr):
|
||||||
return functools.partial(self.factory, self.wsgi, host, port)
|
return functools.partial(self.factory, self.wsgi, addr)
|
||||||
|
|
||||||
@asyncio.coroutine
|
@asyncio.coroutine
|
||||||
def close(self):
|
def close(self):
|
||||||
@ -72,7 +72,7 @@ class AiohttpWorker(base.Worker):
|
|||||||
@asyncio.coroutine
|
@asyncio.coroutine
|
||||||
def _run(self):
|
def _run(self):
|
||||||
for sock in self.sockets:
|
for sock in self.sockets:
|
||||||
factory = self.get_factory(sock.sock, *sock.cfg_addr)
|
factory = self.get_factory(sock.sock, sock.cfg_addr)
|
||||||
self.servers.append(
|
self.servers.append(
|
||||||
(yield from self.loop.create_server(factory, sock=sock.sock)))
|
(yield from self.loop.create_server(factory, sock=sock.sock)))
|
||||||
|
|
||||||
|
|||||||
@ -61,7 +61,7 @@ class WorkerTests(unittest.TestCase):
|
|||||||
self.worker.cfg = mock.Mock()
|
self.worker.cfg = mock.Mock()
|
||||||
|
|
||||||
f = self.worker.factory(
|
f = self.worker.factory(
|
||||||
self.worker.wsgi, 'localhost', 8080)
|
self.worker.wsgi, ('localhost', 8080))
|
||||||
self.assertIsInstance(f, WSGIServerHttpProtocol)
|
self.assertIsInstance(f, WSGIServerHttpProtocol)
|
||||||
|
|
||||||
@mock.patch('gunicorn.workers.gaiohttp.asyncio')
|
@mock.patch('gunicorn.workers.gaiohttp.asyncio')
|
||||||
@ -84,6 +84,26 @@ class WorkerTests(unittest.TestCase):
|
|||||||
self.assertTrue(self.worker.log.info.called)
|
self.assertTrue(self.worker.log.info.called)
|
||||||
self.assertTrue(self.worker.notify.called)
|
self.assertTrue(self.worker.notify.called)
|
||||||
|
|
||||||
|
@mock.patch('gunicorn.workers.gaiohttp.asyncio')
|
||||||
|
def test__run_unix_socket(self, m_asyncio):
|
||||||
|
self.worker.ppid = 1
|
||||||
|
self.worker.alive = True
|
||||||
|
self.worker.servers = []
|
||||||
|
sock = mock.Mock()
|
||||||
|
sock.cfg_addr = '/tmp/gunicorn.sock'
|
||||||
|
self.worker.sockets = [sock]
|
||||||
|
self.worker.wsgi = mock.Mock()
|
||||||
|
self.worker.log = mock.Mock()
|
||||||
|
self.worker.notify = mock.Mock()
|
||||||
|
loop = self.worker.loop = mock.Mock()
|
||||||
|
loop.create_server.return_value = asyncio.Future(loop=self.loop)
|
||||||
|
loop.create_server.return_value.set_result(sock)
|
||||||
|
|
||||||
|
self.loop.run_until_complete(self.worker._run())
|
||||||
|
|
||||||
|
self.assertTrue(self.worker.log.info.called)
|
||||||
|
self.assertTrue(self.worker.notify.called)
|
||||||
|
|
||||||
def test__run_connections(self):
|
def test__run_connections(self):
|
||||||
conn = mock.Mock()
|
conn = mock.Mock()
|
||||||
self.worker.ppid = 1
|
self.worker.ppid = 1
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user