oven-sh/bun · warning

%s%s w%d%s %s\n

Error message

  %s%s w%d%s %s\n

What it means

After each target's run, h3blast prints one line per worker that accumulated errors in its errbuf, formatted ' <red><label> w<index><rst> <errors>'. This is non-fatal diagnostics: the benchmark completed, but some of that target's workers hit per-connection failures (connect refused, TLS/QUIC handshake failures, stream errors) recorded in the buffer.

Source

Thrown at packages/h3blast/src/h3blast.c:1276

            prev = cur;

            if (g_stop) break;
            if (cfg.duration_s > 0 && elapsed >= run_for) { g_stop = 1; break; }
            if (cfg.max_requests && cur.done >= cfg.max_requests) { g_stop = 1; break; }
            if (cur.hsk_fail >= (uint64_t)cfg.connections && cur.done == 0 && elapsed > 1) { g_stop = 1; break; }
        }

        for (int i = 0; i < nw; i++) pthread_join(ws[i].thread, NULL);

        struct result *r = &results[t];
        r->ran = true;
        r->elapsed = (double)(now_ns() - stats_start) / 1e9;
        collect(ws, nw, &r->snap);
        hdr_init(1, 60 * 1000 * 1000, 3, &r->hist);
        for (int i = 0; i < nw; i++) {
            if (ws[i].hist) { hdr_add(r->hist, ws[i].hist); hdr_close(ws[i].hist); }
            if (ws[i].errbuf[0])
                fprintf(stderr, "  %s%s w%d%s %s\n", RED, cfg.targets[t].label, i, RST, ws[i].errbuf);
        }
    }

    if (g_isatty && !cfg.quiet) {
        if (g_live_lines) fprintf(stderr, "\r\x1b[%dA\x1b[J", g_live_lines);
        fputs("\x1b[?7h\x1b[?25h", stderr);
    }

    render_final(&cfg, results);

    lsquic_global_cleanup();
    uint64_t done = 0;
    for (int t = 0; t < nt; t++) done += results[t].snap.done;
    return (done == 0) ? 1 : 0;
}

View on GitHub (pinned to 8c5296ac45)

Solutions

  1. Read the errbuf text on the line — it names the concrete worker-level failure
  2. Do a 1-connection smoke run against the target before the full benchmark to catch reachability/cert issues
  3. Lower concurrency or duration if the target is refusing connections under load
  4. Verify UDP/443 reachability and that the target actually speaks HTTP/3
Defensive patterns

Strategy: validation

Validate before calling

// pre-flight: one quick request per target before the real benchmark
const r = spawnSync(h3blastPath, ['-c', '1', '-d', '1', target], { encoding: 'utf8' });
if (r.status !== 0) throw new Error(`target unreachable: ${target}`);

Prevention

When it happens

Trigger: A target that is down or refusing UDP/QUIC; certificate mismatches causing handshake_fail counters; transient packet loss or conn-limit exhaustion on some workers while others succeed.

Common situations: Load-testing a server that is restarting or rate-limiting; ALPN/cert misconfig between client and target; firing more connections than the target's accept queue handles.

Related errors


AI-assisted analysis of oven-sh/bun@8c5296ac45 (2026-08-16). Data as JSON: /api/errors/3d2926b9dc8f61c1. Report an issue: GitHub.