t8y2/dbx · error
invalid Hive socketTimeout %q: expected seconds
Error message
invalid Hive socketTimeout %q: expected seconds
What it means
This error is returned when the Hive `sockettimeout` DSN parameter is present but not parseable by strconv.ParseInt as an integer number of seconds. The library expects a plain integer representing seconds, which it converts to a time.Duration. Non-integer strings like "5s", "500ms", or "abc" fail.
Source
Thrown at agents/drivers/argo-go/config.go:592
return fmt.Errorf("invalid Hive browserResponseTimeout %q: expected positive seconds", value)
}
config.BrowserResponseTimeout = time.Duration(parsed) * time.Second
}
config.BrowserDisableSSLCheck = parameterBool(values, "browserdisablesslcheck")
if strings.EqualFold(config.Auth, "JWT") && config.JWT == "" {
return errors.New("Hive JWT authentication requires jwt or the JWT environment variable")
}
if value := parameter(values, "fetchsize"); value != "" {
parsed, err := strconv.Atoi(value)
if err != nil || parsed <= 0 {
return fmt.Errorf("invalid Hive fetchSize %q: expected a positive integer", value)
}
config.FetchSize = parsed
}
if value := parameter(values, "sockettimeout"); value != "" {
parsed, err := strconv.ParseInt(value, 10, 64)
if err != nil {
return fmt.Errorf("invalid Hive socketTimeout %q: expected seconds", value)
}
if parsed > 0 {
config.SocketTimeout = time.Duration(parsed) * time.Second
}
}
if value := parameter(values, "thrift.client.max.message.size"); value != "" {
parsed, err := strconv.ParseInt(value, 10, 32)
if err != nil {
return fmt.Errorf("invalid Hive thrift.client.max.message.size %q: expected bytes", value)
}
if parsed > 0 {
config.MaxMessageSize = int32(parsed)
}
}
if value := parameter(values, "retries"); value != "" {
parsed, err := strconv.Atoi(value)
if err == nil && parsed > 0 {
config.Retries = parsedView on GitHub (pinned to c0390bff16)
Solutions
- Set sockettimeout to a plain integer number of seconds, e.g. sockettimeout=30
- Remove the sockettimeout parameter to use the driver default
- Do not append unit suffixes like s/ms/h — the value is already seconds
- Check that config templates render an unquoted integer
Example fix
// before dsn := "hive://user:pass@host:10000/db?sockettimeout=30s" // after dsn := "hive://user:pass@host:10000/db?sockettimeout=30"
Defensive patterns
Strategy: validation
Validate before calling
func validateSocketTimeout(dsn string) error {
vals, _ := url.ParseQuery(dsn)
v := vals.Get("sockettimeout")
if v == "" { return nil }
if _, err := strconv.ParseInt(v, 10, 64); err != nil {
return fmt.Errorf("sockettimeout must be integer seconds, got %q", v)
}
return nil
} Try / catch
if _, err := ParseConfig(dsn); err != nil && strings.Contains(err.Error(), "socketTimeout") {
return fmt.Errorf("sockettimeout must be plain seconds (e.g. 30, not 30s): %w", err)
} Prevention
- Never use Go duration strings ("30s") for this parameter — it is seconds only
- Document the seconds unit next to the config key in your deployment templates
- Validate DSN parameters in CI before rollout
- Keep timeout units consistent across your driver configs
When it happens
Trigger: Opening a Hive connection with sockettimeout="5s", sockettimeout="500ms", sockettimeout="", or any non-integer value in the connection parameters.
Common situations: Developers copying Go duration-style values ("10s") from other drivers; confusion about the unit (seconds vs milliseconds); templated config producing an empty or quoted value.
Understand the failure class
- Timeouts: ETIMEDOUT, deadlines, and hung requests — what actually expires when a request times out.
Related errors
- invalid Hive browserResponseTimeout %q: expected positive se
- invalid Hive fetchSize %q: expected a positive integer
- invalid Hive thrift.client.max.message.size %q: expected byt
- invalid Hive browserResponseTimeout %q: expected positive se
- Hive connection string must start with jdbc:hive2:// or hive
AI-assisted analysis of t8y2/dbx@c0390bff16 (2026-09-05).
Data as JSON: /api/errors/d534f7471d3c0087.
Report an issue: GitHub.