summaryrefslogtreecommitdiff
path: root/trove/backup
diff options
context:
space:
mode:
authorAli Adil <aadil@tesora.com>2016-07-28 20:38:48 +0000
committerAli Asgar Adil <aadil@tesora.com>2016-09-06 21:55:01 +0000
commit7cd6ca0c8eb0352c1588637e7ac47fb7882414e6 (patch)
tree8b8153c070b8f630ad5148aa798b9862d5b6e62c /trove/backup
parent4d1bea742925f341d48544643c6112437fb26fc4 (diff)
downloadtrove-7cd6ca0c8eb0352c1588637e7ac47fb7882414e6.tar.gz
Add --incremental flag to backup-create
Add --incremental flag to backup-create and set the default value to False. When the flag is passed it will create a backup based on the last good known full/incremental backup. If there is no previous backup a full backup will be created. Change-Id: I6fcd60f6068dfb0145fa64248a2d8b3fdfc1004d Depends-On: I96498180890b8b1692b1bac3b19988532f6eb077 Partial-Bug: #1607429
Diffstat (limited to 'trove/backup')
-rw-r--r--trove/backup/models.py19
-rw-r--r--trove/backup/service.py3
2 files changed, 18 insertions, 4 deletions
diff --git a/trove/backup/models.py b/trove/backup/models.py
index 3a248bfb..49878f9c 100644
--- a/trove/backup/models.py
+++ b/trove/backup/models.py
@@ -48,7 +48,8 @@ class Backup(object):
operation=operation, datastore=instance.datastore.name)
@classmethod
- def create(cls, context, instance, name, description=None, parent_id=None):
+ def create(cls, context, instance, name, description=None,
+ parent_id=None, incremental=False):
"""
create db record for Backup
:param cls:
@@ -56,6 +57,9 @@ class Backup(object):
:param instance:
:param name:
:param description:
+ :param parent_id:
+ :param incremental: flag to indicate incremental backup
+ based on previous backup
:return:
"""
@@ -76,6 +80,7 @@ class Backup(object):
ds = instance_model.datastore
ds_version = instance_model.datastore_version
parent = None
+ last_backup_id = None
if parent_id:
# Look up the parent info or fail early if not found or if
# the user does not have access to the parent.
@@ -84,13 +89,22 @@ class Backup(object):
'location': _parent.location,
'checksum': _parent.checksum,
}
+ elif incremental:
+ _parent = Backup.get_last_completed(context, instance_id)
+ if _parent:
+ parent = {
+ 'location': _parent.location,
+ 'checksum': _parent.checksum
+ }
+ last_backup_id = _parent.id
try:
db_info = DBBackup.create(name=name,
description=description,
tenant_id=context.tenant,
state=BackupState.NEW,
instance_id=instance_id,
- parent_id=parent_id,
+ parent_id=parent_id or
+ last_backup_id,
datastore_version_id=ds_version.id,
deleted=False)
except exception.InvalidModelError as ex:
@@ -110,7 +124,6 @@ class Backup(object):
}
api.API(context).create_backup(backup_info, instance_id)
return db_info
-
return run_with_quotas(context.tenant,
{'backups': 1},
_create_resources)
diff --git a/trove/backup/service.py b/trove/backup/service.py
index 6ebe8c95..56a60c71 100644
--- a/trove/backup/service.py
+++ b/trove/backup/service.py
@@ -64,12 +64,13 @@ class BackupController(wsgi.Controller):
name = data['name']
desc = data.get('description')
parent = data.get('parent_id')
+ incremental = data.get('incremental')
context.notification = notification.DBaaSBackupCreate(context,
request=req)
with StartNotification(context, name=name, instance_id=instance,
description=desc, parent_id=parent):
backup = Backup.create(context, instance, name, desc,
- parent_id=parent)
+ parent_id=parent, incremental=incremental)
return wsgi.Result(views.BackupView(backup).data(), 202)
def delete(self, req, tenant_id, id):