diff options
author | Iccha Sethi <iccha.sethi@rackspace.com> | 2014-09-02 16:47:48 -0500 |
---|---|---|
committer | iccha-sethi <iccha.sethi@rackspace.com> | 2014-09-16 13:34:49 +0000 |
commit | 00b2b61bd52af12f23df5ea36e46f4614be034e6 (patch) | |
tree | 950eaf5bff6f215478042970d3f506b15c41acad | |
parent | f53ba944688b7a6a0df7a37529bb8be2da4b29d0 (diff) | |
download | trove-00b2b61bd52af12f23df5ea36e46f4614be034e6.tar.gz |
Delete backup created during replication
During replication, backup of the master instance is
taken, and a slave is created using this backup.
This patch cleans up the backup which is created
during this process (irrespective of whether it was
successfully provisioned or not).
Closes-Bug: #1359354
Change-Id: Ic636ffeb0bbfb9e6cc02690efe812ffc11bda85c
-rw-r--r-- | trove/taskmanager/manager.py | 18 | ||||
-rwxr-xr-x | trove/taskmanager/models.py | 5 | ||||
-rw-r--r-- | trove/tests/api/replication.py | 7 |
3 files changed, 21 insertions, 9 deletions
diff --git a/trove/taskmanager/manager.py b/trove/taskmanager/manager.py index e8827d37..4e299ee7 100644 --- a/trove/taskmanager/manager.py +++ b/trove/taskmanager/manager.py @@ -14,10 +14,11 @@ # under the License. from trove.common.context import TroveContext -import trove.extensions.mgmt.instances.models as mgmtmodels +from trove.backup.models import Backup import trove.common.cfg as cfg from trove.common import exception from trove.common import strategy +import trove.extensions.mgmt.instances.models as mgmtmodels from trove.openstack.common import log as logging from trove.openstack.common import importutils from trove.openstack.common import periodic_task @@ -93,12 +94,15 @@ class Manager(periodic_task.PeriodicTasks): snapshot = instance_tasks.get_replication_master_snapshot(context, slave_of_id) - instance_tasks.create_instance(flavor, image_id, databases, users, - datastore_manager, packages, - volume_size, - snapshot['dataset']['snapshot_id'], - availability_zone, root_password, - nics, overrides, None) + try: + instance_tasks.create_instance(flavor, image_id, databases, users, + datastore_manager, packages, + volume_size, + snapshot['dataset']['snapshot_id'], + availability_zone, root_password, + nics, overrides, None) + finally: + Backup.delete(context, snapshot['dataset']['snapshot_id']) instance_tasks.attach_replication_slave(snapshot) diff --git a/trove/taskmanager/models.py b/trove/taskmanager/models.py index bd524fc5..d9934698 100755 --- a/trove/taskmanager/models.py +++ b/trove/taskmanager/models.py @@ -22,6 +22,7 @@ from eventlet import greenthread from novaclient import exceptions as nova_exceptions from trove.backup import models as bkup_models +from trove.backup.models import Backup from trove.backup.models import BackupState from trove.backup.models import DBBackup from trove.cluster.models import Cluster @@ -357,7 +358,11 @@ class FreshInstanceTasks(FreshInstance, NotifyMixin, ConfigurationMixin): "for new replica %(replica)s.") % {'source': slave_of_id, 'replica': self.id}) err = inst_models.InstanceTasks.BUILDING_ERROR_SLAVE + Backup.delete(context, snapshot_info['id']) self._log_and_raise(e, msg, err) + except Exception: + Backup.delete(context, snapshot_info['id']) + raise def report_root_enabled(self): mysql_models.RootHistory.create(self.context, self.id, 'root') diff --git a/trove/tests/api/replication.py b/trove/tests/api/replication.py index 05a76c35..0c1d1224 100644 --- a/trove/tests/api/replication.py +++ b/trove/tests/api/replication.py @@ -90,8 +90,6 @@ class WaitForCreateSlaveToFinish(object): return True else: assert_true(instance.status in ['BUILD', 'BACKUP']) - # if instance_info.volume is not None: - # assert_equal(instance.volume.get('used', None), None) return False poll_until(result_is_active) @@ -115,6 +113,11 @@ class VerifySlave(object): def test_correctly_started_replication(self): poll_until(slave_is_running()) + @test(runs_after=[test_correctly_started_replication]) + def test_backup_deleted(self): + backup = instance_info.dbaas.instances.backups(instance_info.id) + assert_equal(len(backup), 0) + @test(depends_on=[test_correctly_started_replication]) def test_create_db_on_master(self): databases = [{'name': slave_instance.replicated_db}] |