{"record":{"id":"e6c3076f01598fca","repo":"iflytek/astron-agent","slug":"invalid-database-max-open-conns-v","errorCode":null,"errorMessage":"invalid DATABASE_MAX_OPEN_CONNS: %v","messagePattern":"invalid DATABASE_MAX_OPEN_CONNS: (.+?)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"core/tenant/config/env_loader.go","lineNumber":77,"sourceCode":"\nfunc (l *EnvLoader) setDatabaseUsername(cfg *Config, value string) error {\n\tcfg.DataBase.UserName = value\n\treturn nil\n}\n\nfunc (l *EnvLoader) setDatabasePassword(cfg *Config, value string) error {\n\tcfg.DataBase.Password = value\n\treturn nil\n}\n\nfunc (l *EnvLoader) setDatabaseURL(cfg *Config, value string) error {\n\tcfg.DataBase.Url = value\n\treturn nil\n}\n\nfunc (l *EnvLoader) setDatabaseMaxOpenConns(cfg *Config, value string) error {\n\tif n, err := fmt.Sscanf(value, \"%d\", &cfg.DataBase.MaxOpenConns); err != nil || n != 1 {\n\t\treturn fmt.Errorf(\"invalid DATABASE_MAX_OPEN_CONNS: %v\", err)\n\t}\n\treturn nil\n}\n\nfunc (l *EnvLoader) setDatabaseMaxIdleConns(cfg *Config, value string) error {\n\tif n, err := fmt.Sscanf(value, \"%d\", &cfg.DataBase.MaxIdleConns); err != nil || n != 1 {\n\t\treturn fmt.Errorf(\"invalid DATABASE_MAX_IDLE_CONNS: %v\", err)\n\t}\n\treturn nil\n}\n\nfunc (l *EnvLoader) setLogPath(cfg *Config, value string) error {\n\tcfg.Log.LogFile = value\n\treturn nil\n}\n\nfunc (l *EnvLoader) Watch(cfg *Config, onChange func()) {\n}","sourceCodeStart":59,"sourceCodeEnd":95,"githubUrl":"https://github.com/iflytek/astron-agent/blob/5e758547a83371a5a4b29dadf4ac03e8dd527635/core/tenant/config/env_loader.go#L59-L95","documentation":"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.","triggerScenarios":"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.","commonSituations":"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\".","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."],"exampleFix":"// before\nDATABASE_MAX_OPEN_CONNS=25conn\n// after\nDATABASE_MAX_OPEN_CONNS=25","handlingStrategy":"validation","validationCode":"if v := os.Getenv(\"DATABASE_MAX_OPEN_CONNS\"); v != \"\" {\n\tif _, err := strconv.Atoi(v); err != nil {\n\t\treturn fmt.Errorf(\"DATABASE_MAX_OPEN_CONNS must be a plain integer, got %q\", v)\n\t}\n}","typeGuard":null,"tryCatchPattern":"_, err := config.LoadConfig(path)\nif err != nil && strings.HasPrefix(err.Error(), \"invalid DATABASE_MAX_OPEN_CONNS\") {\n\tlog.Fatalf(\"DATABASE_MAX_OPEN_CONNS=%q is not an integer: %v\", os.Getenv(\"DATABASE_MAX_OPEN_CONNS\"), err)\n}","preventionTips":["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"],"tags":["configuration","env-var","parsing","database","go"],"backgroundTag":"invalid-env-var-value","analyzedSha":"5e758547a83371a5a4b29dadf4ac03e8dd527635","analyzedAt":"2026-09-12T08:03:51.356Z","contentChangedAt":"2026-09-12T08:03:51.356Z","schemaVersion":2},"datasetVersion":"2026-09-15T23:17:13.987Z"}