diff --git a/hail/src/main/scala/is/hail/expr/ir/TableIR.scala b/hail/src/main/scala/is/hail/expr/ir/TableIR.scala index ba0e6411787..9066bcb767f 100644 --- a/hail/src/main/scala/is/hail/expr/ir/TableIR.scala +++ b/hail/src/main/scala/is/hail/expr/ir/TableIR.scala @@ -1060,7 +1060,14 @@ case class PartitionZippedIndexedNativeReader(specLeft: AbstractTypedCodecSpec, cb.ifx(endIndex > startIndex, { val leafNode = indexResult.loadField(cb, 2) - .get(cb) + .handle(cb, { + cb._fatal("leaf node missing!", + "\n context: ", cb.strValue(ctxStruct), + "\n query result: ", cb.strValue(indexResult), + "\n first leaf: ", index.queryIndex(cb, outerRegion, 0L), + "\n last leaf: ", index.queryLastIndex(cb, outerRegion) + ) + }) .asBaseStruct val leftSeekAddr = leftOffsetFieldIndex match { diff --git a/hail/src/main/scala/is/hail/io/index/StagedIndexReader.scala b/hail/src/main/scala/is/hail/io/index/StagedIndexReader.scala index f2d81b062ba..20a45e1076c 100644 --- a/hail/src/main/scala/is/hail/io/index/StagedIndexReader.scala +++ b/hail/src/main/scala/is/hail/io/index/StagedIndexReader.scala @@ -156,7 +156,8 @@ class StagedIndexReader(emb: EmitMethodBuilder[_], spec: AbstractIndexSpec) { }, region, partitionBoundLeftEndpoint, leansRight) } - private def queryIndex(cb: EmitCodeBuilder, region: Value[Region], absIndex: Value[Long]): SBaseStructValue = { + def queryLastIndex(cb: EmitCodeBuilder, region: Value[Region]): SBaseStructValue = {queryIndex(cb, region, cb.memoize(cb.memoize(metadata.invoke[Long]("nKeys"))-1))} + def queryIndex(cb: EmitCodeBuilder, region: Value[Region], absIndex: Value[Long]): SBaseStructValue = { cb.invokeSCode( cb.emb.ecb.getOrGenEmitMethod("queryIndex", ("queryIndex", this),