def get_outbound_redis_connection(self) -> "RedisProtocol": """ The Redis connection used for replication. Raises: AssertionError: if Redis is not enabled in the homeserver config. """ assert self.config.redis.redis_enabled # We only want to import redis module if we're using it, as we have # `txredisapi` as an optional dependency. from synapse.replication.tcp.redis import lazyConnection logger.info( "Connecting to redis (host=%r port=%r) for external cache", self.config.redis.redis_host, self.config.redis.redis_port, ) return lazyConnection( hs=self, host=self.config.redis.redis_host, port=self.config.redis.redis_port, password=self.config.redis.redis_password, reconnect=True, )
def start_replication(self, hs): """Helper method to start a replication connection to the remote server using TCP. """ if hs.config.redis.redis_enabled: from synapse.replication.tcp.redis import ( RedisDirectTcpReplicationClientFactory, lazyConnection, ) logger.info( "Connecting to redis (host=%r port=%r)", hs.config.redis_host, hs.config.redis_port, ) # First let's ensure that we have a ReplicationStreamer started. hs.get_replication_streamer() # We need two connections to redis, one for the subscription stream and # one to send commands to (as you can't send further redis commands to a # connection after SUBSCRIBE is called). # First create the connection for sending commands. outbound_redis_connection = lazyConnection( reactor=hs.get_reactor(), host=hs.config.redis_host, port=hs.config.redis_port, password=hs.config.redis.redis_password, reconnect=True, ) # Now create the factory/connection for the subscription stream. self._factory = RedisDirectTcpReplicationClientFactory( hs, outbound_redis_connection) hs.get_reactor().connectTCP( hs.config.redis.redis_host, hs.config.redis.redis_port, self._factory, ) else: client_name = hs.get_instance_name() self._factory = DirectTcpReplicationClientFactory( hs, client_name, self) host = hs.config.worker_replication_host port = hs.config.worker_replication_port hs.get_reactor().connectTCP(host, port, self._factory)
def get_outbound_redis_connection(self) -> Optional["RedisProtocol"]: if not self.config.redis.redis_enabled: return None # We only want to import redis module if we're using it, as we have # `txredisapi` as an optional dependency. from synapse.replication.tcp.redis import lazyConnection logger.info( "Connecting to redis (host=%r port=%r) for external cache", self.config.redis_host, self.config.redis_port, ) return lazyConnection( hs=self, host=self.config.redis_host, port=self.config.redis_port, password=self.config.redis.redis_password, reconnect=True, )