[ https://issues.apache.org/jira/browse/PHOENIX-1224?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14116932#comment-14116932 ]
James Taylor commented on PHOENIX-1224: --------------------------------------- Would be good if this was fixed in conjunction with supporting a skip scan over a partial rvc match. > Dead loop in hbase scan when hint SKIP_SCAN is set and there is partial key > match in RowValueConstructor > -------------------------------------------------------------------------------------------------------- > > Key: PHOENIX-1224 > URL: https://issues.apache.org/jira/browse/PHOENIX-1224 > Project: Phoenix > Issue Type: Bug > Affects Versions: 3.0.0, 4.0.0, 5.0.0 > Reporter: Maryann Xue > Assignee: Kyle Buzsaki > Original Estimate: 48h > Remaining Estimate: 48h > > The below test will end up in dead loop in hbase scan. > {code} > @Test > public void testForceSkipScan() throws Exception { > String tempTableWithCompositePK = "TEMP_TABLE_COMPOSITE_PK"; > Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES); > Connection conn = DriverManager.getConnection(getUrl(), props); > try { > conn.createStatement().execute("CREATE TABLE " + > tempTableWithCompositePK > + " (col0 INTEGER NOT NULL, " > + " col1 INTEGER NOT NULL, " > + " col2 INTEGER NOT NULL, " > + " col3 INTEGER " > + " CONSTRAINT pk PRIMARY KEY (col0, col1, col2)) " > + " SALT_BUCKETS=4"); > > PreparedStatement upsertStmt = conn.prepareStatement( > "upsert into " + tempTableWithCompositePK + "(col0, col1, > col2, col3) " + "values (?, ?, ?, ?)"); > for (int i = 0; i < 3; i++) { > upsertStmt.setInt(1, i + 1); > upsertStmt.setInt(2, i + 2); > upsertStmt.setInt(3, i + 3); > upsertStmt.setInt(4, i + 5); > upsertStmt.execute(); > } > conn.commit(); > > String query = "SELECT /*+ SKIP_SCAN*/ * FROM " + > tempTableWithCompositePK + " WHERE (col0, col1) in ((2, 3), (3, 4), (4, 5))"; > PreparedStatement statement = conn.prepareStatement(query); > ResultSet rs = statement.executeQuery(); > assertTrue(rs.next()); > assertEquals(rs.getInt(1), 2); > assertEquals(rs.getInt(2), 3); > assertEquals(rs.getInt(3), 4); > assertEquals(rs.getInt(4), 6); > assertTrue(rs.next()); > assertEquals(rs.getInt(1), 3); > assertEquals(rs.getInt(2), 4); > assertEquals(rs.getInt(3), 5); > assertEquals(rs.getInt(4), 7); > assertFalse(rs.next()); > } finally { > conn.close(); > } > } > {code} > The dead-loop thread: > {panel} > "defaultRpcServer.handler=4,queue=0,port=58945" daemon prio=10 > tid=0x00007fe4d408c000 nid=0x7bba runnable [0x00007fe4c10cf000] > java.lang.Thread.State: RUNNABLE > at java.util.ArrayList.size(ArrayList.java:177) > at java.util.AbstractList$Itr.hasNext(AbstractList.java:339) > at > org.apache.hadoop.hbase.filter.FilterList.filterAllRemaining(FilterList.java:199) > at > org.apache.hadoop.hbase.regionserver.ScanQueryMatcher.match(ScanQueryMatcher.java:263) > at > org.apache.hadoop.hbase.regionserver.StoreScanner.next(StoreScanner.java:469) > at > org.apache.hadoop.hbase.regionserver.KeyValueHeap.next(KeyValueHeap.java:140) > at > org.apache.hadoop.hbase.regionserver.HRegion$RegionScannerImpl.populateResult(HRegion.java:3937) > at > org.apache.hadoop.hbase.regionserver.HRegion$RegionScannerImpl.nextInternal(HRegion.java:4017) > at > org.apache.hadoop.hbase.regionserver.HRegion$RegionScannerImpl.nextRaw(HRegion.java:3885) > at > org.apache.hadoop.hbase.regionserver.HRegion$RegionScannerImpl.nextRaw(HRegion.java:3876) > at > org.apache.phoenix.coprocessor.ScanRegionObserver$2.nextRaw(ScanRegionObserver.java:366) > at > org.apache.phoenix.coprocessor.DelegateRegionScanner.nextRaw(DelegateRegionScanner.java:76) > at > org.apache.hadoop.hbase.regionserver.HRegionServer.scan(HRegionServer.java:3157) > - locked <0x0000000778d5dbd8> (a > org.apache.phoenix.coprocessor.BaseScannerRegionObserver$1) > at > org.apache.hadoop.hbase.protobuf.generated.ClientProtos$ClientService$2.callBlockingMethod(ClientProtos.java:29497) > at org.apache.hadoop.hbase.ipc.RpcServer.call(RpcServer.java:2027) > at org.apache.hadoop.hbase.ipc.CallRunner.run(CallRunner.java:98) > at > org.apache.hadoop.hbase.ipc.RpcExecutor.consumerLoop(RpcExecutor.java:114) > at org.apache.hadoop.hbase.ipc.RpcExecutor$1.run(RpcExecutor.java:94) > at java.lang.Thread.run(Thread.java:662) > {panel} -- This message was sent by Atlassian JIRA (v6.3.4#6332)