Bug: releaseLease in acquireLease() resets lastUsedAt, defeating MCP runtime idle sweep
Location: agent-bundle-mcp-runtime-n24dxm4C.js — acquireLease() method, release callback
What happens:
acquireLease() {
activeLeases += 1;
let released = false;
return () => {
if (released) return;
released = true;
activeLeases = Math.max(0, activeLeases - 1);
lastUsedAt = Date.now(); // BUG: release is not "use"
};
}
When a lease is released, lastUsedAt is reset to Date.now(). The idle sweep (sweepIdleRuntimes) uses lastUsedAt to determine if a runtime has been idle past sessionIdleTtlMs. By resetting the timer on release, the sweep never fires for runtimes whose sessions are re-used frequently (e.g., cron jobs every 5-15 min with resolveCronSession session reuse).
Impact: MCP server processes accumulate linearly over gateway uptime. Observed: 24 processes / 3.3 GB after ~3h uptime with 4 fixer-agent cron jobs at 5/10/15/15 min intervals.
Fix: Remove the lastUsedAt = Date.now() line from the release callback. Releasing a lease is not "using" the runtime.
Mitigation applied: Reduced mcp.sessionIdleTtlMs from 600000 to 180000, then patched the release callback. Root cause fix confirmed working with sessionIdleTtlMs restored to default 600000.
Bug: releaseLease in acquireLease() resets lastUsedAt, defeating MCP runtime idle sweep
Location:
agent-bundle-mcp-runtime-n24dxm4C.js—acquireLease()method, release callbackWhat happens:
When a lease is released,
lastUsedAtis reset toDate.now(). The idle sweep (sweepIdleRuntimes) useslastUsedAtto determine if a runtime has been idle pastsessionIdleTtlMs. By resetting the timer on release, the sweep never fires for runtimes whose sessions are re-used frequently (e.g., cron jobs every 5-15 min withresolveCronSessionsession reuse).Impact: MCP server processes accumulate linearly over gateway uptime. Observed: 24 processes / 3.3 GB after ~3h uptime with 4 fixer-agent cron jobs at 5/10/15/15 min intervals.
Fix: Remove the
lastUsedAt = Date.now()line from the release callback. Releasing a lease is not "using" the runtime.Mitigation applied: Reduced
mcp.sessionIdleTtlMsfrom 600000 to 180000, then patched the release callback. Root cause fix confirmed working withsessionIdleTtlMsrestored to default 600000.