Merge pull request #8 from vexxhost/safe-cycle

Add volumes only in available and in-use status to the task queue
diff --git a/staffeln/conductor/backup.py b/staffeln/conductor/backup.py
index a37235b..69c48f4 100755
--- a/staffeln/conductor/backup.py
+++ b/staffeln/conductor/backup.py
@@ -2,6 +2,7 @@
 import collections

 from staffeln.common import constants

 

+from openstack import exceptions

 from openstack.block_storage.v2 import backup

 from oslo_log import log

 from staffeln.common import auth

@@ -12,7 +13,6 @@
 CONF = staffeln.conf.CONF

 LOG = log.getLogger(__name__)

 

-

 BackupMapping = collections.namedtuple(

     "BackupMapping", ["volume_id", "backup_id", "instance_id", "backup_completed"]

 )

@@ -68,6 +68,11 @@
 

         return metadata[CONF.conductor.backup_metadata_key].lower() == constants.BACKUP_ENABLED_KEY

 

+    # Backup the volumes in in-use and available status

+    def filter_volume(self, volume_id):

+        volume = conn.get_volume_by_id(volume_id)

+        return volume['status'] in ("available", "in-use")

+

     def check_instance_volumes(self):

         """Get the list of all the volumes from the project using openstacksdk

         Function first list all the servers in the project and get the volumes

@@ -84,6 +89,7 @@
                 server_id = server.id

                 volumes = server.attached_volumes

                 for volume in volumes:

+                    if not self.filter_volume(volume["id"]): continue

                     queues_map.append(

                         QueueMapping(

                             volume_id=volume["id"],

@@ -108,7 +114,6 @@
         volume_queue.backup_status = task.backup_status

         volume_queue.create()

 

-

     def volume_backup_initiate(self, queue):

         """Initiate the backup of the volume

         :params: queue: Provide the map of the volume that needs

@@ -118,13 +123,16 @@
         """

         backup_id = queue.backup_id

         if backup_id == "NULL":

-            volume_backup = conn.block_storage.create_backup(

-                volume_id=queue.volume_id, force=True

-            )

-

-            queue.backup_id = volume_backup.id

-            queue.backup_status = constants.BACKUP_WIP

-            queue.save()

+            try:

+                volume_backup = conn.block_storage.create_backup(

+                    volume_id=queue.volume_id, force=True

+                )

+                print(volume_backup)

+                queue.backup_id = volume_backup.id

+                queue.backup_status = constants.BACKUP_WIP

+                queue.save()

+            except exceptions as error:

+                print(error)

         else:

             pass

             # TODO(Alex): remove this task from the task list

@@ -175,7 +183,6 @@
                     # the new backup cycle

                     LOG.info("Waiting for backup of %s to be completed" % queue.volume_id)

 

-

     def _volume_backup(self, task):

         # matching_backups = [

         #     g for g in self.available_backups if g.backup_id == task.backup_id

diff --git a/staffeln/conductor/manager.py b/staffeln/conductor/manager.py
index fc00d6b..78869e0 100755
--- a/staffeln/conductor/manager.py
+++ b/staffeln/conductor/manager.py
@@ -30,7 +30,7 @@
         periodic_callables = [
             (self.backup_engine, (), {}),
         ]
-        periodic_worker = periodics.PeriodicWorker(periodic_callables)
+        periodic_worker = periodics.PeriodicWorker(periodic_callables, schedule_strategy="last_finished")
         periodic_thread = threading.Thread(target=periodic_worker.start)
         periodic_thread.daemon = True
         periodic_thread.start()
@@ -98,7 +98,7 @@
         periodic_callables = [
             (self.rotation_engine, (), {}),
         ]
-        periodic_worker = periodics.PeriodicWorker(periodic_callables)
+        periodic_worker = periodics.PeriodicWorker(periodic_callables, schedule_strategy="last_finished")
         periodic_thread = threading.Thread(target=periodic_worker.start)
         periodic_thread.daemon = True
         periodic_thread.start()
diff --git a/staffeln/conf/conductor.py b/staffeln/conf/conductor.py
index a4ea907..7d96579 100755
--- a/staffeln/conf/conductor.py
+++ b/staffeln/conf/conductor.py
@@ -17,7 +17,7 @@
     ),
     cfg.IntOpt(
         "backup_period",
-        default=10,
+        default=60,
         min=1,
         help=_("The time of bakup period, the unit is one minute."),
     ),