From 4ff741a1458871afad993357fe4d1677c7547d88 Mon Sep 17 00:00:00 2001 From: davebshow <davebshow@gmail.com> Date: Tue, 12 May 2015 18:42:46 -0400 Subject: [PATCH] profiling --- aiogremlin/__init__.py | 2 +- aiogremlin/client.py | 10 ++++++---- aiogremlin/connection.py | 12 ++++++++++-- aiogremlin/protocol.py | 12 +++++------- profile.py => profiler.py | 0 5 files changed, 22 insertions(+), 14 deletions(-) rename profile.py => profiler.py (100%) diff --git a/aiogremlin/__init__.py b/aiogremlin/__init__.py index 123064e..890bba0 100644 --- a/aiogremlin/__init__.py +++ b/aiogremlin/__init__.py @@ -3,4 +3,4 @@ from .connection import (WebsocketPool, AiohttpFactory, BaseFactory, BaseConnection) from .client import GremlinClient, create_client from .exceptions import RequestError, GremlinServerError, SocketClientError -__version__ = "0.0.3" +__version__ = "0.0.3dev" diff --git a/aiogremlin/client.py b/aiogremlin/client.py index fa5f03b..1ff129a 100644 --- a/aiogremlin/client.py +++ b/aiogremlin/client.py @@ -155,18 +155,20 @@ class GremlinResponseStream: @asyncio.coroutine def _read(self): + # This will find the eof set at 200 response + if self._queue.at_eof(): + self._conn.feed_pool() + return message = asyncio.async(self._queue.read(), loop=self._loop) done, pending = yield from asyncio.wait( [message, asyncio.async(self._conn._receive(), loop=self._loop)], loop=self._loop, return_when=asyncio.FIRST_COMPLETED) if message in done: + # Temporary try: return message.result() - except aiohttp.streams.EofStream: + except aiohttp.EofStream: self._conn.feed_pool() - except Exception: - self._conn.feed_pool() - raise else: message.cancel() diff --git a/aiogremlin/connection.py b/aiogremlin/connection.py index aa62588..7652d14 100644 --- a/aiogremlin/connection.py +++ b/aiogremlin/connection.py @@ -230,9 +230,17 @@ class AiohttpConnection(BaseConnection): yield from self.release() raise if message.tp == aiohttp.MsgType.binary: - self.parser.feed_data(message.data.decode()) + try: + self.parser.feed_data(message.data.decode()) + except Exception: + self.release() + raise elif message.tp == aiohttp.MsgType.text: - self.parser.feed_data(message.data.strip()) + try: + self.parser.feed_data(message.data.strip()) + except Exception: + self.release() + raise else: try: if message.tp == aiohttp.MsgType.close: diff --git a/aiogremlin/protocol.py b/aiogremlin/protocol.py index 621a37f..6f40cba 100644 --- a/aiogremlin/protocol.py +++ b/aiogremlin/protocol.py @@ -23,15 +23,13 @@ def gremlin_response_parser(out, buf): if message.status_code == 200: out.feed_data(message) elif message.status_code == 299: + out.feed_data(message) out.feed_eof() else: - try: - if message.status_code < 500: - raise RequestError(message.status_code, message.message) - else: - raise GremlinServerError(message.status_code, message.message) - finally: - yield from connection.release() + if message.status_code < 500: + raise RequestError(message.status_code, message.message) + else: + raise GremlinServerError(message.status_code, message.message) class GremlinWriter: diff --git a/profile.py b/profiler.py similarity index 100% rename from profile.py rename to profiler.py -- GitLab