Fix redis password support. (#7401)

We forgot to set the password on the subscriber connection, as well as
not calling super methods for overridden connectionMade/connectionLost
functions.
code_spécifique_watcha
Erik Johnston 5 years ago committed by GitHub
parent 032e5a2aca
commit 350421e058
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 1
      changelog.d/7401.feature
  2. 3
      stubs/txredisapi.pyi
  3. 3
      synapse/replication/tcp/redis.py

@ -0,0 +1 @@
Add support for running replication over Redis when using workers.

@ -22,7 +22,10 @@ class RedisProtocol:
def publish(self, channel: str, message: bytes): ... def publish(self, channel: str, message: bytes): ...
class SubscriberProtocol: class SubscriberProtocol:
password: Optional[str]
def subscribe(self, channels: Union[str, List[str]]): ... def subscribe(self, channels: Union[str, List[str]]): ...
def connectionMade(self): ...
def connectionLost(self, reason): ...
def lazyConnection( def lazyConnection(
host: str = ..., host: str = ...,

@ -61,6 +61,7 @@ class RedisSubscriber(txredisapi.SubscriberProtocol, AbstractConnection):
outbound_redis_connection = None # type: txredisapi.RedisProtocol outbound_redis_connection = None # type: txredisapi.RedisProtocol
def connectionMade(self): def connectionMade(self):
super().connectionMade()
logger.info("Connected to redis instance") logger.info("Connected to redis instance")
self.subscribe(self.stream_name) self.subscribe(self.stream_name)
self.send_command(ReplicateCommand()) self.send_command(ReplicateCommand())
@ -119,6 +120,7 @@ class RedisSubscriber(txredisapi.SubscriberProtocol, AbstractConnection):
logger.warning("Unhandled command: %r", cmd) logger.warning("Unhandled command: %r", cmd)
def connectionLost(self, reason): def connectionLost(self, reason):
super().connectionLost(reason)
logger.info("Lost connection to redis instance") logger.info("Lost connection to redis instance")
self.handler.lost_connection(self) self.handler.lost_connection(self)
@ -189,5 +191,6 @@ class RedisDirectTcpReplicationClientFactory(txredisapi.SubscriberFactory):
p.handler = self.handler p.handler = self.handler
p.outbound_redis_connection = self.outbound_redis_connection p.outbound_redis_connection = self.outbound_redis_connection
p.stream_name = self.stream_name p.stream_name = self.stream_name
p.password = self.password
return p return p

Loading…
Cancel
Save