Ejemplo n.º 1
0
 def test_register_on_dbmonitor_when_finish(self, register_dbmonitor_mock):
     make_instance_snapshot_backup(
         instance=self.instance,
         error={},
         group=self.group,
     )
     self.assertTrue(register_dbmonitor_mock.called)
Ejemplo n.º 2
0
 def test_params(self, create_mock):
     make_instance_snapshot_backup(
         instance=self.instance,
         error={},
         group=self.group,
     )
     create_mock.assert_called_with(self.instance, self.group, self.volume)
Ejemplo n.º 3
0
 def test_binlog_save_when_is_mysql_single(self, mysql_binlog_save_mock):
     make_instance_snapshot_backup(
         instance=self.instance,
         error={},
         group=self.group,
     )
     self.assertTrue(mysql_binlog_save_mock.called)
Ejemplo n.º 4
0
 def test_call_second_remote_command_if_backup_path_exist(
         self, exec_remote_command_mock):
     database = self.infra.databases.first()
     database.backup_path = 'fake/path'
     database.save()
     make_instance_snapshot_backup(
         instance=self.instance,
         error={},
         group=self.group,
     )
     self.assertEqual(exec_remote_command_mock.call_count, 2)
Ejemplo n.º 5
0
 def test_not_call_binlog_save_when_not_mysql(self, mysql_binlog_save_mock):
     self.replication_topology.name = 'Redis Sentinel 4.0',
     self.replication_topology.class_path = (
         'drivers.replication_topologies.redis.RedisSentinel')
     self.replication_topology.save()
     make_instance_snapshot_backup(
         instance=self.instance,
         error={},
         group=self.group,
     )
     self.assertFalse(mysql_binlog_save_mock.called)
Ejemplo n.º 6
0
 def test_binlog_save_when_is_mysql_percona(self, mysql_binlog_save_mock):
     self.replication_topology.name = 'MySQL Percona FoxHA 5.7.25',
     self.replication_topology.class_path = (
         'drivers.replication_topologies.mysql_percona.MySQLPerconaFoxHA')
     self.replication_topology.save()
     make_instance_snapshot_backup(
         instance=self.instance,
         error={},
         group=self.group,
     )
     self.assertTrue(mysql_binlog_save_mock.called)
    def do(self):
        from backup.tasks import make_instance_snapshot_backup
        from backup.models import BackupGroup
        if (self.database_migrate
                and self.database_migrate.host_migrate_snapshot):
            snapshot = self.database_migrate.host_migrate_snapshot
        else:
            group = BackupGroup()
            group.save()
            snapshot = make_instance_snapshot_backup(
                self.instance, {}, group, provider_class=self.provider_class)

            if not snapshot:
                raise Exception('Backup was unsuccessful in {}'.format(
                    self.instance))

            snapshot.is_automatic = False
            snapshot.save()
        if self.database_migrate:
            host_migrate = self.host_migrate
            host_migrate.snapshot = snapshot
            host_migrate.save()
        else:
            self.step_manager.snapshot = snapshot
            self.step_manager.save()

        if snapshot.has_warning:
            raise Exception('Backup was warning')
    def do(self):
        from backup.tasks import make_instance_snapshot_backup
        from backup.models import BackupGroup
        if self.database_migrate and self.database_migrate.host_migrate_snapshot:
            snapshot = self.database_migrate.host_migrate_snapshot
        else:
            group = BackupGroup()
            group.save()
            snapshot = make_instance_snapshot_backup(
                self.instance,
                {},
                group,
                provider_class=VolumeProviderBaseMigrate
            )

            if not snapshot:
                raise Exception('Backup was unsuccessful in {}'.format(self.instance))

            snapshot.is_automatic = False
            snapshot.save()
        if self.database_migrate:
            host_migrate = self.host_migrate
            host_migrate.snapshot = snapshot
            host_migrate.save()
        else:
            self.step_manager.snapshot = snapshot
            self.step_manager.save()

        if snapshot.has_warning:
            raise Exception('Backup was warning')
Ejemplo n.º 9
0
    def do(self, workflow_dict):
        try:
            group = BackupGroup()
            group.save()

            for instance in workflow_dict['instances']:
                error = {}
                snapshot = make_instance_snapshot_backup(instance=instance,
                                                         error=error,
                                                         group=group)

                if snapshot and snapshot.was_successful:
                    msg = "Backup for %s was successful" % (str(instance))
                    LOG.info(msg)
                elif snapshot and snapshot.has_warning:
                    msg = "Backup for %s has warning" % (str(instance))
                    LOG.info(msg)
                else:
                    msg = "Backup for %s was unsuccessful. Error: %s" % (
                        str(instance), error['errormsg'])
                    LOG.error(msg)
                    raise Exception(msg)

            return True

        except Exception:
            traceback = full_stack()

            workflow_dict['exceptions']['error_codes'].append(DBAAS_0023)
            workflow_dict['exceptions']['traceback'].append(traceback)

            return False
Ejemplo n.º 10
0
 def test_get_snapshot_size(self, exec_remote_command_mock):
     snapshot = make_instance_snapshot_backup(
         instance=self.instance,
         error={},
         group=self.group,
     )
     self.assertTrue(exec_remote_command_mock.called)
     self.assertEqual(snapshot.size, 978)
 def test_get_snapshot_size(self, run_script_mock):
     snapshot = make_instance_snapshot_backup(
         instance=self.instance,
         error={},
         group=self.group,
     )
     self.assertTrue(run_script_mock.called)
     self.assertEqual(snapshot.size, 978)
 def test_snapshot_size_0_when_got_a_error_on_command(
         self, run_script_mock):
     snapshot = make_instance_snapshot_backup(
         instance=self.instance,
         error={},
         group=self.group,
     )
     self.assertTrue(run_script_mock.called)
     self.assertEqual(snapshot.size, 0)
Ejemplo n.º 13
0
 def test_snapshot_warning_when_fail_to_lock(self, take_snapshot_mock,
                                             done_mock):
     snapshot = make_instance_snapshot_backup(
         instance=self.instance,
         error={},
         group=self.group,
     )
     self.assertEqual(snapshot.status, Snapshot.WARNING)
     self.assertTrue(take_snapshot_mock.called)
     self.assertTrue(done_mock.called)
Ejemplo n.º 14
0
 def test_snapshot_with_warning_when_not_in_backup_hour_list(
         self, take_snapshot_mock, done_mock):
     mommy.make('Snapshot',
                status=Snapshot.WARNING,
                instance=self.instance,
                end_at=datetime.now())
     snapshot = make_instance_snapshot_backup(instance=self.instance,
                                              error={},
                                              group=self.group,
                                              current_hour=15)
     self.assertEqual(snapshot.status, Snapshot.WARNING)
     self.assertFalse(take_snapshot_mock.called)
     self.assertFalse(done_mock.called)
Ejemplo n.º 15
0
 def test_snapshot_with_error_when_current_hour_in_backup_hour_list(
         self, take_snapshot_mock, done_mock):
     mommy.make('Snapshot',
                status=Snapshot.WARNING,
                instance=self.instance,
                end_at=datetime.now())
     snapshot = make_instance_snapshot_backup(
         instance=self.instance,
         error={},
         group=self.group,
         current_hour=FAKE_MAKE_DATABASE_BACKUP_HOUR[1])
     self.assertEqual(snapshot.status, Snapshot.ERROR)
     self.assertFalse(take_snapshot_mock.called)
     self.assertFalse(done_mock.called)
    def do(self, workflow_dict):
        try:

            for instance in workflow_dict['instances']:

                error = {}
                if make_instance_snapshot_backup(instance=instance, error=error):
                    msg = "Backup for %s was successful" % (str(instance))
                    LOG.info(msg)
                else:
                    msg = "Backup for %s was unsuccessful. Error: %s" % (str(instance), error['errormsg'])
                    LOG.error(msg)
                    raise Exception(msg)

            return True

        except Exception:
            traceback = full_stack()

            workflow_dict['exceptions']['error_codes'].append(DBAAS_0023)
            workflow_dict['exceptions']['traceback'].append(traceback)

            return False