From dcebaf61b8cd3232202cb7beef5afbfedd85c4c0 Mon Sep 17 00:00:00 2001 From: Julien Duponchelle Date: Tue, 7 Jun 2016 11:21:19 +0200 Subject: [PATCH] Do not timeout forwarded calls --- gns3server/controller/compute.py | 20 ++++++++++++++++++-- requirements.txt | 2 +- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/gns3server/controller/compute.py b/gns3server/controller/compute.py index 87a523fb..ad7d2c5b 100644 --- a/gns3server/controller/compute.py +++ b/gns3server/controller/compute.py @@ -34,6 +34,22 @@ class ComputeError(ControllerError): pass +class Timeout(aiohttp.Timeout): + """ + Could be removed with aiohttp 0.22 that support None timeout + """ + + def __enter__(self): + if self._timeout: + return super().__enter__() + return self + + def __exit__(self, exc_type, exc_val, exc_tb): + if self._timeout: + return super().__exit__(exc_type, exc_val, exc_tb) + return self + + class Compute: """ A GNS3 compute. @@ -266,7 +282,7 @@ class Compute: @asyncio.coroutine def _run_http_query(self, method, path, data=None, timeout=10): - with aiohttp.Timeout(timeout): + with Timeout(timeout): url = self._getUrl(path) headers = {} headers['content-type'] = 'application/json' @@ -335,5 +351,5 @@ class Compute: """ Forward a call to the emulator on compute """ - res = yield from self.http_query(method, "/{}/{}".format(type, path), data=data) + res = yield from self.http_query(method, "/{}/{}".format(type, path), data=data, timeout=None) return res.json diff --git a/requirements.txt b/requirements.txt index 3b8e0fd2..66a05d29 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,5 @@ jsonschema>=2.4.0 -aiohttp>=0.21.5 +aiohttp>=0.21.6 aiohttp_cors>=0.4.0 Jinja2>=2.7.3 raven>=5.2.0