{"record":{"id":"4a48538c46fe00c1","repo":"hyperledger/fabric","slug":"retrieving-private-data-metadata-by-keyhash-is-not","errorCode":null,"errorMessage":"retrieving private data metadata by keyhash is not supported in simulation. This function is only available for query as yet","messagePattern":"retrieving private data metadata by keyhash is not supported in simulation\\. This function is only available for query as yet","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"core/ledger/kvledger/txmgmt/txmgr/query_executor.go","lineNumber":300,"sourceCode":"\t}\n\treturn valHash, metadata, nil\n}\n\n// GetPrivateDataMetadataByHash implements method in interface `ledger.QueryExecutor`\nfunc (q *queryExecutor) GetPrivateDataMetadataByHash(ns, coll string, keyhash []byte) (map[string][]byte, error) {\n\treturn q.getPrivateDataMetadataByHash(ns, coll, keyhash)\n}\n\nfunc (q *queryExecutor) getPrivateDataMetadataByHash(ns, coll string, keyhash []byte) (map[string][]byte, error) {\n\tif err := q.validateCollName(ns, coll); err != nil {\n\t\treturn nil, err\n\t}\n\tif err := q.checkDone(); err != nil {\n\t\treturn nil, err\n\t}\n\tif q.collectReadset {\n\t\t// this requires to improve rwset builder to accept a keyhash\n\t\treturn nil, errors.New(\"retrieving private data metadata by keyhash is not supported in simulation. This function is only available for query as yet\")\n\t}\n\tmetadataBytes, err := q.txmgr.db.GetPrivateDataMetadataByHash(ns, coll, keyhash)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn statemetadata.Deserialize(metadataBytes)\n}\n\n// GetPrivateDataMultipleKeys implements method in interface `ledger.QueryExecutor`\nfunc (q *queryExecutor) GetPrivateDataMultipleKeys(ns, coll string, keys []string) ([][]byte, error) {\n\tif err := q.validateCollName(ns, coll); err != nil {\n\t\treturn nil, err\n\t}\n\tif err := q.checkDone(); err != nil {\n\t\treturn nil, err\n\t}\n\tversionedValues, err := q.txmgr.db.GetPrivateDataMultipleKeys(ns, coll, keys)\n\tif err != nil {","sourceCodeStart":282,"sourceCodeEnd":318,"githubUrl":"https://github.com/hyperledger/fabric/blob/2736b63f8fd5932511d56fe68b7039d15977f7f6/core/ledger/kvledger/txmgmt/txmgr/query_executor.go#L282-L318","documentation":"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.","triggerScenarios":"Thrown at core/ledger/kvledger/txmgmt/txmgr/query_executor.go:300 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Use a query executor instead of a tx simulator for keyhash metadata reads","Fetch metadata by plain key in simulations"],"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"}