Skip to content

Commit 800988a

Browse files
wouterdbbartv
authored andcommitted
initial conversion to tornado 5 (#787)
* changes for tornado5 * fixed pep8 * simplify future chaining * added changelog entry fixes #765
1 parent fe90aa3 commit 800988a

16 files changed

+491
-479
lines changed

CHANGELOG.md

+1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ Changes in this release:
33
- Various bugfixes and performance enhancements
44
- Dependency updates
55
- Removal of snapshot and restore functionality from the server (#789)
6+
- Updated to Tornado 5, moving from tornado ioloop to the standard python async framework (#765)
67

78
v 2018.3 (2018-12-07)
89
Changes in this release:

requirements.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ sphinx-autodoc-annotation==1.0-1
2323
sphinx-rtd-theme==0.4.2
2424
sphinx==1.8.2
2525
texttable==1.5.0
26-
tornado==4.5.3
26+
tornado==5.1.1
2727
tox==3.5.3
2828
typing==3.6.6
2929
virtualenv==16.0.0

setup.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
"python-dateutil",
1212
"pyyaml",
1313
"texttable",
14-
"tornado < 5",
14+
"tornado",
1515
"typing",
1616
"virtualenv<16.1.0",
1717
"typing",

src/inmanta/agent/handler.py

+3-10
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,11 @@
2424
from concurrent.futures import Future
2525
from collections import defaultdict
2626
import typing
27+
import tornado.concurrent
2728

2829

2930
from inmanta.agent.io import get_io
3031
from inmanta import protocol, resources, const, data
31-
from tornado import ioloop
3232
from inmanta.module import Project
3333
from inmanta.agent.cache import AgentCache
3434
import uuid
@@ -331,7 +331,7 @@ def __init__(self, agent, io=None) -> None:
331331
self._io = io
332332

333333
self._client = None
334-
self._ioloop = ioloop.IOLoop.current(instance=True)
334+
self._ioloop = agent.process._io_loop
335335

336336
def run_sync(self, func: typing.Callable) -> typing.Any:
337337
"""
@@ -343,20 +343,13 @@ def run_sync(self, func: typing.Callable) -> typing.Any:
343343
"""
344344
f = Future()
345345

346-
def future_to_future(future):
347-
exc = future.exception()
348-
if exc is not None:
349-
f.set_exception(exc)
350-
else:
351-
f.set_result(future.result())
352-
353346
def run():
354347
try:
355348
result = func()
356349
if result is not None:
357350
from tornado.gen import convert_yielded
358351
result = convert_yielded(result)
359-
result.add_done_callback(future_to_future)
352+
tornado.concurrent.chain_future(result, f)
360353
except Exception as e:
361354
f.set_exception(e)
362355
self._ioloop.add_callback(run)

src/inmanta/server/server.py

+8-3
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
import logging
2424
import os
2525
import re
26-
import subprocess
2726
import sys
2827
import tempfile
2928
import time
@@ -1525,8 +1524,14 @@ def _recompile_environment(self, environment_id, update_repo=False, wait=0, meta
15251524

15261525
# verify if branch is correct
15271526
LOGGER.debug("Verifying correct branch")
1528-
proc = subprocess.Popen(["git", "branch"], cwd=project_dir, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
1529-
out, _ = proc.communicate()
1527+
sub_process = process.Subprocess(["git", "branch"],
1528+
stdout=process.Subprocess.STREAM,
1529+
stderr=process.Subprocess.STREAM,
1530+
cwd=project_dir)
1531+
1532+
out, _, _ = yield [gen.Task(sub_process.stdout.read_until_close),
1533+
gen.Task(sub_process.stderr.read_until_close),
1534+
sub_process.wait_for_exit(raise_error=False)]
15301535

15311536
o = re.search("\* ([^\s]+)$", out.decode(), re.MULTILINE)
15321537
if o is not None and env.repo_branch != o.group(1):

tests/conftest.py

+3
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,12 @@
4444
from inmanta.export import cfg_env, unknown_parameters
4545
import traceback
4646
from tornado import process
47+
import asyncio
48+
from tornado.platform.asyncio import AnyThreadEventLoopPolicy
4749
import sys
4850
import pkg_resources
4951

52+
asyncio.set_event_loop_policy(AnyThreadEventLoopPolicy())
5053

5154
DEFAULT_PORT_ENVVAR = 'MONGOBOX_PORT'
5255

+92-91
Original file line numberDiff line numberDiff line change
@@ -1,95 +1,96 @@
11
-----BEGIN CERTIFICATE-----
2-
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
5253
-----END CERTIFICATE-----
5354
-----BEGIN CERTIFICATE-----
54-
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
90-
AlPDLU8GAK6retXfAPyvhLGc/Axv6E7MYY/+/epQmhZ9FGta+8Sd0TM15HP+2CJD
91-
Mc5Af07hYoptLzF7dajkJOOLNuHdp9aq6FGMm3S3hkVR7sdfDSYL0f3Rz55K5tYZ
92-
k77bym0VS2fx3h9YZwNXv0y1zlWAnFY7KdW/3NCkVPSu/YGoIV+78s/8aFbcPz2B
93-
qfhYGfWqnHv48B6xtHanQGPF73WVhhsCXio3zi/ACRtRe9B4cDEH6xYQCZZ83Ltw
94-
/4ylpMVm+eKWyvARMiZx2HsJs64qrrX5CiJeCtkyu6ff
55+
MIIHpDCCA4ygAwIBAgICEAAwDQYJKoZIhvcNAQEMBQAwWDELMAkGA1UEBhMCYmUx
56+
DTALBgNVBAgMBHRlc3QxDTALBgNVBAcMBHRlc3QxDTALBgNVBAoMBHRlc3QxDTAL
57+
BgNVBAsMBHRlc3QxDTALBgNVBAMMBHRlc3QwHhcNMTgxMTA3MTU0ODMwWhcNMjAx
58+
MTA2MTU0ODMwWjA9MQowCAYDVQQDDAFhMQowCAYDVQQIDAFhMQswCQYDVQQGEwJi
59+
ZTEKMAgGA1UECgwBYTEKMAgGA1UECwwBYTCCAiIwDQYJKoZIhvcNAQEBBQADggIP
60+
ADCCAgoCggIBAOJsNOyMpK20wReWVlZmOygTSbbKcmzUb5rj5qc6/hAn2xp64XcX
61+
gaifNpZb1w4o8k9d/mkB8yPfMXDwN7RRr3eaj74wXAqUuQ++yV3Bw6NvKVLLcLB3
62+
wln5HyDzZy0pL5hSNNnz/6S8fLuxeiJVEz9CL23Oilzxa9WyM9hP5xIRDo1HVu/P
63+
QS4CtCMYXlxMuTdobpyLTgS6QuZ9xCUEjXCFk2QiSXUg7G/EnfEIRswXwCA1ymPi
64+
KbdtA+8souvRt0OQ1feeObnvOFXvn05B0ljzwQon3FNkexJMoNjUjuMPOuFZGLMJ
65+
E0ZoVg+2D6aiLVMoC/cJ4jV5wSPuaBV14mkbxzROwACvJ9q1M8aHt8b92NYFqMSf
66+
QE5wV6Z5Ep4bUJK7B2hdE6pd30sDUt6HdEflITYTzTYCiHeG2z2hKlRjhAMFxBPq
67+
nJSWuIijNs5Z2RyciCTryHl1+57gMvBtOzQQAuCFsqVfdkCgwlsmCbdWbvt1wZiX
68+
HiLj0zi9hvbmxaxJQZrbtpqzNYmVpX0gmKwM+LUpiUD2WasZq+nH49vqocngJn4m
69+
GjOeIJRr5T4ZHvbxUdc+db7srseHa4yrVH8M6Damb1HavSYAQlniGvJnBet+uhy3
70+
HuXRCuAwaCgo1/47fimKWo0DJijagN8EYgPCXnGInSYn3B0BkO7reOlHAgMBAAGj
71+
gZIwgY8wDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU/4kha/KzuF4yAVa3s5Fi
72+
38P+jFIwHwYDVR0jBBgwFoAUS7e5yFcsonXsf3wjNVTzXtaLHHYwCwYDVR0PBAQD
73+
AgKkMBMGA1UdJQQMMAoGCCsGAQUFBwMBMBoGA1UdEQQTMBGCD0lubWFudGEgVGVz
74+
dCBDQTANBgkqhkiG9w0BAQwFAAOCBAEAsExreN424XIxgSr77SJwxQpwqQtsTmzH
75+
Ncolyr/wstBIwSOA0HskMltCfKOla5TKAvsy4Aoi+irO1Z9jwgXJD3RhZkJkPtoD
76+
VHjCMjNtS0gZbsXXmjV/aV+sJJ0sgaPLjHy2zDVESRiYyfZNdRnwQ5R3Rufp4jJd
77+
lVg9C+sv1XPx796FaIXW+zAcZA118R/Dh5C49CsVOwHgv2YYOd37KXoAtdc8LH0O
78+
VvIf3jpP1NUV9N8tTivV5ahS5HmJyiiIhn77klqTlH5y4BADJwJH648KOPICtACq
79+
GlJRPfCOWNwwYapMoFQJniuRaVX1gHfbZ2pLcCw9IkoJu5TpFmy6u1ybjMKm3KX1
80+
UndaKh65Yzbv7lwUDcJdHMUMZe/QK2GwnL+GgMNNxZY6JrPsDFo8zHlcICTrvniQ
81+
AcykW6eU9FL80fHqnkkUQ6L6NBR8nqCNRNrlxP3KPddPqVThlR2i+Im9bjiGdRu3
82+
/ch3FXaMGgZc4rjpJis53Qpp2UPE9mI/42fjjEE5svFVt0ifKBz0pohoLpTnJBUi
83+
BYByMAP/e20qUAB9UxZaT0TpgSp4kHgIWK3JJ7DxUpx3OmGb4g/M58i1PRmx9Jqp
84+
t3Fvb47PNO6I5NZEvQcKSX8WG9mfB9gjqjs7bTnGCe2d9jwSGthnO2g67792mQQU
85+
0LJusr+nk9rbyz8MKtoMzVKNcQi58hFaESaaSurAqsCmz5ptVZGouAxgZKgw7lX9
86+
X1B2FFee2lLpGs/WJldJuwNH/N+HNYhXxUuYrD/7PI60LNqCexlSX5vz1gZUlPNv
87+
GfUj/DoDxlrVkZh4TdrmMkeDdJ7a4lhYc8zyWPGuFs9B1zvDHj7sTGbHOu3ckzma
88+
qz+07oIgS/kO+WaCvsdANnfPbOPL8D+dv3zQ+8Zym4RTl50IFLt1QQ1fvARlRZ0x
89+
reqNm2RepnLKYGibP7a40ApwUaFxvEgHv6Dv55Qp7ZasRg5vUXI53y8TH64OLzLE
90+
aSsWSiITs1CYC6rq50Df8TiDog3XG8JVjBINWD9ryx/te3nczXLuhwXZuC/mjMcs
91+
nB1tafoZjDcEH7yXmn7Hq9U+E0OCwx9HY3/xo4i5Z3WImi58UQtyKTce4gx4HI2g
92+
+5uvzOKbaIgoEfny/C967YT/K2HFHkKBiZ61yCYICMdqi33B6uyfZfkY1bsxTaTm
93+
4PjzBuX3ESDye38kJ3KvCbvbRs9JcTL4g/+RrXiclzZqwWXWFhSkWJ6jlyGO0BWJ
94+
dkTa/M+3KCPS+Jt7hWwDEfzXpqZyqDCqblFpCiLjzxVvjUArCWbAj0Ea533XFH3e
95+
XuDlDUjY67NnB36z2ErCGJSiyvs/5RLGp7U6yZ3AaFQ0X47u5V0jqw==
9596
-----END CERTIFICATE-----
+30-31
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,32 @@
11
-----BEGIN CERTIFICATE-----
2-
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
32-
9k5wPAWAC91IfNM=
2+
MIIFgTCCA2mgAwIBAgICEAAwDQYJKoZIhvcNAQEMBQAwPTEKMAgGA1UEAwwBYTEK
3+
MAgGA1UECAwBYTELMAkGA1UEBhMCYmUxCjAIBgNVBAoMAWExCjAIBgNVBAsMAWEw
4+
HhcNMTgxMTA3MTU1MDM4WhcNMTkxMTA3MTU1MDM4WjA4MQswCQYDVQQDDAJ4eDEL
5+
MAkGA1UEBhMCYWExHDAaBgNVBAoME0RlZmF1bHQgQ29tcGFueSBMdGQwggIiMA0G
6+
CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDZvWoiLP7gdpVvfUEQz04DK8TaEyVM
7+
af+mZMmKz7DgRsYQ14cN9aZ+VFlIXXsfRcebCbZJCCMo54L5b1txESM+3MR5UWpd
8+
7f2bbMUQ58t0R1RC1bSnl6Tui9bhK2NK+S+X5UWejyEiMzc1BbOoBe9OrMlZvDNe
9+
cbdVyBGs5t+Bns+R4HKH1HFPsqZ630rUcq3ALxhub54PWem7ITkF9nQeMSIH69yc
10+
+iVbM3zgTAspKo7YOkqmy3vkZi19aJWVV81u9EM2zpAmkcgZCQ3g6uqySbP4VgbP
11+
Ljv1BDswLuMSD9ds4afgDoVxjD9vuQIfnNs5rTJf46yaATJZ9PCfu8caJBsEh4ON
12+
ZSKoIP0Vx1DtPUFjSbai0iNQshL9usqBRKRvEJPSXycFFAgzIf2Cd2NJzZ8R4tGv
13+
YznTfWGwiCaPG1Dj44pwXt0Myqwm72eVedmuJvd8QloHjTyblU+1oLC5hC7/iACl
14+
vJVogvNNuLpX/S9ywW+P1jB+YAZQrn1bP+rg8C9336V3cByLd+yIhcBCOcSxjgIV
15+
5uQSGsvA+gQqg+AkdAlc5aI6BqVkOkPiFeKj2iwaMJYTRcgJPqNxoB21KXGXWwof
16+
be4zjV3F+IIJk8k46aNLw1ZkVnHMBd2G2Si9QAFchigjGq+Gzy7ofmYUouj+s+GC
17+
6/cFhZnVFNG86wIDAQABo4GPMIGMMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFNA3
18+
TJ/frac41uwSAoaMlZiDF88HMB8GA1UdIwQYMBaAFP+JIWvys7heMgFWt7ORYt/D
19+
/oxSMAsGA1UdDwQEAwIFoDATBgNVHSUEDDAKBggrBgEFBQcDATAaBgNVHREEEzAR
20+
gglsb2NhbGhvc3SHBH8AAAEwDQYJKoZIhvcNAQEMBQADggIBAJPyF+aL0oH5wVy6
21+
NMPZJeSF6MgYum+vCrmm0zvRHmQ2r1uMZPmoafoKWLcvtj7Dzps+beAPOY59E4Eo
22+
CqzzPDUkZTMcyMKELEzl/w+PoM/Od+TMgjeuGgkT6Wprq/288oDZiXCZYcgSHjQw
23+
sVx4pu14FrG++dVWr85ZsGgCbdFO7HUh0o6NJokOs1RGPyQLnb6jRzTn1SCjg7AF
24+
8yPl5FPKEts3pFeq4UrbBEtTR/oMNJDLTJ0rMyk4KXFHfloXuvJnScj1sbEbzm8k
25+
abNwPxf1xdE/VkQ5yc8ov777a7MiiFXk6XRAeXGOUWa3FrgMFOHrZoGF1Cv5RetM
26+
mUcqrgqbHx28Sj4u/tQ/HNDB8cu7/F8BwT/5M6DYTv7EaapRZD5Yz9WqzBpGunz6
27+
LnxUmfNPN1ZKsmvDk/IiHlLioQrtTELIzWRSpmsUMXE6tp1PXklLRSHSFQegTwAk
28+
+XK62iK8Aws5L1bHBxejAnyRwLfbPDGxbfvA2BRTOJF1ZmNJ+5uldx5nPKVkzJPZ
29+
vjVE+mfG4I4kDscnuBKcWUgencUR9FsP426STywKRIj3hhCb1FwNR7Y9RdP5jjNR
30+
mJJh9FNl7IrJduZWEERnoWALV6Mjr+tG2PF+LHOYIwptAvtrFdsqZ0ThhHEAl8fo
31+
CWCqd6dyEU18STKPqi9PJKdWq5AP
3332
-----END CERTIFICATE-----

0 commit comments

Comments
 (0)