|
|
|
@@ -356,7 +356,7 @@ class PluginMigration: |
|
|
|
return {"plugins": plugins, "plugin_not_exist": plugin_not_exist} |
|
|
|
|
|
|
|
@classmethod |
|
|
|
def install_plugins(cls, extracted_plugins: str, output_file: str) -> None: |
|
|
|
def install_plugins(cls, extracted_plugins: str, output_file: str, workers: int = 100) -> None: |
|
|
|
""" |
|
|
|
Install plugins. |
|
|
|
""" |
|
|
|
@@ -370,7 +370,7 @@ class PluginMigration: |
|
|
|
fake_tenant_id = uuid4().hex |
|
|
|
logger.info(f"Installing {len(plugins['plugins'])} plugin instances for fake tenant {fake_tenant_id}") |
|
|
|
|
|
|
|
thread_pool = ThreadPoolExecutor(max_workers=40) |
|
|
|
thread_pool = ThreadPoolExecutor(max_workers=workers) |
|
|
|
|
|
|
|
response = cls.handle_plugin_instance_install(fake_tenant_id, plugins["plugins"]) |
|
|
|
if response.get("failed"): |
|
|
|
@@ -378,10 +378,17 @@ class PluginMigration: |
|
|
|
|
|
|
|
def install(tenant_id: str, plugin_ids: list[str]) -> None: |
|
|
|
logger.info(f"Installing {len(plugin_ids)} plugins for tenant {tenant_id}") |
|
|
|
# fetch plugin already installed |
|
|
|
installed_plugins = manager.list_plugins(tenant_id) |
|
|
|
installed_plugins_ids = [plugin.plugin_id for plugin in installed_plugins] |
|
|
|
# at most 64 plugins one batch |
|
|
|
for i in range(0, len(plugin_ids), 64): |
|
|
|
batch_plugin_ids = plugin_ids[i : i + 64] |
|
|
|
batch_plugin_identifiers = [plugins["plugins"][plugin_id] for plugin_id in batch_plugin_ids] |
|
|
|
batch_plugin_identifiers = [ |
|
|
|
plugins["plugins"][plugin_id] |
|
|
|
for plugin_id in batch_plugin_ids |
|
|
|
if plugin_id not in installed_plugins_ids |
|
|
|
] |
|
|
|
manager.install_from_identifiers( |
|
|
|
tenant_id, |
|
|
|
batch_plugin_identifiers, |