Schema and backup conductor
diff --git a/staffeln/objects/queue.py b/staffeln/objects/queue.py
index 0e81064..b6f9b76 100644
--- a/staffeln/objects/queue.py
+++ b/staffeln/objects/queue.py
@@ -10,13 +10,12 @@
dbapi = db_api.get_instance()
- feilds = {
+ fields = {
'id': sfeild.IntegerField(),
'backup_id': sfeild.StringField(),
'volume_id': sfeild.UUIDField(),
'instance_id': sfeild.StringField(),
- 'backup_status': sfeild.IntegerField(),
- 'executed_at': sfeild.DateTimeField()
+ 'backup_status': sfeild.IntegerField()
}
@base.remotable_classmethod
@@ -24,6 +23,22 @@
db_queue = cls.dbapi.get_queue_list(context, filters=filters)
return [cls._from_db_object(cls(context), obj) for obj in db_queue]
+ @base.remotable_classmethod
+ def get_by_backup_id(cls, context, backup_id):
+ """Find a backup based on backup_id
+ :param context: Security context. NOTE: This should only
+ be used internally by the indirection_api.
+ Unfortunately, RPC requires context as the first
+ argument, even though we don't use it.
+ A context should be set when instantiating the
+ object, e.g.: Queue(context)
+ :param backup_id: the backup id of volume in queue.
+ :returns: a :class:`Queue` object.
+ """
+ db_queue = cls.dbapi.get_queue_by_backup_id(context, backup_id)
+ queue = cls._from_db_object(cls(context), db_queue)
+ return queue
+
@base.remotable
def create(self):
values = self.obj_get_changes()
@@ -40,5 +55,5 @@
@base.remotable
def refresh(self):
- current = self.get_by_uuid(uuid=self.uuid)
+ current = self.get_by_backup_id(backup_id=self.backup_id)
self.obj_refresh(current)
diff --git a/staffeln/objects/volume.py b/staffeln/objects/volume.py
index 80a9663..8952164 100644
--- a/staffeln/objects/volume.py
+++ b/staffeln/objects/volume.py
@@ -14,18 +14,19 @@
'id': sfeild.IntegerField(),
'backup_id': sfeild.StringField(),
'instance_id': sfeild.StringField(),
- 'volume_id': sfeild.UUIDField()
+ 'volume_id': sfeild.UUIDField(),
+ 'backup_completed': sfeild.IntegerField()
}
- @base.remotable
- def list(cls, filters=None):
+ @base.remotable_classmethod
+ def list(cls, context, filters=None):
"""Return a list of :class:`Backup` objects.
:param filters: dict mapping the filter to a value.
"""
- db_backups = cls.dbapi.get_backup_list(filters=filters)
+ db_backups = cls.dbapi.get_backup_list(context, filters=filters)
- return [cls._from_db_object(cls, obj) for obj in db_backups]
+ return [cls._from_db_object(cls(context), obj) for obj in db_backups]
@base.remotable
def create(self):
@@ -55,5 +56,5 @@
checks for updated attributes. Updates are applied from
the loaded backup column by column, if there are any updates.
"""
- current = self.get_by_uuid(uuid=self.uuid)
+ current = self.get_by_uuid(backup_id=self.backup_id)
self.obj_refresh(current)