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

  1. Set connecttimeout/logintimeout to a valid duration string (e.g. 10s, 750ms).
  2. Remove the parameter to accept the driver's default connect timeout.
  3. 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

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.

Related errors


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