

















@@ -29,6 +29,7 @@ const ACP_BACKEND_READY_TIMEOUT_MS = 5_000;
2929const ACP_BACKEND_READY_POLL_MS = 50;
3030const PROVIDER_AUTH_PREWARM_START_DELAY_MS = 1_000;
3131const PROVIDER_AUTH_REWARM_DELAY_MS = 1_000;
32+const DEFERRED_SIDECAR_START_DELAY_MS = 100;
3233const QMD_STARTUP_IDLE_DELAY_MS = 120_000;
3334const RESTART_SENTINEL_FILENAME = "restart-sentinel.json";
3435@@ -887,6 +888,7 @@ export async function startGatewayPostAttachRuntime(
887888isClosing?: () => boolean;
888889startupTrace?: GatewayStartupTrace;
889890deferSidecars?: boolean;
891+logReadyOnSidecars?: boolean;
890892providerAuthPrewarm?: {
891893enabled?: boolean;
892894delayMs?: number;
@@ -896,21 +898,38 @@ export async function startGatewayPostAttachRuntime(
896898runtimeDeps: GatewayPostAttachRuntimeDeps = defaultGatewayPostAttachRuntimeDeps,
897899) {
898900let pluginRegistry = params.pluginRegistry;
899-if (!params.minimalTestGateway && params.loadStartupPlugins) {
900-params.onStartupPluginsLoading?.();
901-const loaded = await measureStartup(params.startupTrace, "plugins.runtime-post-bind", () =>
902-params.loadStartupPlugins!(),
903-);
904-pluginRegistry = loaded.pluginRegistry;
905-params.startupTrace?.detail("plugins.runtime-post-bind", [
906-[
907-"loadedPluginCount",
908-pluginRegistry.plugins.filter((plugin) => plugin.status === "loaded").length,
909-],
910-["gatewayMethodCount", loaded.gatewayMethods.length],
911-]);
912-await params.onStartupPluginsLoaded?.(loaded);
913-}
901+let startupPluginsLoaded = false;
902+let startupPluginsLoadPromise: Promise<{
903+pluginRegistry: PluginRegistry;
904+gatewayMethods: string[];
905+}> | null = null;
906+const loadStartupPluginsIfNeeded = async () => {
907+if (params.minimalTestGateway || !params.loadStartupPlugins) {
908+return { pluginRegistry, gatewayMethods: [] };
909+}
910+if (startupPluginsLoaded) {
911+return { pluginRegistry, gatewayMethods: [] };
912+}
913+startupPluginsLoadPromise ??= (async () => {
914+params.onStartupPluginsLoading?.();
915+const loaded = await measureStartup(params.startupTrace, "plugins.runtime-post-bind", () =>
916+params.loadStartupPlugins!(),
917+);
918+pluginRegistry = loaded.pluginRegistry;
919+startupPluginsLoaded = true;
920+params.startupTrace?.detail("plugins.runtime-post-bind", [
921+[
922+"loadedPluginCount",
923+pluginRegistry.plugins.filter((plugin) => plugin.status === "loaded").length,
924+],
925+["gatewayMethodCount", loaded.gatewayMethods.length],
926+]);
927+await params.onStartupPluginsLoaded?.(loaded);
928+return loaded;
929+})();
930+return await startupPluginsLoadPromise;
931+};
932+await loadStartupPluginsIfNeeded();
914933915934const startupLogPromise = measureStartup(params.startupTrace, "post-attach.log", () =>
916935runtimeDeps.logGatewayStartup({
@@ -961,10 +980,20 @@ export async function startGatewayPostAttachRuntime(
961980reportedPluginServices = pluginServices;
962981params.onPluginServices?.(pluginServices);
963982};
983+const waitForSidecarStartTurn = () =>
984+new Promise<void>((resolve) => {
985+if (params.deferSidecars === true) {
986+const timer = setTimeout(resolve, DEFERRED_SIDECAR_START_DELAY_MS);
987+timer.unref?.();
988+return;
989+}
990+setImmediate(resolve);
991+});
964992965993const sidecarsPromise = params.minimalTestGateway
966994 ? Promise.resolve({ pluginServices: null, pluginRegistry, postReadySidecars: [] })
967- : new Promise<void>((resolve) => setImmediate(resolve)).then(async () => {
995+ : waitForSidecarStartTurn().then(async () => {
996+await loadStartupPluginsIfNeeded();
968997params.log.info("starting channels and sidecars...");
969998const loaderStatsBefore = getPluginModuleLoaderStats();
970999const result = await measureStartup(params.startupTrace, "sidecars.total", () =>
@@ -1034,7 +1063,9 @@ export async function startGatewayPostAttachRuntime(
10341063["postReadySidecarCount", postReadySidecars.length + gatewayLifetimeSidecars.length],
10351064]);
10361065params.startupTrace?.mark("sidecars.ready");
1037-params.log.info("gateway ready");
1066+if (params.logReadyOnSidecars !== false) {
1067+params.log.info("gateway ready");
1068+}
10381069return { ...result, postReadySidecars, gatewayLifetimeSidecars, pluginRegistry };
10391070});
10401071此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。