iflytek/astron-agent · error
invalid DATABASE_MAX_OPEN_CONNS
Error message
invalid DATABASE_MAX_OPEN_CONNS: %v
What it means
EnvLoader.setDatabaseMaxOpenConns parses DATABASE_MAX_OPEN_CONNS with fmt.Sscanf("%d") and returns this error when the value is non-empty but not a valid integer. The parsed value configures the DB pool's maximum open connections. LoadConfig aborts startup when EnvLoader.Load returns this error.
Solutions
- Set DATABASE_MAX_OPEN_CONNS to a plain integer (e.g. DATABASE_MAX_OPEN_CONNS=25) and restart.
- Inspect the value with `printenv DATABASE_MAX_OPEN_CONNS | cat -A` to find stray text or units and fix the manifest.
- Remove floats/units — pool sizes are integer counts; use 25, not 25.0 or 25conns.
- Consider strconv.Atoi in code for a clearer error message than Sscanf's.
Example fix
// before DATABASE_MAX_OPEN_CONNS=25conn // after DATABASE_MAX_OPEN_CONNS=25
Defensive patterns
Strategy: validation
Validate before calling
if v := os.Getenv("DATABASE_MAX_OPEN_CONNS"); v != "" {
if _, err := strconv.Atoi(v); err != nil {
return fmt.Errorf("DATABASE_MAX_OPEN_CONNS must be a plain integer, got %q", v)
}
} Try / catch
_, err := config.LoadConfig(path)
if err != nil && strings.HasPrefix(err.Error(), "invalid DATABASE_MAX_OPEN_CONNS") {
log.Fatalf("DATABASE_MAX_OPEN_CONNS=%q is not an integer: %v", os.Getenv("DATABASE_MAX_OPEN_CONNS"), err)
} Prevention
- Use plain integers for pool sizes — never append units or decimals
- Keep pool settings in one shared Helm values block to avoid per-env typos
- Render and inspect manifests (`helm template`) before applying
- Preflight-check numeric env vars in CI
When it happens
Trigger: DATABASE_MAX_OPEN_CONNS is set (non-empty) but cannot be parsed as an integer: e.g. "25connections", "2 5" (Sscanf stops at whitespace but a second token causes... actually %d reads 2; failure cases are leading non-numeric text), "twenty", "25ms", or whitespace-only values.
Common situations: Appending units to the number in Helm/Compose values, YAML quoting surprises producing strings with units, copy-paste errors including variable names, or providing floats like "25.0".
Understand the failure class
Background: "is not a valid" / "Invalid ... value" environment variable errors: how libraries validate env vars and what to do when they reject yours — this error's family across 48 libraries.
Related errors
- invalid DATABASE_MAX_IDLE_CONNS
- invalid SERVICE_PORT
- database type is required
- database username is required
- database password is required
AI-assisted analysis of iflytek/astron-agent@5e758547a8 (2026-09-12).
Data as JSON: /api/errors/e6c3076f01598fca.
Report an issue: GitHub.
Appendix: source
Thrown at core/tenant/config/env_loader.go:77
func (l *EnvLoader) setDatabaseUsername(cfg *Config, value string) error {
cfg.DataBase.UserName = value
return nil
}
func (l *EnvLoader) setDatabasePassword(cfg *Config, value string) error {
cfg.DataBase.Password = value
return nil
}
func (l *EnvLoader) setDatabaseURL(cfg *Config, value string) error {
cfg.DataBase.Url = value
return nil
}
func (l *EnvLoader) setDatabaseMaxOpenConns(cfg *Config, value string) error {
if n, err := fmt.Sscanf(value, "%d", &cfg.DataBase.MaxOpenConns); err != nil || n != 1 {
return fmt.Errorf("invalid DATABASE_MAX_OPEN_CONNS: %v", err)
}
return nil
}
func (l *EnvLoader) setDatabaseMaxIdleConns(cfg *Config, value string) error {
if n, err := fmt.Sscanf(value, "%d", &cfg.DataBase.MaxIdleConns); err != nil || n != 1 {
return fmt.Errorf("invalid DATABASE_MAX_IDLE_CONNS: %v", err)
}
return nil
}
func (l *EnvLoader) setLogPath(cfg *Config, value string) error {
cfg.Log.LogFile = value
return nil
}
func (l *EnvLoader) Watch(cfg *Config, onChange func()) {
}View on GitHub (pinned to 5e758547a8)