t8y2/dbx · error

warm up /

Error message

warm up %s/%s: %w

What it means

During the warmup phase, each warmup RPC goes through process.call; any failure panics with "warm up %s/%s: %w" combining agent name, workload name, and the underlying error. Warmup failing means the agent accepted startup but cannot serve the workload's method.

Solutions

  1. Verify the workload's method name is implemented by the agent's dispatch switch (e.g. connect, mq_list_nodes)
  2. Check the underlying %w error to distinguish I/O, parse, or agent-reported errors
  3. Confirm the broker the agent connects to is running and reachable
  4. Ensure params match the schema the agent expects for the method
Defensive patterns

Strategy: try-catch

Validate before calling

for _, m := range []string{method} {
    if !supportedMethods[m] {
        return fmt.Errorf("workload uses unsupported method %q", m)
    }
}

Try / catch

if _, err := process.call(method, params); err != nil {
    var agentErr interface{ RPCError() string }
    if errors.As(err, &agentErr) {
        log.Fatalf("agent rejected warmup call: %v", err)
    }
    panic(fmt.Errorf("warm up %s/%s: %w", agent.Name, workload, err))
}

Prevention

When it happens

Trigger: process.call(method, params) returns an error during warmupRequests iterations: write to agent stdin fails, no response line arrives, JSON unmarshal fails, response ID mismatch, or the agent returned a JSON-RPC error object.

Common situations: Workload calls a method name the agent does not implement; agent crashed after startup (e.g. broker unreachable); request params don't match the agent's schema; slow agent that never responds.

Related errors


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

Appendix: source

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

	round int,
	method string,
	params map[string]any,
	warmupRequests int,
	operations int,
) benchmarkResult {
	process, _, err := startAgent(agent.Command)
	if err != nil {
		panic(fmt.Errorf("start %s: %w", agent.Name, err))
	}
	defer func() {
		if err := process.close(); err != nil {
			panic(fmt.Errorf("close %s: %w", agent.Name, err))
		}
	}()
	readyRSS := readRSSKB(process.command.Process.Pid)
	for request := 0; request < warmupRequests; request++ {
		if _, err := process.call(method, params); err != nil {
			panic(fmt.Errorf("warm up %s/%s: %w", agent.Name, workload, err))
		}
	}

	latencies := make([]float64, 0, operations)
	errorsCount := 0
	start := time.Now()
	for operation := 0; operation < operations; operation++ {
		requestStart := time.Now()
		if _, err := process.call(method, params); err != nil {
			errorsCount++
		}
		latencies = append(latencies, milliseconds(time.Since(requestStart)))
	}
	duration := time.Since(start)
	result := summarize(agent.Name, workload, round, latencies, duration, errorsCount)
	result.ReadyRSSKB = readyRSS
	result.PostLoadRSSKB = readRSSKB(process.command.Process.Pid)
	result.ArtifactBytes = fileSize(agent.ArtifactPath)

View on GitHub (pinned to c0390bff16)