dumpStalledRequest function
Future<String?>
dumpStalledRequest({
- required StallRequestRecord? record,
- required String watchdog,
- required Duration idleTimeout,
Dumps the stalled request. Returns the meta.json path, or null when the dump was skipped (sentinel off, budget spent, no sink) or could not be written (best-effort — never throws).
Implementation
Future<String?> dumpStalledRequest({
required StallRequestRecord? record,
required String watchdog,
required Duration idleTimeout,
}) async {
if (!stallSentinelEnabled) return null;
if (_dumpsWritten >= maxStallDumpsPerProcess) {
if (!_budgetSpent) {
_budgetSpent = true;
emitConnTrace(
ConnTraceKind.stallDumped,
'stall dump budget spent ($maxStallDumpsPerProcess dumps) — '
'further payloads skipped this process',
always: true,
);
}
return null;
}
final sink = stallDumpSink;
if (sink == null) return null;
try {
final bytes = record?.bodyBytes;
final path = await sink(
StallDump(
watchdog: watchdog,
idleTimeout: idleTimeout,
dumpedAt: DateTime.now().toUtc(),
method: record?.method ?? 'POST',
url: record?.url.toString() ?? 'unavailable',
redactedHeaders: record == null
? <String, String>{}
: redactHeadersForMeta(record.headers),
payloadBytes: bytes,
),
);
if (path == null) return null;
_dumpsWritten++;
_emitStallDump(path);
return path;
} on Object {
return null; // best-effort: the abort path outranks the capture.
}
}