




















@@ -325,7 +325,7 @@ Options:
325325 --runs <n> Measured process samples per case (default: ${DEFAULT_RUNS})
326326 --warmup <n> Warmup process samples per case (default: ${DEFAULT_WARMUP})
327327 --restarts <n> In-process restarts per process sample (default: ${DEFAULT_RESTARTS})
328- --timeout-ms <ms> Per-process timeout (default: ${DEFAULT_TIMEOUT_MS})
328+ --timeout-ms <ms> Timeout for initial startup and each restart (default: ${DEFAULT_TIMEOUT_MS})
329329 --post-ready-delay-ms <ms> Resource snapshot delay after next ready (default: ${DEFAULT_POST_READY_DELAY_MS})
330330 --output <path> Write machine-readable JSON to a file
331331 --json Emit machine-readable JSON
@@ -1257,6 +1257,10 @@ async function waitForIterationCondition(
12571257return predicate();
12581258}
125912591260+function resolvePhaseDeadlineAt(startedAt: number, timeoutMs: number): number {
1261+return startedAt + timeoutMs;
1262+}
1263+12601264async function runGatewaySample(options: {
12611265benchCase: GatewayBenchCase;
12621266entry: string;
@@ -1270,7 +1274,7 @@ async function runGatewaySample(options: {
12701274const configPath = writeConfig(root, options.benchCase);
12711275const env = sanitizedEnv(root, configPath, options.benchCase);
12721276const sampleStartAt = performance.now();
1273-const deadlineAt = sampleStartAt + options.timeoutMs;
1277+const initialDeadlineAt = resolvePhaseDeadlineAt(sampleStartAt, options.timeoutMs);
12741278const initialStartupTrace: Record<string, number> = {};
12751279const events: BenchmarkEvent[] = [{ ms: 0, type: "process.spawn.start" }];
12761280const output: string[] = [];
@@ -1388,7 +1392,7 @@ async function runGatewaySample(options: {
1388139213891393let failureCode: GatewayRestartFailureCode | null = null;
13901394const initialHealthz = await waitForProbeReady({
1391- deadlineAt,
1395+deadlineAt: initialDeadlineAt,
13921396isDone: () => childExited,
13931397path: "/healthz",
13941398 port,
@@ -1400,7 +1404,7 @@ async function runGatewaySample(options: {
14001404const initialReadyz =
14011405failureCode === null
14021406 ? await waitForProbeReady({
1403- deadlineAt,
1407+deadlineAt: initialDeadlineAt,
14041408isDone: () => childExited,
14051409path: "/readyz",
14061410 port,
@@ -1415,7 +1419,7 @@ async function runGatewaySample(options: {
14151419flushOutputLineBuffers(outputBuffers, onLine, performance.now() - sampleStartAt);
14161420await waitForIterationCondition(
14171421() => hasInitialReadyLogs({ initialGatewayReadyLogMs, initialHttpListenLogMs }),
1418-deadlineAt,
1422+initialDeadlineAt,
14191423);
14201424flushOutputLineBuffers(outputBuffers, onLine, performance.now() - sampleStartAt);
14211425if (!hasInitialReadyLogs({ initialGatewayReadyLogMs, initialHttpListenLogMs })) {
@@ -1426,7 +1430,7 @@ async function runGatewaySample(options: {
14261430const iterations: RestartIteration[] = [];
14271431if (failureCode === null) {
14281432for (let index = 1; index <= options.restarts; index += 1) {
1429-if (performance.now() >= deadlineAt || childExited) {
1433+if (childExited) {
14301434failureCode = resolveRestartDeadlineFailure(childExited);
14311435break;
14321436}
@@ -1456,10 +1460,11 @@ async function runGatewaySample(options: {
14561460}
14571461const signalSentAt = performance.now();
14581462iteration.signalSentMs = signalSentAt - sampleStartAt;
1463+const iterationDeadlineAt = resolvePhaseDeadlineAt(signalSentAt, options.timeoutMs);
14591464events.push({ iteration: index, ms: iteration.signalSentMs, type: "restart-signal-sent" });
1460146514611466const healthzPromise = waitForRestartProbe({
1462- deadlineAt,
1467+deadlineAt: iterationDeadlineAt,
14631468 events,
14641469isDone: () => hasRestartReadySignal(iteration),
14651470isProcessDone: () => childExited,
@@ -1470,7 +1475,7 @@ async function runGatewaySample(options: {
14701475 signalSentAt,
14711476});
14721477const readyzPromise = waitForRestartProbe({
1473- deadlineAt,
1478+deadlineAt: iterationDeadlineAt,
14741479 events,
14751480isDone: () => hasRestartReadySignal(iteration),
14761481isProcessDone: () => childExited,
@@ -1484,10 +1489,10 @@ async function runGatewaySample(options: {
14841489iteration.healthz = healthz;
14851490iteration.readyz = readyz;
14861491iteration.resourceSnapshots.push(snapshotResources(child, sampleStartAt, "after-next-ready"));
1487-await waitForIterationCondition(() => hasRestartReadySignal(iteration), deadlineAt);
1488-if (options.postReadyDelayMs > 0 && performance.now() < deadlineAt) {
1492+await waitForIterationCondition(() => hasRestartReadySignal(iteration), iterationDeadlineAt);
1493+if (options.postReadyDelayMs > 0 && performance.now() < iterationDeadlineAt) {
14891494await delay(
1490-Math.min(options.postReadyDelayMs, Math.max(0, deadlineAt - performance.now())),
1495+Math.min(options.postReadyDelayMs, Math.max(0, iterationDeadlineAt - performance.now())),
14911496);
14921497}
14931498iteration.resourceSnapshots.push(
@@ -1687,6 +1692,7 @@ export const testing = {
16871692 parsePositiveInt,
16881693 resolveRestartDeadlineFailure,
16891694 resolveEntry,
1695+ resolvePhaseDeadlineAt,
16901696 sanitizedEnv,
16911697 shouldFailBenchmark,
16921698 summarizeCase,
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。