diff options
author | Ali Adil <aadil@tesora.com> | 2016-07-28 20:38:48 +0000 |
---|---|---|
committer | Ali Asgar Adil <aadil@tesora.com> | 2016-09-06 21:55:01 +0000 |
commit | 7cd6ca0c8eb0352c1588637e7ac47fb7882414e6 (patch) | |
tree | 8b8153c070b8f630ad5148aa798b9862d5b6e62c /trove/backup | |
parent | 4d1bea742925f341d48544643c6112437fb26fc4 (diff) | |
download | trove-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.py | 19 | ||||
-rw-r--r-- | trove/backup/service.py | 3 |
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): |