dumpStalledRequest function

Future<String?> dumpStalledRequest({
  1. required StallRequestRecord? record,
  2. required String watchdog,
  3. 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.
  }
}