hyperledger/fabric · error
ledger [%s] already exists with state [%s]
Error message
ledger [%s] already exists with state [%s]
What it means
Returned by idStore.createLedgerID when metadata already exists for the ledgerID — the channel was already created (or is under construction). It prevents double-creation, reporting the existing ledger's current status (active/pending).
Source
Thrown at core/ledger/kvledger/kv_ledger_provider.go:625
for itr.Error() == nil && itr.Next() {
id := ledgerIDFromGenesisBlockKey(itr.Key())
batch.Put(metadataKey(id), metadata)
}
if err = itr.Error(); err != nil {
logger.Errorf("Error while upgrading idStore format: %s", err)
return errors.Wrapf(err, "error while upgrading idStore format")
}
return s.db.WriteBatch(batch, true)
}
func (s *idStore) createLedgerID(ledgerID string, metadata *msgs.LedgerMetadata) error {
m, err := s.getLedgerMetadata(ledgerID)
if err != nil {
return err
}
if m != nil {
return errors.Errorf("ledger [%s] already exists with state [%s]", ledgerID, m.GetStatus())
}
metadataBytes, err := protoutil.Marshal(metadata)
if err != nil {
return err
}
return s.db.Put(metadataKey(ledgerID), metadataBytes, true)
}
func (s *idStore) deleteLedgerID(ledgerID string) error {
return s.db.Delete(metadataKey(ledgerID), true)
}
func (s *idStore) updateLedgerStatus(ledgerID string, newStatus msgs.Status) error {
metadata, err := s.getLedgerMetadata(ledgerID)
if err != nil {
return err
}
if metadata == nil {View on GitHub (pinned to 2736b63f8f)
Solutions
- Drop or archive the existing ledger before recreating it
- If the existing ledger is desired, skip creation and open it instead
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at core/ledger/kvledger/kv_ledger_provider.go:625 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/4c0dda8a2e39c4ab.
Report an issue: GitHub.