mirror of
https://git.anonymousland.org/anonymousland/synapse.git
synced 2025-05-02 22:14:55 -04:00
Attempt to figure out what's going on with timeouts (#3857)
This commit is contained in:
parent
b7d2fb5eb9
commit
bfa0b759e0
4 changed files with 241 additions and 57 deletions
|
@ -4,9 +4,14 @@ from io import BytesIO
|
|||
from six import text_type
|
||||
|
||||
import attr
|
||||
from zope.interface import implementer
|
||||
|
||||
from twisted.internet import address, threads
|
||||
from twisted.internet import address, threads, udp
|
||||
from twisted.internet._resolver import HostResolution
|
||||
from twisted.internet.address import IPv4Address
|
||||
from twisted.internet.defer import Deferred
|
||||
from twisted.internet.error import DNSLookupError
|
||||
from twisted.internet.interfaces import IReactorPluggableNameResolver
|
||||
from twisted.python.failure import Failure
|
||||
from twisted.test.proto_helpers import MemoryReactorClock
|
||||
|
||||
|
@ -154,11 +159,46 @@ def render(request, resource, clock):
|
|||
wait_until_result(clock, request)
|
||||
|
||||
|
||||
@implementer(IReactorPluggableNameResolver)
|
||||
class ThreadedMemoryReactorClock(MemoryReactorClock):
|
||||
"""
|
||||
A MemoryReactorClock that supports callFromThread.
|
||||
"""
|
||||
|
||||
def __init__(self):
|
||||
self._udp = []
|
||||
self.lookups = {}
|
||||
|
||||
class Resolver(object):
|
||||
def resolveHostName(
|
||||
_self,
|
||||
resolutionReceiver,
|
||||
hostName,
|
||||
portNumber=0,
|
||||
addressTypes=None,
|
||||
transportSemantics='TCP',
|
||||
):
|
||||
|
||||
resolution = HostResolution(hostName)
|
||||
resolutionReceiver.resolutionBegan(resolution)
|
||||
if hostName not in self.lookups:
|
||||
raise DNSLookupError("OH NO")
|
||||
|
||||
resolutionReceiver.addressResolved(
|
||||
IPv4Address('TCP', self.lookups[hostName], portNumber)
|
||||
)
|
||||
resolutionReceiver.resolutionComplete()
|
||||
return resolution
|
||||
|
||||
self.nameResolver = Resolver()
|
||||
super(ThreadedMemoryReactorClock, self).__init__()
|
||||
|
||||
def listenUDP(self, port, protocol, interface='', maxPacketSize=8196):
|
||||
p = udp.Port(port, protocol, interface, maxPacketSize, self)
|
||||
p.startListening()
|
||||
self._udp.append(p)
|
||||
return p
|
||||
|
||||
def callFromThread(self, callback, *args, **kwargs):
|
||||
"""
|
||||
Make the callback fire in the next reactor iteration.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue