Exemplo n.º 1
0
    def test_delete_backup(self, delete_backup_mock):
        headers = {
            'Content-Type': 'application/json',
            'Accept': 'application/json'
        }

        conn = httplib.HTTPConnection('localhost:8080')

        the_uuid = uuid.uuid4()

        url = '/v1/management/default_tenant/default_table/backups/{}'.format(
            the_uuid.hex)

        delete_backup_mock.return_value = models.BackupMeta(
            the_uuid, 'the_backup', 'default_table',
            models.BackupMeta.BACKUP_STATUS_CREATING, 'location')

        conn.request("DELETE", url, headers=headers)

        response = conn.getresponse()

        json_response = response.read()
        response_model = json.loads(json_response)
        self.assertEqual('default_table', response_model['table_name'])
        self.assertEqual('the_backup', response_model['backup_name'])
Exemplo n.º 2
0
    def list(self,
             context,
             table_name,
             exclusive_start_backup_id=None,
             limit=None):

        query_builder = collections.deque()
        query_builder.append(
            "SELECT * FROM {} WHERE tenant='{}' AND table_name='{}'".format(
                self.SYSTEM_TABLE_BACKUP_INFO, context.tenant, table_name))

        if exclusive_start_backup_id:
            query_builder.append(" AND id > {}".format(
                self.__enc.cql_encode_all_types(exclusive_start_backup_id)))

        if limit:
            query_builder.append(" LIMIT {}".format(limit))

        rows = self.__cluster_handler.execute_query("".join(query_builder),
                                                    consistent=True)

        return [
            models.BackupMeta(
                **{name: row[name]
                   for name in self.__get_field_list}) for row in rows
        ]
Exemplo n.º 3
0
    def get(self, context, table_name, backup_id):
        LOG.debug("Getting backup '{}' for table '{}'".format(
            backup_id, table_name))
        query_builder = collections.deque()
        query_builder.append("SELECT * FROM")
        query_builder.append(
            " {} WHERE tenant='{}' AND table_name='{}' AND id={}".format(
                self.SYSTEM_TABLE_BACKUP_INFO, context.tenant, table_name,
                backup_id))

        result = self.__cluster_handler.execute_query("".join(query_builder),
                                                      consistent=True)

        if not result:
            raise exception.BackupNotExists(
                "Backup '{}' for table '{}' does not exist".format(
                    backup_id, table_name))

        backup_info_attrs = {
            name: result[0].get(name)
            for name in self.__get_field_list
        }

        LOG.debug("Got backup '{}' for table '{}'".format(
            backup_id, table_name))
        return models.BackupMeta(**backup_info_attrs)
Exemplo n.º 4
0
    def test_create_backup(self, create_backup_mock):
        headers = {
            'Content-Type': 'application/json',
            'Accept': 'application/json'
        }

        conn = httplib.HTTPConnection('localhost:8080')
        url = '/v1/management/default_tenant/default_table/backups'
        body = """
            {
                "backup_name": "the_backup",
                "strategy": {}
            }
        """

        the_uuid = uuid.uuid4()

        create_backup_mock.return_value = models.BackupMeta(
            the_uuid, 'the_backup', 'default_table',
            models.BackupMeta.BACKUP_STATUS_CREATING, 'location')

        conn.request("POST", url, headers=headers, body=body)

        response = conn.getresponse()

        json_response = response.read()
        response_model = json.loads(json_response)
        self.assertEqual('default_table', response_model['table_name'])
        self.assertEqual('the_backup', response_model['backup_name'])
Exemplo n.º 5
0
    def create_backup(self, context, table_name, backup_name, strategy):
        """
        Create backup

        :param context: current request context
        :param table_name: String, name of the table to backup
        :param backup_name: String, name of the backup to create
        :param strategy: Dict, strategy used for the backup

        :returns:

        :raises: BackendInteractionException
        """

        backup_meta = models.BackupMeta(
            id=uuid.uuid4(),
            name=backup_name,
            table_name=table_name,
            status=models.BackupMeta.BACKUP_STATUS_CREATING,
            location='location',
            strategy=strategy,
            start_date_time=timeutils.utcnow())

        return self.backup_info_repo.save(context, backup_meta)