{"record":{"id":"eead7954972147cb","repo":"hyperledger/fabric","slug":"cannot-update-ledger-status-ledger-s-does-not","errorCode":null,"errorMessage":"cannot update ledger status, ledger [%s] does not exist","messagePattern":"cannot update ledger status, ledger \\[(.+?)\\] does not exist","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"core/ledger/kvledger/kv_ledger_provider.go","lineNumber":645,"sourceCode":"\tmetadataBytes, err := protoutil.Marshal(metadata)\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn s.db.Put(metadataKey(ledgerID), metadataBytes, true)\n}\n\nfunc (s *idStore) deleteLedgerID(ledgerID string) error {\n\treturn s.db.Delete(metadataKey(ledgerID), true)\n}\n\nfunc (s *idStore) updateLedgerStatus(ledgerID string, newStatus msgs.Status) error {\n\tmetadata, err := s.getLedgerMetadata(ledgerID)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif metadata == nil {\n\t\tlogger.Errorf(\"LedgerID [%s] does not exist\", ledgerID)\n\t\treturn errors.Errorf(\"cannot update ledger status, ledger [%s] does not exist\", ledgerID)\n\t}\n\tif metadata.Status == newStatus {\n\t\tlogger.Infof(\"Ledger [%s] is already in [%s] status, nothing to do\", ledgerID, newStatus)\n\t\treturn nil\n\t}\n\tmetadata.Status = newStatus\n\tmetadataBytes, err := proto.Marshal(metadata)\n\tif err != nil {\n\t\tlogger.Errorf(\"Error marshalling ledger metadata: %s\", err)\n\t\treturn errors.Wrapf(err, \"error marshalling ledger metadata\")\n\t}\n\tlogger.Infof(\"Updating ledger [%s] status to [%s]\", ledgerID, newStatus)\n\tkey := metadataKey(ledgerID)\n\treturn s.db.Put(key, metadataBytes, true)\n}\n\nfunc (s *idStore) getLedgerMetadata(ledgerID string) (*msgs.LedgerMetadata, error) {\n\tval, err := s.db.Get(metadataKey(ledgerID))","sourceCodeStart":627,"sourceCodeEnd":663,"githubUrl":"https://github.com/hyperledger/fabric/blob/2736b63f8fd5932511d56fe68b7039d15977f7f6/core/ledger/kvledger/kv_ledger_provider.go#L627-L663","documentation":"Returned by idStore.updateLedgerStatus when no metadata record exists for the ledgerID being transitioned (e.g. pause/resume/commit of a channel that was never created or was already dropped). Status updates require an existing ledger entry.","triggerScenarios":"Thrown at core/ledger/kvledger/kv_ledger_provider.go:645 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Verify the channel was fully joined/created before status updates","Re-create the ledger if records were lost"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"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"}