{"record":{"id":"62e0df1beb97c88f","repo":"JuliusBrussee/caveman","slug":"cacheengine-duplicate-normalized-driver-provider","errorCode":null,"errorMessage":"cacheengine: duplicate normalized driver provider %q","messagePattern":"cacheengine: duplicate normalized driver provider %q","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"cacheengine/engine.go","lineNumber":91,"sourceCode":"\tif maxRequestBytes == 0 {\n\t\tmaxRequestBytes = defaultInputByteLimit\n\t}\n\tmaxStablePrefixBytes := config.MaxStablePrefixBytes\n\tif maxStablePrefixBytes == 0 {\n\t\tmaxStablePrefixBytes = defaultInputByteLimit\n\t}\n\tresolver := config.ResolveProfile\n\tif resolver == nil {\n\t\tresolver = defaultProfile\n\t}\n\tdrivers := make(map[string]Driver, len(config.Drivers))\n\tfor rawProvider, driver := range config.Drivers {\n\t\tprovider := strings.ToLower(strings.TrimSpace(rawProvider))\n\t\tif provider == \"\" || driver == nil {\n\t\t\treturn nil, errors.New(\"cacheengine: driver needs non-empty provider and implementation\")\n\t\t}\n\t\tif _, exists := drivers[provider]; exists {\n\t\t\treturn nil, fmt.Errorf(\"cacheengine: duplicate normalized driver provider %q\", provider)\n\t\t}\n\t\tdrivers[provider] = driver\n\t}\n\treturn &Engine{\n\t\tguard: cacheguard.New(), prefixSafety: newPrefixSafetyCache(8192),\n\t\tmaxKeyShards: maxShards, maxRequestBytes: maxRequestBytes, maxStablePrefixBytes: maxStablePrefixBytes,\n\t\tresolveProfile: resolver, drivers: drivers,\n\t}, nil\n}\n\n// Plan selects profitable stable-prefix cache boundaries without editing wire bytes.\nfunc (e *Engine) Plan(request PlanRequest) (Plan, error) {\n\tif e == nil || e.guard == nil || e.prefixSafety == nil {\n\t\treturn Plan{}, errors.New(\"cacheengine: nil engine\")\n\t}\n\tif e.configErr != nil {\n\t\treturn Plan{}, e.configErr\n\t}","sourceCodeStart":73,"sourceCodeEnd":109,"githubUrl":"https://github.com/JuliusBrussee/caveman/blob/27d5a3981a347890211bb1bf2439e5c821a63bc9/cacheengine/engine.go#L73-L109","documentation":"Error \"cacheengine: duplicate normalized driver provider %q\" thrown in JuliusBrussee/caveman.","triggerScenarios":"Thrown at cacheengine/engine.go:91 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Remove the duplicate normalized driver provider."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"27d5a3981a347890211bb1bf2439e5c821a63bc9","analyzedAt":"2026-08-15T09:26:11.751Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}