Bladeren bron

Only load libraries of required plugin during task execution.

This patch makes the `coriolis.tasks.TaskRunner` class only request
libraries be loaded for providers (source or target) which are required
instead of always including both sets.

There is a future risk that for bilateral tasks the source plugin's
directories shadow the destination plugin's, but current bilateral
tasks (i.e. only `REPLICATE_DISKS`) strictly run code from the source
plugin while only requiring a connection to the destination platform's
disk copy minion, so this should not come into effect.
Nashwan Azhari 4 jaren geleden
bovenliggende
commit
865ddd5510
1 gewijzigde bestanden met toevoegingen van 24 en 17 verwijderingen
  1. 24 17
      coriolis/tasks/base.py

+ 24 - 17
coriolis/tasks/base.py

@@ -32,23 +32,30 @@ class TaskRunner(with_metaclass(abc.ABCMeta)):
         for both the source and destination providers. """
         required_libs = []
 
-        origin_provider = providers_factory.get_provider(
-            origin["type"], constants.PROVIDER_TYPE_SETUP_LIBS, event_handler,
-            raise_if_not_found=False)
-        if origin_provider:
-            conn_info = get_connection_info(ctxt, origin)
-            required_libs.extend(
-                origin_provider.get_shared_library_directories(
-                    ctxt, conn_info))
-
-        destination_provider = providers_factory.get_provider(
-            destination["type"], constants.PROVIDER_TYPE_SETUP_LIBS,
-            event_handler, raise_if_not_found=False)
-        if destination_provider:
-            conn_info = get_connection_info(ctxt, destination)
-            required_libs.extend(
-                destination_provider.get_shared_library_directories(
-                    ctxt, conn_info))
+        platform = self.get_required_platform()
+        if platform in [
+                constants.TASK_PLATFORM_SOURCE,
+                constants.TASK_PLATFORM_BILATERAL]:
+            origin_provider = providers_factory.get_provider(
+                origin["type"], constants.PROVIDER_TYPE_SETUP_LIBS,
+                event_handler, raise_if_not_found=False)
+            if origin_provider:
+                conn_info = get_connection_info(ctxt, origin)
+                required_libs.extend(
+                    origin_provider.get_shared_library_directories(
+                        ctxt, conn_info))
+
+        if platform in [
+                constants.TASK_PLATFORM_DESTINATION,
+                constants.TASK_PLATFORM_BILATERAL]:
+            destination_provider = providers_factory.get_provider(
+                destination["type"], constants.PROVIDER_TYPE_SETUP_LIBS,
+                event_handler, raise_if_not_found=False)
+            if destination_provider:
+                conn_info = get_connection_info(ctxt, destination)
+                required_libs.extend(
+                    destination_provider.get_shared_library_directories(
+                        ctxt, conn_info))
 
         return required_libs