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
- Use a supported policy: RoundRobinPolicy, DCAwareRoundRobinPolicy, or TokenAwarePolicy (typically as TokenAwarePolicy(DCAwareRoundRobinPolicy))
- Check spelling of the class name; matching is on the simple lowercased class name
- 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
- Restrict configs to TokenAwarePolicy(DCAwareRoundRobinPolicy)-style setups
- Avoid LatencyAware/custom policies not supported by the agent
- Validate policy names in config review
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
- unsupported Cassandra retry policy: %s
- unsupported Cassandra reconnection policy: %s
- DCAwareRoundRobinPolicy requires localdatacenter
- invalid requesttimeout: %w
- invalid connecttimeout: %w
AI-assisted analysis of t8y2/dbx@c0390bff16 (2026-09-05).
Data as JSON: /api/errors/923b560674fa142a.
Report an issue: GitHub.