t8y2/dbx · error

wait for RocketMQ broker registration: %w

Error message

wait for RocketMQ broker registration: %w

What it means

Same wait loop as 933, but this variant fires when the context is cancelled with no prior poll error recorded — the broker never became available before the deadline. It wraps the context error alone.

Source

Thrown at agents/drivers/rocketmq/connection.go:199

	}
	var lastErr error
	for {
		clusterInfo, err := examine(ctx)
		if err == nil && hasMasterBroker(clusterInfo) {
			return clusterInfo, nil
		}
		if err != nil {
			lastErr = err
		}

		timer := time.NewTimer(pollInterval)
		select {
		case <-ctx.Done():
			timer.Stop()
			if lastErr != nil {
				return nil, fmt.Errorf("wait for RocketMQ broker registration after %v: %w", lastErr, ctx.Err())
			}
			return nil, fmt.Errorf("wait for RocketMQ broker registration: %w", ctx.Err())
		case <-timer.C:
		}
	}
}

func hasMasterBroker(info *admin.ClusterInfo) bool {
	if info == nil {
		return false
	}
	for _, broker := range info.BrokerAddrTable {
		if broker != nil && broker.BrokerAddrs["0"] != "" {
			return true
		}
	}
	return false
}

func clusterTestResult(client *admin.Client, info *admin.ClusterInfo, config connectionConfig, proxies *proxyManager) map[string]any {

View on GitHub (pinned to c0390bff16)

Solutions

  1. Retry with a longer, non-expired context
  2. Confirm a master broker is running and reachable before connecting
  3. Check namesrv_addr correctness — polling an empty cluster will always time out

Example fix

// before
ctx, cancel := context.WithTimeout(ctx, 0) // already expired
// after
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
Defensive patterns

Strategy: retry

Validate before calling

select {
case <-ctx.Done():
    return errors.New("context already cancelled; pass a live context with deadline")
default:
}

Try / catch

client, err := buildClient(ctx, cfg)
if errors.Is(err, context.DeadlineExceeded) {
    ctx, cancel = context.WithTimeout(context.Background(), 2*timeout)
    defer cancel()
    client, err = buildClient(ctx, cfg)
}

Prevention

When it happens

Trigger: ctx cancelled or deadline exceeded on the first poll cycle before any poll returned an error; e.g. immediate cancellation or zero timeout.

Common situations: Passing an already-expired or pre-cancelled context; caller sets a very short deadline; cluster genuinely has no running master broker.

Related errors


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