summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2014-09-23 07:43:39 +0000
committerGerrit Code Review <review@openstack.org>2014-09-23 07:43:39 +0000
commitd511338da570fc921bb0bd0aaedb52cd78af6682 (patch)
tree7f86d66b94b15536af539a2a044b63210579b0e7
parente24bd6ba1b35af80a4a386c8b46ae2d5e1a2d514 (diff)
parent00b2b61bd52af12f23df5ea36e46f4614be034e6 (diff)
downloadtrove-d511338da570fc921bb0bd0aaedb52cd78af6682.tar.gz
Merge "Delete backup created during replication"
-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 e60a29c7..fd2a7657 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_slave_is_read_only(self):
cmd = "mysql -BNq -e \\\'select @@read_only\\\'"