{"record":{"id":"255a9ddac00cbab5","repo":"hyperledger/fabric","slug":"blocknumber-transactionnumber-tuple-not-maintai","errorCode":null,"errorMessage":"<blockNumber, transactionNumber> tuple not maintained in index","messagePattern":"<blockNumber, transactionNumber> tuple not maintained in index","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"common/ledger/blkstorage/blockindex.go","lineNumber":275,"sourceCode":"\t}\n\tvalBytes := itr.Value()\n\tif len(valBytes) == 0 {\n\t\treturn nil, 0, errNilValue\n\t}\n\tval := &TxIDIndexValue{}\n\tif err := proto.Unmarshal(valBytes, val); err != nil {\n\t\treturn nil, 0, errors.Wrapf(err, \"unexpected error while unmarshalling bytes [%#v] into TxIDIndexValProto\", valBytes)\n\t}\n\tblockNum, err := retrieveBlockNum(itr.Key(), len(rangeScan.startKey))\n\tif err != nil {\n\t\treturn nil, 0, errors.WithMessage(err, \"error while decoding block number from txID index key\")\n\t}\n\treturn val, blockNum, nil\n}\n\nfunc (index *blockIndex) getTXLocByBlockNumTranNum(blockNum uint64, tranNum uint64) (*fileLocPointer, error) {\n\tif !index.isAttributeIndexed(IndexableAttrBlockNumTranNum) {\n\t\treturn nil, errors.New(\"<blockNumber, transactionNumber> tuple not maintained in index\")\n\t}\n\tb, err := index.db.Get(constructBlockNumTranNumKey(blockNum, tranNum))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif b == nil {\n\t\treturn nil, errors.Errorf(\"no such blockNumber, transactionNumber <%d, %d> in index\", blockNum, tranNum)\n\t}\n\ttxFLP := &fileLocPointer{}\n\tif err := txFLP.unmarshal(b); err != nil {\n\t\treturn nil, err\n\t}\n\treturn txFLP, nil\n}\n\nfunc (index *blockIndex) exportUniqueTxIDs(dir string, newHashFunc snapshot.NewHashFunc) (map[string][]byte, error) {\n\tif !index.isAttributeIndexed(IndexableAttrTxID) {\n\t\treturn nil, errors.New(\"transaction IDs not maintained in index\")","sourceCodeStart":257,"sourceCodeEnd":293,"githubUrl":"https://github.com/hyperledger/fabric/blob/2736b63f8fd5932511d56fe68b7039d15977f7f6/common/ledger/blkstorage/blockindex.go#L257-L293","documentation":"Returned by blockIndex.getTXLocByBlockNumTranNum when the <blockNumber, transactionNumber> location attribute is not indexed. It is a configuration guard: the lookup was attempted even though the index was built without that attribute.","triggerScenarios":"Thrown at common/ledger/blkstorage/blockindex.go:275 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Enable the required index attribute in the peer's ledger config and re-index","Use a TXID-based lookup instead if the TXID index is enabled"],"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"}