{"record":{"id":"e2d473f9857bf9d8","repo":"ipfs/kubo","slug":"failure-to-parse-config-setting-ipns-republishperi","errorCode":null,"errorMessage":"failure to parse config setting IPNS.RepublishPeriod: %s","messagePattern":"failure to parse config setting IPNS\\.RepublishPeriod: (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"core/node/groups.go","lineNumber":331,"sourceCode":"func Online(bcfg *BuildCfg, cfg *config.Config, userResourceOverrides rcmgr.PartialLimitConfig) fx.Option {\n\t// Namesys params\n\n\tipnsCacheSize := cfg.Ipns.ResolveCacheSize\n\tif ipnsCacheSize == 0 {\n\t\tipnsCacheSize = DefaultIpnsCacheSize\n\t}\n\tif ipnsCacheSize < 0 {\n\t\treturn fx.Error(errors.New(\"cannot specify negative resolve cache size\"))\n\t}\n\n\t// Republisher params\n\n\tvar repubPeriod, recordLifetime time.Duration\n\n\tif cfg.Ipns.RepublishPeriod != \"\" {\n\t\td, err := time.ParseDuration(cfg.Ipns.RepublishPeriod)\n\t\tif err != nil {\n\t\t\treturn fx.Error(fmt.Errorf(\"failure to parse config setting IPNS.RepublishPeriod: %s\", err))\n\t\t}\n\n\t\tif !util.Debug && (d < time.Minute || d > (time.Hour*24)) {\n\t\t\treturn fx.Error(fmt.Errorf(\"config setting IPNS.RepublishPeriod is not between 1min and 1day: %s\", d))\n\t\t}\n\n\t\trepubPeriod = d\n\t}\n\n\tif cfg.Ipns.RecordLifetime != \"\" {\n\t\td, err := time.ParseDuration(cfg.Ipns.RecordLifetime)\n\t\tif err != nil {\n\t\t\treturn fx.Error(fmt.Errorf(\"failure to parse config setting IPNS.RecordLifetime: %s\", err))\n\t\t}\n\n\t\trecordLifetime = d\n\t}\n","sourceCodeStart":313,"sourceCodeEnd":349,"githubUrl":"https://github.com/ipfs/kubo/blob/329838acdfafae224582930457efe80aa217afc0/core/node/groups.go#L313-L349","documentation":"`IPNS.RepublishPeriod` is a Go duration string; it is parsed with time.ParseDuration during Online construction. If the string is not a valid duration (missing unit, bad number, non-numeric), node construction fails with this wrapped parse error.","triggerScenarios":"`cfg.Ipns.RepublishPeriod != \"\"` and `time.ParseDuration` fails — values like \"5\", \"5m30\", \"hours\", or stray whitespace in the config value.","commonSituations":"Writing \"5\" instead of \"5m\" (Go durations require a unit); using \"24h\" variants with typos like \"24 h\"; config generated by scripts concatenating numbers and units incorrectly.","solutions":["Set a valid duration with a unit: `ipfs config IPNS.RepublishPeriod 4h`","Clear the value (`ipfs config IPNS.RepublishPeriod \"\"`) to use the default republish interval","Note valid durations are additionally constrained to between 1 minute and 24 hours unless debug mode is on"],"exampleFix":"// before (config.json)\n\"Ipns\": { \"RepublishPeriod\": \"5\" }\n// after\n\"Ipns\": { \"RepublishPeriod\": \"5m\" }","handlingStrategy":"validation","validationCode":"if p := cfg.Ipns.RepublishPeriod; p != \"\" {\n\tif _, err := time.ParseDuration(p); err != nil {\n\t\treturn fmt.Errorf(\"IPNS.RepublishPeriod %q is not a Go duration (e.g. 4h)\", p)\n\t}\n}","typeGuard":null,"tryCatchPattern":"d, err := time.ParseDuration(cfg.Ipns.RepublishPeriod)\nif err != nil {\n\treturn fmt.Errorf(\"IPNS.RepublishPeriod: %w\", err)\n}","preventionTips":["Always include a unit in Go duration strings (5m, 4h)","Remember valid republish periods are 1min-24h outside debug mode","Write durations via `ipfs config IPNS.RepublishPeriod 4h` instead of manual JSON edits"],"tags":["config","ipns","duration-parse"],"backgroundTag":"invalid-duration-format","analyzedSha":"329838acdfafae224582930457efe80aa217afc0","analyzedAt":"2026-09-03T18:30:52.135Z","contentChangedAt":"2026-09-03T18:30:52.135Z","schemaVersion":2},"datasetVersion":"2026-09-11T00:17:11.886Z"}