t8y2/dbx · error
invalid connecttimeout: %w
Error message
invalid connecttimeout: %w
What it means
applyCassandraURLParams parses 'connecttimeout' or 'logintimeout' query parameters via parseDurationOption. If the value cannot be parsed as a valid duration, the error is wrapped as 'invalid connecttimeout'. This is a DSN validation failure; no connection attempt is made.
Source
Thrown at agents/drivers/cassandra-go/config.go:178
for rawKey, values := range params {
if len(values) == 0 {
continue
}
key := normalizeOptionName(rawKey)
value := strings.TrimSpace(values[len(values)-1])
switch key {
case "localdatacenter", "datacenter", "dc":
config.localDatacenter = value
case "requesttimeout", "timeout":
duration, err := parseDurationOption(value)
if err != nil {
return fmt.Errorf("invalid requesttimeout: %w", err)
}
config.requestTimeout = duration
case "connecttimeout", "logintimeout":
duration, err := parseDurationOption(value)
if err != nil {
return fmt.Errorf("invalid connecttimeout: %w", err)
}
config.connectTimeout = duration
case "protocolversion", "protoversion":
version, err := strconv.Atoi(value)
if err != nil || version < 3 || version > 5 {
return fmt.Errorf("protocolversion must be between 3 and 5")
}
config.protocolVersion = version
case "consistency":
if _, err := gocql.ParseConsistencyWrapper(value); err != nil {
return err
}
config.consistency = value
case "serialconsistency":
consistency, err := gocql.ParseConsistencyWrapper(value)
if err != nil {
return err
}View on GitHub (pinned to c0390bff16)
Solutions
- Set connecttimeout/logintimeout to a valid duration string (e.g. 10s, 750ms).
- Remove the parameter to accept the driver's default connect timeout.
- Check the URL for a truncated or duplicated query parameter (e.g. stray '=' or '&' splitting the value).
Example fix
// before cassandra://host:9042?logintimeout=30 // after cassandra://host:9042?logintimeout=30s
Defensive patterns
Strategy: validation
Validate before calling
if v := os.Getenv("CASSANDRA_CONNECT_TIMEOUT"); v != "" {
if _, err := time.ParseDuration(v); err != nil {
return fmt.Errorf("CASSANDRA_CONNECT_TIMEOUT=%q is not a duration: %w", v, err)
}
} Try / catch
cfg, err := parseCassandraConfig(dsn)
if err != nil {
if strings.Contains(err.Error(), "invalid connecttimeout") {
return fmt.Errorf("bad connecttimeout/logintimeout in DSN: %w", err)
}
return err
} Prevention
- Use time.Duration string formatting (30s, 1m) whenever serializing timeouts
- Validate all timeout env vars at process startup, fail fast
- Keep one constant list of accepted units in your config tooling
When it happens
Trigger: A cassandra:// URL containing connecttimeout=<value> or logintimeout=<value> where value is not a parseable duration, e.g. connecttimeout=ten or logintimeauth= blank/empty string.
Common situations: Typos like connecttimeout=10sec (wrong unit), empty values from unset env vars ('connecttimeout='), or mixing up numeric-milliseconds style from other drivers' connection strings.
Understand the failure class
Background: "invalid duration" / "failed to parse duration": why your timeout, interval, or TTL string is rejected and which formats each library accepts — this error's family across 32 libraries.
- Timeouts: ETIMEDOUT, deadlines, and hung requests — what actually expires when a request times out.
Related errors
- invalid requesttimeout: %w
- invalid debug option: %w
- retries must be between 0 and 1000
- invalid disableinitialhostlookup option: %w
- custom Cassandra sslenginefactory is not supported by the na
AI-assisted analysis of t8y2/dbx@c0390bff16 (2026-09-05).
Data as JSON: /api/errors/173c97a78d3dfba3.
Report an issue: GitHub.