{"record":{"id":"3aefd4bd477ddd7d","repo":"kopia/kopia","slug":"error-getting-index-set","errorCode":null,"errorMessage":"error getting index set","messagePattern":"error getting index set","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"repo/content/indexblob/index_blob_manager_v1.go","lineNumber":45,"sourceCode":"\tformattingOptions IndexFormattingOptions\n\tlog               *contentlog.Logger\n\n\tepochMgr *epoch.Manager\n}\n\n// ListIndexBlobInfos lists active blob info structs.\nfunc (m *ManagerV1) ListIndexBlobInfos(ctx context.Context) ([]Metadata, error) {\n\tblobs, _, err := m.ListActiveIndexBlobs(ctx)\n\n\treturn blobs, err\n}\n\n// ListActiveIndexBlobs lists the metadata for active index blobs and returns the cut-off time\n// before which all deleted index entries should be treated as non-existent.\nfunc (m *ManagerV1) ListActiveIndexBlobs(ctx context.Context) ([]Metadata, time.Time, error) {\n\tactive, deletionWatermark, err := m.epochMgr.GetCompleteIndexSet(ctx, epoch.LatestEpoch)\n\tif err != nil {\n\t\treturn nil, time.Time{}, errors.Wrap(err, \"error getting index set\")\n\t}\n\n\tvar result []Metadata\n\n\tfor _, bm := range active {\n\t\tresult = append(result, Metadata{Metadata: bm})\n\t}\n\n\tcontentlog.Log2(ctx, m.log, \"total active indexes\", logparam.Int(\"len\", len(active)), logparam.Time(\"deletionWatermark\", deletionWatermark))\n\n\treturn result, deletionWatermark, nil\n}\n\n// Invalidate clears any read caches.\nfunc (m *ManagerV1) Invalidate() {\n\tm.epochMgr.Invalidate()\n}\n","sourceCodeStart":27,"sourceCodeEnd":63,"githubUrl":"https://github.com/kopia/kopia/blob/82495e54b584c1ef6073c9e1be048f57f8aef078/repo/content/indexblob/index_blob_manager_v1.go#L27-L63","documentation":"ManagerV1.ListActiveIndexBlobs calls epochMgr.GetCompleteIndexSet for the latest epoch to enumerate active index blobs; this error wraps any failure from that epoch-manager query. Without the complete index set, callers (ListIndexBlobInfos) cannot enumerate index metadata, which typically blocks operations like full maintenance and content loading.","triggerScenarios":"Listing index blobs on a V1 manager when the epoch manager cannot read/assemble the index set for epoch.LatestEpoch — storage read errors on epoch markers, missing/unreadable epoch manager state, or context cancellation.","commonSituations":"Storage outage or permission change while running `kopia content list` or maintenance; repository partially migrated to V1 with inconsistent epoch markers; very large index sets timing out on slow storage.","solutions":["Inspect the wrapped cause for the underlying storage error (auth, network, missing marker) and fix it.","Retry the listing; epoch marker reads may have hit a transient storage fault.","Verify the upgrade to index blob manager V1 completed and epoch markers are intact (check `kopia repository status`).","Increase context timeout if large index sets exceed the deadline."],"exampleFix":"// before\nactive, deletionWatermark, err := m.epochMgr.GetCompleteIndexSet(ctx, epoch.LatestEpoch)\nif err != nil {\n    return nil, time.Time{}, errors.Wrap(err, \"error getting index set\")\n}\n// after: retry transient failures\nvar active []blob.Metadata\nvar deletionWatermark time.Time\nerr := retry.WithExponentialBackoff(ctx, \"get index set\", func() error {\n    var werr error\n    active, deletionWatermark, werr = m.epochMgr.GetCompleteIndexSet(ctx, epoch.LatestEpoch)\n    return werr\n})\nif err != nil {\n    return nil, time.Time{}, errors.Wrap(err, \"error getting index set\")\n}","handlingStrategy":"retry","validationCode":"if err := st.ConnectionInfo().CheckConnection(); err != nil {\n    return fmt.Errorf(\"storage not reachable before listing indexes: %w\", err)\n}","typeGuard":null,"tryCatchPattern":"infos, err := mgr.ListIndexBlobInfos(ctx)\nif err != nil && strings.Contains(err.Error(), \"error getting index set\") {\n    // retry after brief delay; epoch marker reads can fail transiently\n    time.Sleep(retryDelay)\n    infos, err = mgr.ListIndexBlobInfos(ctx)\n}","preventionTips":["Ensure the V0->V1 upgrade completed before using V1 maintenance APIs.","Verify storage credentials/permissions before maintenance windows.","Use generous timeouts for repositories with many index blobs."],"tags":["epoch","listing","storage"],"backgroundTag":"empty-result-set","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"}