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)
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)
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)
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)
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)
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')
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
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)
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)
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)
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