[ https://issues.apache.org/jira/browse/ASTERIXDB-3586?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17944638#comment-17944638 ]
ASF subversion and git services commented on ASTERIXDB-3586: ------------------------------------------------------------ Commit b88d3fc569ebb507ab5584b22b8e622619ad463d in asterixdb's branch refs/heads/master from Ritik Raj [ https://gitbox.apache.org/repos/asf?p=asterixdb.git;h=b88d3fc569 ] [ASTERIXDB-3586][STO] Sync tupleIndex while skipping tuples - user model changes: no - storage format changes: no - interface changes: yes Details: When `compiler.column.filter` is enabled, the assembler’s `valueIndex` (denoted as `tupleIndex` currently) may become out of sync with the filter’s `tupleIndex`. This misalignment between the filter and assembler can lead to incorrect query results. This change ensures proper synchronization of `tupleIndex` while skipping tuples to maintain correctness. Ext-ref: MB-66000 Change-Id: I260612851c4dabfb9e74f2902f421720d9f88657 Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/19555 Integration-Tests: Jenkins <jenk...@fulliautomatix.ics.uci.edu> Tested-by: Jenkins <jenk...@fulliautomatix.ics.uci.edu> Reviewed-by: Peeyush Gupta <peeyush.gu...@couchbase.com> > Internal error while query evaluation > ------------------------------------- > > Key: ASTERIXDB-3586 > URL: https://issues.apache.org/jira/browse/ASTERIXDB-3586 > Project: Apache AsterixDB > Issue Type: Bug > Components: STO - Storage > Affects Versions: 0.9.9 > Reporter: Ritik Raj > Assignee: Ritik Raj > Priority: Critical > Labels: triaged > Fix For: 0.9.10 > > > On running the following query with the filter > {code:java} > SET `compiler.column.filter` "true"; > SELECT `field1`, `field2`, `field3` > FROM acollection > WHERE ( > `field1` = $field1 .... AND > `updated_at` BETWEEN "2024-06-19" AND "2024-11-30" > ) LIMIT $limit; > {code} > an Internal error was thrown when the updated_at is between "2024-06-19" AND > "2024-11-30" but works fine for "2024-05-19" AND "2024-11-30". > On Investigation, it seems to be coming from how the column filter evaluates > the tupleIndex. > There are three components which maintain their own version of tuple Index, > when it comes to column filter evaluation. > 1. *Cursor* for the component which goes over the stored tuple in memory or > disk component > 2. *FIlterIterator* which maintains their own version of tupleIndex for > deciding the current tuple satisfying the filter condition > 3. {*}Column Assembler{*}, which maintains *their* tupleIndex to know the > number of tuple assembled. > and if there are antimatters (deleted entrries) are present > {{Column Assembler’s tupleIndex <= Cursor’s tupleIndex}} > {{Column Assembler’s tupleIndex <= Filter’s tupleIndex}} > {{as there are less tuples for the assembler to assemble.}} > Based on the findings, there can be a case where there is disparity between > the *three* tupleIndexes, which caused the Column Assembler’s tupleIndex > to be skipped to a point beyond the tupleIndex that can be assembled, giving > the following error: > > {code:java} > Caused by: > org.apache.hyracks.storage.am.lsm.btree.column.error.ColumnarValueException: > {"PrimitiveValueAssembler":{"isDelegate":false,"assemblerReader":{"typeTag":"string","columnIndex":53,"valueIndex":902,"valueCount":902,"allMissing":false,"level":0,"maxLevel":1,"nullBitMask":2,"numberOfEncounteredMissing":268,"numberOfEncounteredNull":0,"numberOfDecodersRequired":1,"maxLevelsEncountered":"{1}","isPrimaryKeyColumn":false}},"ColumnAssembler":{"tupleIndex":903,"numberOfTuples":980,"numberOfSkips":896},"AssemblerState":{"inGroup":false},"QueryColumnWithMetaTupleReference":{"isAntiMatter":false,"previousIndex":757,"primaryKeyReaders":[{"typeTag":"string","columnIndex":0,"valueIndex":980,"valueCount":980,"allMissing":false,"level":1,"maxLevel":1,"nullBitMask":2,"numberOfEncounteredMissing":78,"numberOfEncounteredNull":0,"numberOfDecodersRequired":1,"maxLevelsEncountered":"{1}","isPrimaryKeyColumn":true}]}} > at > org.apache.asterix.column.assembler.PrimitiveValueAssembler.createException(PrimitiveValueAssembler.java:67) > ~[asterix-column-1.1.0-1238.jar:1.1.0-1238] at > org.apache.asterix.column.assembler.PrimitiveValueAssembler.next(PrimitiveValueAssembler.java:50) > ~[asterix-column-1.1.0-1238.jar:1.1.0-1238] at > org.apache.asterix.column.operation.query.ColumnAssembler.nextValue(ColumnAssembler.java:86) > ~[asterix-column-1.1.0-1238.jar:1.1.0-1238] at > org.apache.asterix.column.tuple.QueryColumnWithMetaTupleReference.getFilteredAssembledValue(QueryColumnWithMetaTupleReference.java:195) > ~[asterix-column-1.1.0-1238.jar:1.1.0-1238] at > org.apache.asterix.column.tuple.QueryColumnWithMetaTupleReference.getAssembledValue(QueryColumnWithMetaTupleReference.java:154) > ~[asterix-column-1.1.0-1238.jar:1.1.0-1238] at > org.apache.asterix.column.operation.query.QueryColumnWithMetaTupleProjector.getAssembledValue(QueryColumnWithMetaTupleProjector.java:76) > ~[asterix-column-1.1.0-1238.jar:1.1.0-1238] at > org.apache.asterix.column.operation.query.QueryColumnTupleProjector.project(QueryColumnTupleProjector.java:93) > ~[asterix-column-1.1.0-1238.jar:1.1.0-1238] at > org.apache.hyracks.storage.am.common.dataflow.IndexSearchOperatorNodePushable.writeTupleToOutput(IndexSearchOperatorNodePushable.java:401) > ~[hyracks-storage-am-common-1.1.0-1238.jar:1.1.0-1238] at > org.apache.hyracks.storage.am.common.dataflow.IndexSearchOperatorNodePushable.writeSearchResults(IndexSearchOperatorNodePushable.java:274) > ~[hyracks-storage-am-common-1.1.0-1238.jar:1.1.0-1238] at > org.apache.hyracks.storage.am.common.dataflow.IndexSearchOperatorNodePushable.searchAllPartitions(IndexSearchOperatorNodePushable.java:470) > ~[hyracks-storage-am-common-1.1.0-1238.jar:1.1.0-1238] at > org.apache.hyracks.storage.am.common.dataflow.IndexSearchOperatorNodePushable.nextFrame(IndexSearchOperatorNodePushable.java:316) > ~[hyracks-storage-am-common-1.1.0-1238.jar:1.1.0-1238] at > org.apache.hyracks.dataflow.common.comm.io.AbstractFrameAppender.write(AbstractFrameAppender.java:94) > ~[hyracks-dataflow-common-1.1.0-1238.jar:1.1.0-1238] at > org.apache.hyracks.algebricks.runtime.operators.std.EmptyTupleSourceRuntimeFactory$1.open(EmptyTupleSourceRuntimeFactory.java:55) > ~[algebricks-runtime-1.1.0-1238.jar:1.1.0-1238] at > org.apache.hyracks.algebricks.runtime.operators.meta.AlgebricksMetaOperatorDescriptor$SourcePushRuntime.initialize(AlgebricksMetaOperatorDescriptor.java:175) > ~[algebricks-runtime-1.1.0-1238.jar:1.1.0-1238] at > org.apache.hyracks.api.rewriter.runtime.SuperActivityOperatorNodePushable.lambda$runInParallel$0(SuperActivityOperatorNodePushable.java:245) > ~[hyracks-api-1.1.0-1238.jar:1.1.0-1238] at > java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317) ~[?:?] ... > 3 more > > {code} > > {code:java} > { > "PrimitiveValueAssembler": > { > "isDelegate": false, > "assemblerReader": > { > "typeTag": "string", > "columnIndex": 53, > "valueIndex": 902, > "valueCount": 902, ------- (1) > "allMissing": false, > "level": 0, > "maxLevel": 1, > "nullBitMask": 2, > "numberOfEncounteredMissing": 268, > "numberOfEncounteredNull": 0, > "numberOfDecodersRequired": 1, > "maxLevelsEncountered": "{1}", > "isPrimaryKeyColumn": false > } > }, > "ColumnAssembler": > { > "tupleIndex": 903, ------ (4) > "numberOfTuples": 980, > "numberOfSkips": 896 > }, > "AssemblerState": > { > "inGroup": false > }, > "QueryColumnWithMetaTupleReference": > { > "isAntiMatter": false, > "previousIndex": 757, > "primaryKeyReaders": > [ > { > "typeTag": "string", > "columnIndex": 0, > "valueIndex": 980, > "valueCount": 980, ----- (2) > "allMissing": false, > "level": 1, > "maxLevel": 1, > "nullBitMask": 2, > "numberOfEncounteredMissing": 78, -------- (3) > "numberOfEncounteredNull": 0, > "numberOfDecodersRequired": 1, > "maxLevelsEncountered": "{1}", > "isPrimaryKeyColumn": true > } > ] > } > }{code} > From logs: > * *Total Tuples:* 980 > * *Deleted Tuples (antimatters):* 78 > * *Valid Value Tuples to Assemble:* 902 (980 - 78) > * *Column Assembler Tuple Index:* 903 (exceeds valid range) > Since {*}tupleIndex (903) > available tuples (902){*}, the assembler fails > due to no more values. -- This message was sent by Atlassian Jira (v8.20.10#820010)