hyperledger/fabric · error
error unmarshalling ledger metadata
Error message
error unmarshalling ledger metadata
What it means
Returned by idStore.getLedgerMetadata when the stored metadata bytes for a ledger fail proto-unmarshaling into LedgerMetadata. The value was found in levelDB but is corrupt or in an unreadable format version.
Source
Thrown at core/ledger/kvledger/kv_ledger_provider.go:670
metadataBytes, err := proto.Marshal(metadata)
if err != nil {
logger.Errorf("Error marshalling ledger metadata: %s", err)
return errors.Wrapf(err, "error marshalling ledger metadata")
}
logger.Infof("Updating ledger [%s] status to [%s]", ledgerID, newStatus)
key := metadataKey(ledgerID)
return s.db.Put(key, metadataBytes, true)
}
func (s *idStore) getLedgerMetadata(ledgerID string) (*msgs.LedgerMetadata, error) {
val, err := s.db.Get(metadataKey(ledgerID))
if val == nil || err != nil {
return nil, err
}
metadata := &msgs.LedgerMetadata{}
if err := proto.Unmarshal(val, metadata); err != nil {
logger.Errorf("Error unmarshalling ledger metadata: %s", err)
return nil, errors.Wrapf(err, "error unmarshalling ledger metadata")
}
return metadata, nil
}
func (s *idStore) ledgerIDExists(ledgerID string) (bool, error) {
key := metadataKey(ledgerID)
val, err := s.db.Get(key)
if err != nil {
return false, err
}
return val != nil, nil
}
func (s *idStore) getActiveAndInactiveLedgerIDs() ([]string, error) {
return s.getLedgerIDs(
map[msgs.Status]struct{}{
msgs.Status_ACTIVE: {},
msgs.Status_INACTIVE: {},View on GitHub (pinned to 2736b63f8f)
Solutions
- Inspect the idStore leveldb for corruption
- Re-run the format upgrade to rewrite metadata in the current encoding
- Restore the idStore from backup
Defensive patterns
Strategy: fallback
When it happens
Trigger: Thrown at core/ledger/kvledger/kv_ledger_provider.go:670 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of hyperledger/fabric@2736b63f8f (2026-09-04).
Data as JSON: /api/errors/07db99ec4dc1cbab.
Report an issue: GitHub.