perf: distribute concurrent plugin auto upgrade tasks (#26282)

This commit is contained in:
Junyan Qin (Chin) 2025-09-28 10:26:11 +08:00 committed by GitHub
parent 0e4f19eee0
commit 043ec46c33
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 24 additions and 9 deletions

View File

@ -1,3 +1,4 @@
import math
import time
import click
@ -8,6 +9,7 @@ from models.account import TenantPluginAutoUpgradeStrategy
from tasks.process_tenant_plugin_autoupgrade_check_task import process_tenant_plugin_autoupgrade_check_task
AUTO_UPGRADE_MINIMAL_CHECKING_INTERVAL = 15 * 60 # 15 minutes
MAX_CONCURRENT_CHECK_TASKS = 20
@app.celery.task(queue="plugin")
@ -30,7 +32,17 @@ def check_upgradable_plugin_task():
.all()
)
for strategy in strategies:
total_strategies = len(strategies)
click.echo(click.style(f"Total strategies: {total_strategies}", fg="green"))
batch_chunk_count = math.ceil(
total_strategies / MAX_CONCURRENT_CHECK_TASKS
) # make sure all strategies are checked in this interval
batch_interval_time = (AUTO_UPGRADE_MINIMAL_CHECKING_INTERVAL / batch_chunk_count) if batch_chunk_count > 0 else 0
for i in range(0, total_strategies, MAX_CONCURRENT_CHECK_TASKS):
batch_strategies = strategies[i : i + MAX_CONCURRENT_CHECK_TASKS]
for strategy in batch_strategies:
process_tenant_plugin_autoupgrade_check_task.delay(
strategy.tenant_id,
strategy.strategy_setting,
@ -40,6 +52,9 @@ def check_upgradable_plugin_task():
strategy.include_plugins,
)
if batch_interval_time > 0.0001: # if lower than 1ms, skip
time.sleep(batch_interval_time)
end_at = time.perf_counter()
click.echo(
click.style(