Kaynağa Gözat

Fix reservation management on minion pool errors

Fixes an edge-case where if a reservation cannot be found for an existing
replica, and the minion pool set to it is also in an invalid state, a new
reservation would be created but never saved to DB because of the minion pool
error. This patch makes sure that the minion pool validation is done before
the reservation checks when creating replica executions.
Daniel Vincze 1 yıl önce
ebeveyn
işleme
cc228fcb5e
1 değiştirilmiş dosya ile 2 ekleme ve 2 silme
  1. 2 2
      coriolis/conductor/rpc/server.py

+ 2 - 2
coriolis/conductor/rpc/server.py

@@ -911,9 +911,9 @@ class ConductorServerEndpoint(object):
     @replica_synchronized
     def execute_replica_tasks(self, ctxt, replica_id, shutdown_instances):
         replica = self._get_replica(ctxt, replica_id, include_task_info=True)
-        self._check_reservation_for_replica(replica)
         self._check_replica_running_executions(ctxt, replica)
         self._check_minion_pools_for_action(ctxt, replica)
+        self._check_reservation_for_replica(replica)
 
         execution = models.TasksExecution()
         execution.id = str(uuid.uuid4())
@@ -1396,7 +1396,6 @@ class ConductorServerEndpoint(object):
             instance_osmorphing_minion_pool_mappings=None,
             skip_os_morphing=False, user_scripts=None):
         replica = self._get_replica(ctxt, replica_id, include_task_info=True)
-        self._check_reservation_for_replica(replica)
         self._check_replica_running_executions(ctxt, replica)
         self._check_valid_replica_tasks_execution(replica, force)
         user_scripts = user_scripts or replica.user_scripts
@@ -1445,6 +1444,7 @@ class ConductorServerEndpoint(object):
             migration.instance_osmorphing_minion_pool_mappings.update(
                 instance_osmorphing_minion_pool_mappings)
         self._check_minion_pools_for_action(ctxt, migration)
+        self._check_reservation_for_replica(replica)
 
         execution = models.TasksExecution()
         migration.executions = [execution]