{"record":{"id":"88fb9dbaa26d27e6","repo":"hyperledger/fabric","slug":"error-getting-ledger-ids-from-idstore","errorCode":null,"errorMessage":"error getting ledger ids from idStore","messagePattern":"error getting ledger ids from idStore","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"critical","filePath":"core/ledger/kvledger/kv_ledger_provider.go","lineNumber":718,"sourceCode":"\nfunc (s *idStore) getLedgerIDs(filterIn map[msgs.Status]struct{}) ([]string, error) {\n\tvar ids []string\n\titr := s.db.GetIterator(metadataKeyPrefix, metadataKeyStop)\n\tdefer itr.Release()\n\tfor itr.Error() == nil && itr.Next() {\n\t\tmetadata := &msgs.LedgerMetadata{}\n\t\tif err := proto.Unmarshal(itr.Value(), metadata); err != nil {\n\t\t\tlogger.Errorf(\"Error unmarshalling ledger metadata: %s\", err)\n\t\t\treturn nil, errors.Wrapf(err, \"error unmarshalling ledger metadata\")\n\t\t}\n\t\tif _, ok := filterIn[metadata.Status]; ok {\n\t\t\tid := ledgerIDFromMetadataKey(itr.Key())\n\t\t\tids = append(ids, id)\n\t\t}\n\t}\n\tif err := itr.Error(); err != nil {\n\t\tlogger.Errorf(\"Error getting ledger ids from idStore: %s\", err)\n\t\treturn nil, errors.Wrapf(err, \"error getting ledger ids from idStore\")\n\t}\n\treturn ids, nil\n}\n\nfunc (s *idStore) close() {\n\ts.db.Close()\n}\n\nfunc ledgerIDFromGenesisBlockKey(key []byte) string {\n\treturn string(key[len(genesisBlkKeyPrefix):])\n}\n\nfunc metadataKey(ledgerID string) []byte {\n\treturn append(metadataKeyPrefix, []byte(ledgerID)...)\n}\n\nfunc ledgerIDFromMetadataKey(key []byte) string {\n\treturn string(key[len(metadataKeyPrefix):])","sourceCodeStart":700,"sourceCodeEnd":736,"githubUrl":"https://github.com/hyperledger/fabric/blob/2736b63f8fd5932511d56fe68b7039d15977f7f6/core/ledger/kvledger/kv_ledger_provider.go#L700-L736","documentation":"After iterating ledger metadata records, the idStore checks the iterator's accumulated error via itr.Error(). If the underlying LevelDB iterator hit an I/O or corruption error mid-scan, the ledger ID enumeration fails with this wrapped error. Unlike error 1030 this is about the iterator itself failing, not a specific malformed record.","triggerScenarios":"Any call to getActiveLedgerIDs or getActiveAndInactiveLedgerIDs (peer startup, snapshot-related checks, upgrade) where the LevelDB iterator over the metadata prefix raises an error during traversal.","commonSituations":"Disk full or I/O errors on the ledger data volume; corrupted MANIFEST/.ldb files in ledgersData/ledgerProvider; permission problems on the DB directory after running commands as different users (e.g. root vs. the peer service user).","solutions":["Check disk space, permissions, and filesystem health on the peer's ledger data directory (Peer.FileSystemPath/ledgersData).","Fix the ownership/permissions so the user running the peer can read/write ledgersData/ledgerProvider.","Restore the ledgerProvider DB from backup if files are corrupted.","Run 'peer node rebuild-dbs' to rebuild indexes/state from the block store if the DB cannot be repaired.","Restart the peer and retry once the environment issue is resolved."],"exampleFix":null,"handlingStrategy":"validation","validationCode":"// verify ledger data dir health pre-start\nfunc checkLedgerDataDir(rootFSPath string) error {\n\tif err := os.MkdirAll(rootFSPath, 0o750); err != nil {\n\t\treturn fmt.Errorf(\"cannot create/access ledger dir: %w\", err)\n\t}\n\ttest := filepath.Join(rootFSPath, \".writetest\")\n\tif err := os.WriteFile(test, []byte(\"ok\"), 0o600); err != nil {\n\t\treturn fmt.Errorf(\"ledger dir not writable: %w\", err)\n\t}\n\treturn os.Remove(test)\n}","typeGuard":null,"tryCatchPattern":"ids, err := provider.ListLedgers()\nif err != nil && strings.Contains(err.Error(), \"error getting ledger ids from idStore\") {\n\tif isIOError(err) {\n\t\t// alert ops: disk/permission problem on ledger volume\n\t\tmonitoring.Alert(\"ledger-idstore-io\", err)\n\t}\n\treturn err\n}","preventionTips":["Monitor disk space on the ledger data volume","Run the peer as a consistent service user with correct ownership of ledgersData","Use filesystem health checks before starting the peer","Back up ledgersData regularly so corruption is recoverable"],"tags":["hyperledger-fabric","leveldb","io-error","data-corruption"],"backgroundTag":"leveldb-corruption","analyzedSha":"2736b63f8fd5932511d56fe68b7039d15977f7f6","analyzedAt":"2026-09-04T08:52:36.465Z","contentChangedAt":"2026-09-04T08:52:36.465Z","schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}