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

  1. Use a query executor instead of a tx simulator for keyhash metadata reads
  2. 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.