Beispiel #1
0
    def check_status(self, instance=None):
        with self.redis(instance=instance) as client:
            try:
                ok = client.ping()
            except Exception as e:
                raise ConnectionError(
                    'Error connection to infra {}: {}'.format(
                        self.databaseinfra, str(e)))

            if not ok:
                raise ConnectionError(
                    'Invalid status for ping command to infra {}'.format(
                        self.databaseinfra))

        return True
Beispiel #2
0
 def redis(self, instance=None, database=None):
     try:
         client = self.__redis_client__(instance)
         return_value = client
         yield return_value
     except Exception as e:
         raise ConnectionError('Error connecting to infra {}: {}'.format(
             self.databaseinfra, str(e)))
Beispiel #3
0
 def check_instance_is_master(self, instance):
     with self.redis(instance=instance) as client:
         try:
             info = client.info()
         except Exception as e:
             raise ConnectionError(
                 'Error connection to infra {}: {}'.format(
                     self.databaseinfra, str(e)))
         else:
             return info['role'] == 'master'
Beispiel #4
0
    def check_instance_is_master(self, instance):
        if instance.instance_type == Instance.REDIS_SENTINEL:
            return False

        with self.redis(instance=instance) as client:
            try:
                info = client.info()
                return info['role'] != 'slave'
            except Exception as e:
                raise ConnectionError(
                    'Error connection to infra {}: {}'.format(
                        self.databaseinfra, str(e)))
Beispiel #5
0
 def mysqldb(self, instance=None, database=None):
     client = None
     try:
         yield self.__mysql_client__(instance)
     except _mysql_exceptions.OperationalError as e:
         if e.args[0] == ER_ACCESS_DENIED_ERROR:
             raise AuthenticationError(e.args[1])
         elif e.args[0] == ER_CAN_NOT_CONNECT:
             raise ConnectionError(e.args[1])
         elif e.args[0] == LOST_CONNECTION:
             raise ConnectionError(e.args[1])
         else:
             raise GenericDriverError(e.args)
     finally:
         try:
             if client:
                 LOG.debug(
                     'Disconnecting mysql databaseinfra %s', self.databaseinfra)
                 client.close()
         except:
             LOG.warn('Error disconnecting from databaseinfra %s. Ignoring...',
                      self.databaseinfra, exc_info=True)
Beispiel #6
0
    def list_databases(self, instance=None):
        dbs_names = []
        with self.redis(instance=instance) as client:
            try:
                keyspace = client.info('keyspace')
                if len(keyspace) == 0:
                    dbs_names.append('db0')
                else:
                    for db in keyspace:
                        dbs_names.append(db)
            except Exception as e:
                raise ConnectionError(
                    'Error connection to infra {}: {}'.format(
                        self.databaseinfra, str(e)))

        return dbs_names
Beispiel #7
0
    def get_slave_for(self, instance):
        with self.redis(instance=instance) as client:
            try:
                info = client.info()
            except Exception as e:
                raise ConnectionError(
                    'Error connection to infra {}: {}'.format(
                        self.databaseinfra, str(e)))

            if info['role'] != 'master':
                return

            address = info['slave0']['ip']
            port = info['slave0']['port']

            return self.databaseinfra.instances.filter(
                hostname__address=address, port=port).first()