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

  1. Set DATABASE_MAX_OPEN_CONNS to a plain integer (e.g. DATABASE_MAX_OPEN_CONNS=25) and restart.
  2. Inspect the value with `printenv DATABASE_MAX_OPEN_CONNS | cat -A` to find stray text or units and fix the manifest.
  3. Remove floats/units — pool sizes are integer counts; use 25, not 25.0 or 25conns.
  4. 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

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


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)