Add IDs to outbound transactions

This commit is contained in:
Erik Johnston 2015-06-19 10:13:03 +01:00
parent fb7def3344
commit 9d112f4440

View File

@ -35,11 +35,13 @@ from syutil.crypto.jsonsign import sign_json
import simplejson as json import simplejson as json
import logging import logging
import sys
import urllib import urllib
import urlparse import urlparse
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
outbound_logger = logging.getLogger("synapse.http.outbound")
metrics = synapse.metrics.get_metrics_for(__name__) metrics = synapse.metrics.get_metrics_for(__name__)
@ -109,6 +111,8 @@ class MatrixFederationHttpClient(object):
self.clock = hs.get_clock() self.clock = hs.get_clock()
self.version_string = hs.version_string self.version_string = hs.version_string
self._next_id = 1
@defer.inlineCallbacks @defer.inlineCallbacks
def _create_request(self, destination, method, path_bytes, def _create_request(self, destination, method, path_bytes,
body_callback, headers_dict={}, param_bytes=b"", body_callback, headers_dict={}, param_bytes=b"",
@ -123,8 +127,13 @@ class MatrixFederationHttpClient(object):
("", "", path_bytes, param_bytes, query_bytes, "",) ("", "", path_bytes, param_bytes, query_bytes, "",)
) )
logger.info("Sending request to %s: %s %s", txn_id = "%s-%s" % (method, self._next_id)
destination, method, url_bytes) self._next_id = (self._next_id + 1) % (sys.maxint - 1)
outbound_logger.info(
"{%s} [%s] Sending request: %s %s",
txn_id, destination, method, url_bytes
)
logger.debug( logger.debug(
"Types: %s", "Types: %s",
@ -141,6 +150,8 @@ class MatrixFederationHttpClient(object):
endpoint = self._getEndpoint(reactor, destination) endpoint = self._getEndpoint(reactor, destination)
log_result = None
try:
while True: while True:
producer = None producer = None
if body_callback: if body_callback:
@ -164,7 +175,8 @@ class MatrixFederationHttpClient(object):
time_out=timeout/1000. if timeout else 60, time_out=timeout/1000. if timeout else 60,
) )
logger.debug("Got response to %s", method) logger.debug("{%s} Got response to %s", txn_id, method)
log_result = "%d %s" % (response.code, response.phrase,)
break break
except Exception as e: except Exception as e:
if not retry_on_dns_fail and isinstance(e, DNSLookupError): if not retry_on_dns_fail and isinstance(e, DNSLookupError):
@ -173,10 +185,14 @@ class MatrixFederationHttpClient(object):
destination, destination,
e e
) )
log_result = "DNS Lookup failed to %s with %s" % (
destination, e
)
raise raise
logger.warn( logger.warn(
"Sending request failed to %s: %s %s: %s - %s", "{%s} Sending request failed to %s: %s %s: %s - %s",
txn_id,
destination, destination,
method, method,
url_bytes, url_bytes,
@ -184,19 +200,21 @@ class MatrixFederationHttpClient(object):
_flatten_response_never_received(e), _flatten_response_never_received(e),
) )
log_result = "%s - %s" % (
type(e).__name__, _flatten_response_never_received(e),
)
if retries_left and not timeout: if retries_left and not timeout:
yield sleep(2 ** (5 - retries_left)) yield sleep(2 ** (5 - retries_left))
retries_left -= 1 retries_left -= 1
else: else:
raise raise
finally:
logger.info( outbound_logger.info(
"Received response %d %s for %s: %s %s", "{%s} [%s] Result: %s",
response.code, txn_id,
response.phrase,
destination, destination,
method, log_result,
url_bytes
) )
if 200 <= response.code < 300: if 200 <= response.code < 300: