{"record":{"id":"b6c9b1a6bb98bbbf","repo":"jaegertracing/jaeger","slug":"storage-s-does-not-support-purging","errorCode":null,"errorMessage":"storage '%s' does not support purging","messagePattern":"storage '(.+?)' does not support purging","errorType":"console","errorClass":null,"httpStatus":null,"severity":"error","filePath":"cmd/jaeger/internal/extension/jaegerstorage/extension.go","lineNumber":96,"sourceCode":"\t}\n\n\tssf, ok := f.(storage.SamplingStoreFactory)\n\tif !ok {\n\t\treturn nil, fmt.Errorf(\"storage '%s' does not support sampling store\", name)\n\t}\n\n\treturn ssf, nil\n}\n\nfunc GetPurger(name string, host component.Host) (storage.Purger, error) {\n\tf, err := getStorageFactory(name, host)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tpurger, ok := f.(storage.Purger)\n\tif !ok {\n\t\treturn nil, fmt.Errorf(\"storage '%s' does not support purging\", name)\n\t}\n\n\treturn purger, nil\n}\n\nfunc findExtension(host component.Host) (Extension, error) {\n\tvar id component.ID\n\tvar comp component.Component\n\tfor i, ext := range host.GetExtensions() {\n\t\tif i.Type() == componentType {\n\t\t\tid, comp = i, ext\n\t\t\tbreak\n\t\t}\n\t}\n\tif comp == nil {\n\t\treturn nil, fmt.Errorf(\n\t\t\t\"cannot find extension '%s' (make sure it's defined earlier in the config)\",\n\t\t\tcomponentType,","sourceCodeStart":78,"sourceCodeEnd":114,"githubUrl":"https://github.com/jaegertracing/jaeger/blob/806f4447841ecdb60519f408b004a599d515f437/cmd/jaeger/internal/extension/jaegerstorage/extension.go#L78-L114","documentation":"GetPurger retrieves the named trace storage factory and asserts it implements storage.Purger, used by the purge-all-data operation (e.g. jaeger-all-in-one purge tooling). Backends that have no purge implementation fail this Go type assertion and produce this error.","triggerScenarios":"Calling jaegerstorage.GetPurger(name, host) for a storage whose tracestore.Factory does not implement storage.Purger — the ok check on the type assertion fails and the error is returned.","commonSituations":"Attempting to purge data in a storage backend that does not support the purge API (e.g. a backend lacking bulk delete), typically from the all-in-one binary's purge endpoint or test harness.","solutions":["Use a storage backend whose factory implements storage.Purger when purge is needed","Skip/remove the purge operation for backends without purge support","Implement storage.Purger on a custom factory to add purge capability"],"exampleFix":"// before: purge attempted against unsupported backend\npurger, err := jaegerstorage.GetPurger(\"my-backend\", host)\n// after: guard by capability first\nf, _ := jaegerstorage.GetTraceStoreFactory(\"my-backend\", host)\nif _, ok := f.(storage.Purger); !ok {\n    // skip purge: backend does not support it\n    return nil\n}\npurger, err := jaegerstorage.GetPurger(\"my-backend\", host)","handlingStrategy":"type-guard","validationCode":"f, err := jaegerstorage.GetTraceStoreFactory(name, host)\nif err == nil {\n    if _, ok := f.(storage.Purger); !ok {\n        // purge not supported by this backend\n    }\n}","typeGuard":"func supportsPurge(f tracestore.Factory) bool {\n    _, ok := f.(storage.Purger)\n    return ok\n}","tryCatchPattern":"purger, err := jaegerstorage.GetPurger(name, host)\nif err != nil {\n    if strings.Contains(err.Error(), \"does not support purging\") {\n        return errUnsupportedPurge\n    }\n    return err\n}","preventionTips":["Check storage.Purger support before exposing purge endpoints/tooling","Restrict purge operations to backend types with purge implementations","Document per-backend purge support in deployment docs"],"tags":["go","jaeger","type-assertion","purge"],"backgroundTag":"capability-not-supported","analyzedSha":"806f4447841ecdb60519f408b004a599d515f437","analyzedAt":"2026-09-01T02:39:22.140Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T05:18:18.240Z"}