hyperledger/fabric · error
retrieving private data metadata by keyhash is not supported
Error message
retrieving private data metadata by keyhash is not supported in simulation. This function is only available for query as yet
What it means
getPrivateDataMetadataByHash was invoked in simulation mode (collectReadet active) — metadata-by-keyhash reads are only supported on query executors, not transaction simulators, because they cannot be recorded in the simulation's read set.
Source
Thrown at core/ledger/kvledger/txmgmt/txmgr/query_executor.go:300
}
return valHash, metadata, nil
}
// GetPrivateDataMetadataByHash implements method in interface `ledger.QueryExecutor`
func (q *queryExecutor) GetPrivateDataMetadataByHash(ns, coll string, keyhash []byte) (map[string][]byte, error) {
return q.getPrivateDataMetadataByHash(ns, coll, keyhash)
}
func (q *queryExecutor) getPrivateDataMetadataByHash(ns, coll string, keyhash []byte) (map[string][]byte, error) {
if err := q.validateCollName(ns, coll); err != nil {
return nil, err
}
if err := q.checkDone(); err != nil {
return nil, err
}
if q.collectReadset {
// this requires to improve rwset builder to accept a keyhash
return nil, errors.New("retrieving private data metadata by keyhash is not supported in simulation. This function is only available for query as yet")
}
metadataBytes, err := q.txmgr.db.GetPrivateDataMetadataByHash(ns, coll, keyhash)
if err != nil {
return nil, err
}
return statemetadata.Deserialize(metadataBytes)
}
// GetPrivateDataMultipleKeys implements method in interface `ledger.QueryExecutor`
func (q *queryExecutor) GetPrivateDataMultipleKeys(ns, coll string, keys []string) ([][]byte, error) {
if err := q.validateCollName(ns, coll); err != nil {
return nil, err
}
if err := q.checkDone(); err != nil {
return nil, err
}
versionedValues, err := q.txmgr.db.GetPrivateDataMultipleKeys(ns, coll, keys)
if err != nil {View on GitHub (pinned to 2736b63f8f)
Solutions
- Use a query executor instead of a tx simulator for keyhash metadata reads
- Fetch metadata by plain key in simulations
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at core/ledger/kvledger/txmgmt/txmgr/query_executor.go:300 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/4a48538c46fe00c1.
Report an issue: GitHub.