t8y2/dbx · error

unsupported Cassandra loadbalancing policy: %s

Error message

unsupported Cassandra loadbalancing policy: %s

What it means

Returned by normalizeLoadBalancingPolicy when the loadbalancing option (URL param or HOCON config) does not map to a known policy class name. Recognized names are the basic/default/dc-inferring policies (mapped to 'default'), RoundRobinPolicy, DCAwareRoundRobinPolicy, and TokenAwarePolicy; anything else is rejected because the native driver cannot reproduce that policy's routing semantics.

Source

Thrown at agents/drivers/cassandra-go/config.go:527

		return "exponential", nil
	default:
		return "", fmt.Errorf("unsupported Cassandra retry policy: %s", value)
	}
}

func normalizeLoadBalancingPolicy(value string) (string, error) {
	name := strings.ToLower(simpleClassName(value))
	switch name {
	case "", "basicloadbalancingpolicy", "dcinferringloadbalancingpolicy", "defaultloadbalancingpolicy":
		return "default", nil
	case "roundrobinpolicy":
		return "round_robin", nil
	case "dcawareroundrobinpolicy":
		return "dc_aware", nil
	case "tokenawarepolicy":
		return "token_aware", nil
	default:
		return "", fmt.Errorf("unsupported Cassandra loadbalancing policy: %s", value)
	}
}

func parseReconnectionPolicy(value string) (string, time.Duration, time.Duration, error) {
	trimmed := strings.TrimSpace(value)
	name := simpleClassName(trimmed)
	parameters := ""
	if open := strings.IndexByte(name, '('); open >= 0 {
		parameters = strings.TrimSuffix(name[open+1:], ")")
		name = name[:open]
	}
	policy := strings.ToLower(strings.TrimSpace(name))
	baseDelay := time.Second
	maxDelay := 60 * time.Second
	if parameters != "" {
		parts := strings.Split(parameters, ",")
		for index, part := range parts {
			part = strings.TrimSpace(strings.ReplaceAll(strings.ToLower(part), "(long)", ""))

View on GitHub (pinned to c0390bff16)

Solutions

  1. Use a supported policy: RoundRobinPolicy, DCAwareRoundRobinPolicy, or TokenAwarePolicy (typically as TokenAwarePolicy(DCAwareRoundRobinPolicy))
  2. Check spelling of the class name; matching is on the simple lowercased class name
  3. Remove the option to use the default load balancing policy

Example fix

// before
url = "cassandra://host:9042/ks?loadBalancingPolicy=LatencyAwarePolicy"
// after
url = "cassandra://host:9042/ks?loadBalancingPolicy=DCAwareRoundRobinPolicy"
Defensive patterns

Strategy: validation

Validate before calling

var supportedLbPolicies = map[string]bool{
	"roundrobinpolicy": true, "dcawareroundrobinpolicy": true, "tokenawarepolicy": true,
}
func validLoadBalancingPolicy(v string) bool {
	return supportedLbPolicies[strings.ToLower(v)]
}

Try / catch

p, err := normalizeLoadBalancingPolicy(value)
if err != nil {
	return fmt.Errorf("%w; supported: RoundRobin, DCAwareRoundRobin, TokenAware", err)
}

Prevention

When it happens

Trigger: A loadBalancingPolicy option (URL param or HOCON config) whose normalized simple class name is not DCAwareRoundRobinPolicy, TokenAwarePolicy, or RoundRobinPolicy handled by the switch.

Common situations: Using LatencyAwarePolicy or a custom policy from app code, or an old/new driver class name not in the supported set.

Related errors


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