summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIccha Sethi <iccha.sethi@rackspace.com>2014-09-02 16:47:48 -0500
committericcha-sethi <iccha.sethi@rackspace.com>2014-09-16 13:34:49 +0000
commit00b2b61bd52af12f23df5ea36e46f4614be034e6 (patch)
tree950eaf5bff6f215478042970d3f506b15c41acad
parentf53ba944688b7a6a0df7a37529bb8be2da4b29d0 (diff)
downloadtrove-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.py18
-rwxr-xr-xtrove/taskmanager/models.py5
-rw-r--r--trove/tests/api/replication.py7
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}]