Skip to content
This repository has been archived by the owner on Apr 26, 2024. It is now read-only.

Update to Twisted-15.2.1. #173

Merged
merged 5 commits into from
Aug 12, 2015
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ def exec_file(path_segments):
description="Reference Synapse Home Server",
install_requires=dependencies['requirements'](include_conditional=True).keys(),
setup_requires=[
"Twisted==14.0.2", # Here to override setuptools_trial's dependency on Twisted>=2.4.0
"Twisted>=15.1.0", # Here to override setuptools_trial's dependency on Twisted>=2.4.0
"setuptools_trial",
"mock"
],
Expand Down
80 changes: 27 additions & 53 deletions synapse/http/matrixfederationclient.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@

from twisted.internet import defer, reactor, protocol
from twisted.internet.error import DNSLookupError
from twisted.web.client import readBody, _AgentBase, _URI, HTTPConnectionPool
from twisted.web.client import readBody, HTTPConnectionPool, Agent
from twisted.web.http_headers import Headers
from twisted.web._newclient import ResponseDone

Expand Down Expand Up @@ -55,41 +55,17 @@
)


class MatrixFederationHttpAgent(_AgentBase):

def __init__(self, reactor, pool=None):
_AgentBase.__init__(self, reactor, pool)

def request(self, destination, endpoint, method, path, params, query,
headers, body_producer):

outgoing_requests_counter.inc(method)

host = b""
port = 0
fragment = b""

parsed_URI = _URI(b"http", destination, host, port, path, params,
query, fragment)

# Set the connection pool key to be the destination.
key = destination

d = self._requestWithEndpoint(key, endpoint, method, parsed_URI,
headers, body_producer,
parsed_URI.originForm)

def _cb(response):
incoming_responses_counter.inc(method, response.code)
return response

def _eb(failure):
incoming_responses_counter.inc(method, "ERR")
return failure
class MatrixFederationEndpointFactory(object):
def __init__(self, hs):
self.tls_context_factory = hs.tls_context_factory

d.addCallbacks(_cb, _eb)
def endpointForURI(self, uri):
destination = uri.netloc

return d
return matrix_federation_endpoint(
reactor, destination, timeout=10,
ssl_context_factory=self.tls_context_factory
)


class MatrixFederationHttpClient(object):
Expand All @@ -107,12 +83,18 @@ def __init__(self, hs):
self.server_name = hs.hostname
pool = HTTPConnectionPool(reactor)
pool.maxPersistentPerHost = 10
self.agent = MatrixFederationHttpAgent(reactor, pool=pool)
self.agent = Agent.usingEndpointFactory(
reactor, MatrixFederationEndpointFactory(hs), pool=pool
)
self.clock = hs.get_clock()
self.version_string = hs.version_string

self._next_id = 1

def _create_url(self, destination, path_bytes, param_bytes, query_bytes):
return urlparse.urlunparse(
("matrix", destination, path_bytes, param_bytes, query_bytes, "")
)

@defer.inlineCallbacks
def _create_request(self, destination, method, path_bytes,
body_callback, headers_dict={}, param_bytes=b"",
Expand All @@ -123,8 +105,8 @@ def _create_request(self, destination, method, path_bytes,
headers_dict[b"User-Agent"] = [self.version_string]
headers_dict[b"Host"] = [destination]

url_bytes = urlparse.urlunparse(
("", "", path_bytes, param_bytes, query_bytes, "",)
url_bytes = self._create_url(
destination, path_bytes, param_bytes, query_bytes
)

txn_id = "%s-O-%s" % (method, self._next_id)
Expand All @@ -139,30 +121,28 @@ def _create_request(self, destination, method, path_bytes,
# (once we have reliable transactions in place)
retries_left = 5

endpoint = preserve_context_over_fn(
self._getEndpoint, reactor, destination
http_url_bytes = urlparse.urlunparse(
("", "", path_bytes, param_bytes, query_bytes, "")
)

log_result = None
try:
while True:
producer = None
if body_callback:
producer = body_callback(method, url_bytes, headers_dict)
producer = body_callback(method, http_url_bytes, headers_dict)

try:
def send_request():
request_deferred = self.agent.request(
destination,
endpoint,
request_deferred = preserve_context_over_fn(
self.agent.request,
method,
path_bytes,
param_bytes,
query_bytes,
url_bytes,
Headers(headers_dict),
producer
)


return self.clock.time_bound_deferred(
request_deferred,
time_out=timeout/1000. if timeout else 60,
Expand Down Expand Up @@ -452,12 +432,6 @@ def body_callback(method, url_bytes, headers_dict):

defer.returnValue((length, headers))

def _getEndpoint(self, reactor, destination):
return matrix_federation_endpoint(
reactor, destination, timeout=10,
ssl_context_factory=self.hs.tls_context_factory
)


class _ReadBodyToFileProtocol(protocol.Protocol):
def __init__(self, stream, deferred, max_size):
Expand Down
2 changes: 1 addition & 1 deletion synapse/python_dependencies.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@

REQUIREMENTS = {
"syutil>=0.0.7": ["syutil>=0.0.7"],
"Twisted==14.0.2": ["twisted==14.0.2"],
"Twisted>=15.1.0": ["twisted>=15.1.0"],
"service_identity>=1.0.0": ["service_identity>=1.0.0"],
"pyopenssl>=0.14": ["OpenSSL>=0.14"],
"pyyaml": ["yaml"],
Expand Down