def start_redis_servers(servers, db=None, master=None):
    """Creates redis instances using specified locations from the settings.

    Returns list of Popen objects
    """
    processes = []
    devnull = open(os.devnull, "w")
    master_connection_kwargs = master and parse_connection_kwargs(master, db=db, password=REDIS_PASSWORD)
    for i, server in enumerate(servers):
        connection_kwargs = parse_connection_kwargs(
            server, db=db, password=REDIS_PASSWORD  # will be overridden if specified in `server`
        )
        parameters = dict(port=connection_kwargs.get("port", 0), requirepass=connection_kwargs["password"])
        is_socket = server.startswith("unix://") or server.startswith("/")
        if is_socket:
            parameters.update(port=0, unixsocket="/tmp/redis{0}.sock".format(i), unixsocketperm=755)
        if master and not connection_kwargs == master_connection_kwargs:
            parameters.update(
                masterauth=master_connection_kwargs["password"],
                slaveof="{host} {port}".format(
                    host=master_connection_kwargs["host"], port=master_connection_kwargs["port"]
                ),
            )

        args = ["./redis/src/redis-server"] + [
            "--{parameter} {value}".format(parameter=parameter, value=value) for parameter, value in parameters.items()
        ]
        p = subprocess.Popen(args, stdout=devnull)
        processes.append(p)

    return processes
Пример #2
0
    def create_client(self, server):
        kwargs = parse_connection_kwargs(
            server,
            db=self.db,
            password=self.password,
            socket_timeout=self.socket_timeout,
            socket_connect_timeout=self.socket_connect_timeout,
        )

        # Hack to make this work with SSL properly
        client_kwargs = kwargs.copy()
        if 'connection_class' in client_kwargs:
            client_kwargs['ssl'] = True
            del client_kwargs['connection_class']
        client = redis.Redis(**client_kwargs)

        kwargs.update(
            parser_class=self.parser_class,
            connection_pool_class=self.connection_pool_class,
            connection_pool_class_kwargs=self.connection_pool_class_kwargs,
        )
        if 'connection_class' in kwargs and not 'connection_class' in kwargs[
                'connection_pool_class_kwargs']:
            kwargs['connection_pool_class_kwargs'][
                'connection_class'] = kwargs['connection_class']
        connection_pool = pool.get_connection_pool(client, **kwargs)
        client.connection_pool = connection_pool
        return client
Пример #3
0
def start_redis_servers(servers, db=None, master=None):
    """Creates redis instances using specified locations from the settings.

    Returns list of Popen objects
    """
    processes = []
    devnull = open(os.devnull, 'w')
    master_connection_kwargs = master and parse_connection_kwargs(
        master,
        db=db,
        password=REDIS_PASSWORD
    )
    for i, server in enumerate(servers):
        connection_kwargs = parse_connection_kwargs(
            server,
            db=db,
            password=REDIS_PASSWORD,  # will be overridden if specified in `server`
        )
        parameters = dict(
            port=connection_kwargs.get('port', 0),
            requirepass=connection_kwargs['password'],
        )
        is_socket = server.startswith('unix://') or server.startswith('/')
        if is_socket:
            parameters.update(
                port=0,
                unixsocket='/tmp/redis{0}.sock'.format(i),
                unixsocketperm=755,
            )
        if master and not connection_kwargs == master_connection_kwargs:
            parameters.update(
                masterauth=master_connection_kwargs['password'],
                slaveof="{host} {port}".format(
                    host=master_connection_kwargs['host'],
                    port=master_connection_kwargs['port'],
                )
            )

        args = ['./redis/src/redis-server'] + [
            "--{parameter} {value}".format(parameter=parameter, value=value)
            for parameter, value in parameters.items()
        ]
        p = subprocess.Popen(args, stdout=devnull)
        processes.append(p)

    return processes
Пример #4
0
    def get_master_client(self):
        """
        Get the write server:port of the master cache
        """
        cache = self.options.get('MASTER_CACHE', None)
        if cache is None:
            return next(iter(self.client_list))

        kwargs = parse_connection_kwargs(cache, db=self.db)
        return self.clients[(
            kwargs['host'],
            kwargs['port'],
            kwargs['db'],
            kwargs['unix_socket_path'],
        )]
Пример #5
0
    def get_master_client(self):
        """
        Get the write server:port of the master cache
        """
        cache = self.options.get('MASTER_CACHE', None)
        if cache is None:
            return next(iter(self.client_list))

        kwargs = parse_connection_kwargs(cache, db=self.db)
        return self.clients[(
            kwargs['host'],
            kwargs['port'],
            kwargs['db'],
            kwargs['unix_socket_path'],
        )]
Пример #6
0
 def create_client(self, server):
     kwargs = parse_connection_kwargs(
         server,
         db=self.db,
         password=self.password,
         socket_timeout=self.socket_timeout,
         socket_connect_timeout=self.socket_connect_timeout,
     )
     client = redis.Redis(**kwargs)
     kwargs.update(
         parser_class=self.parser_class,
         connection_pool_class=self.connection_pool_class,
         connection_pool_class_kwargs=self.connection_pool_class_kwargs,
     )
     connection_pool = pool.get_connection_pool(client, **kwargs)
     client.connection_pool = connection_pool
     return client
Пример #7
0
 def create_client(self, server):
     kwargs = parse_connection_kwargs(
         server,
         db=self.db,
         password=self.password,
         socket_timeout=self.socket_timeout,
         socket_connect_timeout=self.socket_connect_timeout,
     )
     client = redis.Redis(**kwargs)
     kwargs.update(
         parser_class=self.parser_class,
         connection_pool_class=self.connection_pool_class,
         connection_pool_class_kwargs=self.connection_pool_class_kwargs,
     )
     connection_pool = pool.get_connection_pool(client, **kwargs)
     client.connection_pool = connection_pool
     return client
Пример #8
0
    def create_client(self, server):
        kwargs = parse_connection_kwargs(
            server,
            db=self.db,
            password=self.password,
            socket_timeout=self.socket_timeout,
            socket_connect_timeout=self.socket_connect_timeout,
        )

        # remove socket-related connection arguments
        if kwargs.get('ssl', False):
            del kwargs['socket_timeout']
            del kwargs['socket_connect_timeout']
            del kwargs['unix_socket_path']

        client = redis.Redis(**kwargs)
        kwargs.update(
            parser_class=self.parser_class,
            connection_pool_class=self.connection_pool_class,
            connection_pool_class_kwargs=self.connection_pool_class_kwargs,
        )
        connection_pool = pool.get_connection_pool(client, **kwargs)
        client.connection_pool = connection_pool
        return client