t8y2/dbx · critical

warm up startup %s: %w

Error message

warm up startup %s: %w

What it means

benchmarkStartups in the RabbitMQ agent benchmark harness calls startAgent for a warm-up pass and panics with this wrapped error if the agent process cannot be started. Because warm-up is mandatory before benchmarking, startup failure is treated as fatal via panic rather than a returned error.

Source

Thrown at agents/drivers/rabbitmq/bench/agent_compare.go:149

				"mq_list_topics",
				managementParams,
				warmupRequests/5,
				managementRequests,
			))
		}
	}
}

func benchmarkStartups(agents []agentSpec, warmups, iterations int) []benchmarkResult {
	for warmup := 0; warmup < warmups; warmup++ {
		order := agents
		if warmup%2 == 1 {
			order = []agentSpec{agents[1], agents[0]}
		}
		for _, agent := range order {
			process, _, err := startAgent(agent.Command)
			if err != nil {
				panic(fmt.Errorf("warm up startup %s: %w", agent.Name, err))
			}
			if _, err := process.call("handshake", map[string]any{}); err != nil {
				process.kill()
				panic(fmt.Errorf("warm up handshake %s: %w", agent.Name, err))
			}
			if err := process.close(); err != nil {
				panic(fmt.Errorf("close startup warmup %s: %w", agent.Name, err))
			}
		}
	}

	readySamples := map[string][]float64{}
	handshakeSamples := map[string][]float64{}
	rssSamples := map[string][]int64{}
	readyDurations := map[string]time.Duration{}
	handshakeDurations := map[string]time.Duration{}
	for iteration := 0; iteration < iterations; iteration++ {
		order := agents

View on GitHub (pinned to c0390bff16)

Solutions

  1. Build the agent binaries first (check the benchmark README / Makefile for the build step)
  2. Verify each agentSpec.Command path in the agents list is correct and executable (chmod +x, correct absolute path)
  3. Run the agent command manually to see the real startup error
  4. Check for architecture/interpreter mismatches (file <binary>, ldd <binary>)
  5. Read the wrapped %w error from the panic for the underlying exec failure

Example fix

// before: benchmark run without building agents
// panic: warm up startup go-agent: exec: "./agent": stat ./agent: no such file or directory

// after
go build -o ./agent ./cmd/agent
go run ./bench/agent_compare
Defensive patterns

Strategy: try-catch

Validate before calling

func agentReady(cmd []string) error {
    if len(cmd) == 0 {
        return fmt.Errorf("empty agent command")
    }
    path, err := exec.LookPath(cmd[0])
    if err != nil {
        return fmt.Errorf("agent binary not found: %w", err)
    }
    if info, err := os.Stat(path); err == nil && info.Mode()&0111 == 0 {
        return fmt.Errorf("%s is not executable", path)
    }
    return nil
}
// call for each agentSpec before benchmarkStartups

Type guard

func canStartAgent(spec agentSpec) bool {
    return len(spec.Command) > 0 && exec.LookPath(spec.Command[0]) == nil
}

Try / catch

// the harness panics on warm-up failure; run it with recover
func runBenchmarkSafe() {
    defer func() {
        if r := recover(); r != nil {
            log.Fatalf("benchmark aborted during warm-up: %v", r)
        }
    }()
    benchmarkStartups()
}

Prevention

When it happens

Trigger: Running the agent_compare benchmark binary when an agentSpec.Command in the agents list fails to spawn — binary not found, exec format error, or immediate exit of the agent process.

Common situations: Agent binary not built before running the benchmark; wrong path in the agent command config; architecture mismatch (arm64 binary on x86); missing runtime dependencies for the agent executable.

Related errors


AI-assisted analysis of t8y2/dbx@c0390bff16 (2026-09-05). Data as JSON: /api/errors/79756406c8d79a85. Report an issue: GitHub.