{"record":{"id":"fb23f2f564248a8b","repo":"kopia/kopia","slug":"error-determining-whether-index-blob-v-has-been-d","errorCode":null,"errorMessage":"error determining whether index blob %v has been downloaded","messagePattern":"error determining whether index blob (.+?) has been downloaded","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"repo/content/committed_content_index.go","lineNumber":366,"sourceCode":"\n\tif err := eg.Wait(); err != nil {\n\t\treturn errors.Wrap(err, \"error downloading indexes\")\n\t}\n\n\tcontentlog.Log(ctx, c.log, \"Index blobs downloaded\")\n\n\treturn nil\n}\n\n// missingIndexBlobs returns a closed channel filled with blob IDs that are not in committedContents cache.\nfunc (c *committedContentIndex) missingIndexBlobs(ctx context.Context, blobs []blob.ID) (<-chan blob.ID, error) {\n\tch := make(chan blob.ID, len(blobs))\n\tdefer close(ch)\n\n\tfor _, id := range blobs {\n\t\thas, err := c.cache.hasIndexBlobID(ctx, id)\n\t\tif err != nil {\n\t\t\treturn nil, errors.Wrapf(err, \"error determining whether index blob %v has been downloaded\", id)\n\t\t}\n\n\t\tif !has {\n\t\t\tch <- id\n\t\t}\n\t}\n\n\treturn ch, nil\n}\n\nfunc newCommittedContentIndex(caching *CachingOptions,\n\tv1PerContentOverhead func() int,\n\tformatProvider format.Provider,\n\tpermissiveCacheLoading bool,\n\tfetchIndexBlob func(ctx context.Context, blobID blob.ID, output *gather.WriteBuffer) error,\n\tlog *contentlog.Logger,\n\tminSweepAge time.Duration,\n) *committedContentIndex {","sourceCodeStart":348,"sourceCodeEnd":384,"githubUrl":"https://github.com/kopia/kopia/blob/82495e54b584c1ef6073c9e1be048f57f8aef078/repo/content/committed_content_index.go#L348-L384","documentation":"Raised by missingIndexBlobs when querying the local cache (cache.hasIndexBlobID) to decide which index blobs still need downloading fails. It is not about the blob being missing (that is handled), but about the cache lookup itself erroring. The wrapped cause indicates the local cache backend (typically the disk cache) could not be inspected.","triggerScenarios":"c.cache.hasIndexBlobID(ctx, id) returns non-nil while fetchIndexBlobs computes the list of blobs to download via missingIndexBlobs.","commonSituations":"Local cache directory inaccessible or corrupted; permission errors stat-ing cache files; underlying cache openIndex probing failed (e.g. unreadable cached index file).","solutions":["Check the wrapped cause for the cache-backend error and fix filesystem permissions or I/O issues","Remove and rebuild the local cache directory so lookups succeed again","Verify the cache path configuration points to an existing writable location","Retry the repository open/maintenance after repairing the cache"],"exampleFix":null,"handlingStrategy":"fallback","validationCode":"st, err := os.Stat(cacheDir)\nif err != nil || !st.IsDir() {\n    // recreate cacheDir with 0700 before using the repository\n}","typeGuard":null,"tryCatchPattern":"ids, err := idx.MissingIndexBlobs(ctx, blobs)\nif err != nil {\n    // on cache lookup failure: wipe cache dir and retry once\n    os.RemoveAll(cacheDir)\n    ids, err = idx.MissingIndexBlobs(ctx, blobs)\n}","preventionTips":["Ensure the cache directory exists, is a directory, and is writable before opening the repo","Don't run multiple Kopia processes against the same cache concurrently with conflicting versions","Recreate the cache after OS crashes or disk errors","Check file permissions when running as different users (root vs service account)"],"tags":["cache","filesystem","index-loading","kopia"],"backgroundTag":"cache-lookup-failed","analyzedSha":"82495e54b584c1ef6073c9e1be048f57f8aef078","analyzedAt":"2026-09-07T20:35:21.689Z","contentChangedAt":"2026-09-07T20:35:21.689Z","schemaVersion":2},"datasetVersion":"2026-09-17T15:17:12.973Z"}