Ejemplo n.º 1
0
    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,
        )
Ejemplo n.º 2
0
    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)
Ejemplo n.º 3
0
    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,
        )