{"record":{"id":"2da727bf140a9bcd","repo":"caddyserver/caddy","slug":"error-loading-ech-config-metadata-v-and-cleanin","errorCode":null,"errorMessage":"error loading ECH config metadata (%v) and cleaning up parent storage key %s: %v","messagePattern":"error loading ECH config metadata \\((.+?)\\) and cleaning up parent storage key (.+?): (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"modules/caddytls/ech.go","lineNumber":583,"sourceCode":"\tif err := cfg.UnmarshalBinary(echConfigBytes); err != nil {\n\t\tdelErr := storage.Delete(ctx, cfgIDKey)\n\t\tif delErr != nil {\n\t\t\treturn echConfig{}, fmt.Errorf(\"error loading ECH config (%v) and cleaning up parent storage key %s: %v\", err, cfgIDKey, delErr)\n\t\t}\n\t\tlogger.Warn(\"could not load ECH config; deleted its config folder\",\n\t\t\tzap.String(\"config_id\", configID),\n\t\t\tzap.Error(err))\n\t\treturn echConfig{}, nil\n\t}\n\tmetaBytes, err := storage.Load(ctx, metaKey)\n\tif errors.Is(err, fs.ErrNotExist) {\n\t\tlogger.Warn(\"ECH config metadata file missing; will recreate at next publication\",\n\t\t\tzap.String(\"config_id\", configID),\n\t\t\tzap.Error(err))\n\t} else if err != nil {\n\t\tdelErr := storage.Delete(ctx, cfgIDKey)\n\t\tif delErr != nil {\n\t\t\treturn echConfig{}, fmt.Errorf(\"error loading ECH config metadata (%v) and cleaning up parent storage key %s: %v\", err, cfgIDKey, delErr)\n\t\t}\n\t\tlogger.Warn(\"could not load ECH config metadata; deleted its folder\",\n\t\t\tzap.String(\"config_id\", configID),\n\t\t\tzap.Error(err))\n\t\treturn echConfig{}, nil\n\t}\n\tvar meta echConfigMeta\n\tif len(metaBytes) > 0 {\n\t\tif err := json.Unmarshal(metaBytes, &meta); err != nil {\n\t\t\t// even though it's just metadata, reset the whole config since we can't reliably maintain it\n\t\t\tdelErr := storage.Delete(ctx, cfgIDKey)\n\t\t\tif delErr != nil {\n\t\t\t\treturn echConfig{}, fmt.Errorf(\"error decoding ECH metadata (%v) and cleaning up parent storage key %s: %v\", err, cfgIDKey, delErr)\n\t\t\t}\n\t\t\tlogger.Warn(\"could not JSON-decode ECH metadata; deleted its config folder\",\n\t\t\t\tzap.String(\"config_id\", configID),\n\t\t\t\tzap.Error(err))\n\t\t\treturn echConfig{}, nil","sourceCodeStart":565,"sourceCodeEnd":601,"githubUrl":"https://github.com/caddyserver/caddy/blob/50e54ee279aa1e504fe218ca49ab6ae16c100410/modules/caddytls/ech.go#L565-L601","documentation":"Error \"error loading ECH config metadata (%v) and cleaning up parent storage key %s: %v\" thrown in caddyserver/caddy.","triggerScenarios":"Thrown at modules/caddytls/ech.go:583 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Inspect both wrapped errors: the ECH config metadata failed to load, and cleanup of its storage key also failed. Check storage health."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"50e54ee279aa1e504fe218ca49ab6ae16c100410","analyzedAt":"2026-08-15T09:20:21.641Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}