This is an automated email from the ASF dual-hosted git repository.
palashc pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/phoenix.git
The following commit(s) were added to refs/heads/master by this push:
new 1ddf167b02 PHOENIX-7599: Fix count of rows scanned metric for
uncovered indexes (#2139)
1ddf167b02 is described below
commit 1ddf167b02899a27e3bdff2c98b0fe1042476b93
Author: Palash Chauhan <[email protected]>
AuthorDate: Mon May 19 13:49:11 2025 -0700
PHOENIX-7599: Fix count of rows scanned metric for uncovered indexes (#2139)
Co-authored-by: Palash Chauhan
<[email protected]>
---
.../coprocessor/UncoveredIndexRegionScanner.java | 24 ++++++++++++++--------
.../UncoveredLocalIndexRegionScanner.java | 13 ++++++------
.../phoenix/monitoring/CountRowsScannedIT.java | 20 ++++++++++++++++++
3 files changed, 42 insertions(+), 15 deletions(-)
diff --git
a/phoenix-core-server/src/main/java/org/apache/phoenix/coprocessor/UncoveredIndexRegionScanner.java
b/phoenix-core-server/src/main/java/org/apache/phoenix/coprocessor/UncoveredIndexRegionScanner.java
index 70977a545b..06e8622038 100644
---
a/phoenix-core-server/src/main/java/org/apache/phoenix/coprocessor/UncoveredIndexRegionScanner.java
+++
b/phoenix-core-server/src/main/java/org/apache/phoenix/coprocessor/UncoveredIndexRegionScanner.java
@@ -220,11 +220,14 @@ public abstract class UncoveredIndexRegionScanner extends
BaseRegionScanner {
protected boolean scanIndexTableRows(List<Cell> result,
final long startTime,
final byte[] actualStartKey,
- final int offset) throws IOException {
+ final int offset,
+ ScannerContext scannerContext) throws
IOException {
boolean hasMore = false;
if (actualStartKey != null) {
do {
- hasMore = innerScanner.nextRaw(result);
+ hasMore = scannerContext != null
+ ? innerScanner.nextRaw(result, scannerContext)
+ : innerScanner.nextRaw(result);
if (result.isEmpty()) {
return hasMore;
}
@@ -249,7 +252,9 @@ public abstract class UncoveredIndexRegionScanner extends
BaseRegionScanner {
do {
List<Cell> row = new ArrayList<Cell>();
if (result.isEmpty()) {
- hasMore = innerScanner.nextRaw(row);
+ hasMore = scannerContext != null
+ ? innerScanner.nextRaw(row, scannerContext)
+ : innerScanner.nextRaw(row);
} else {
row.addAll(result);
result.clear();
@@ -289,8 +294,9 @@ public abstract class UncoveredIndexRegionScanner extends
BaseRegionScanner {
}
protected boolean scanIndexTableRows(List<Cell> result,
- final long startTime) throws
IOException {
- return scanIndexTableRows(result, startTime, null, 0);
+ final long startTime,
+ ScannerContext scannerContext) throws
IOException {
+ return scanIndexTableRows(result, startTime, null, 0, scannerContext);
}
private boolean verifyIndexRowAndRepairIfNecessary(Result dataRow, byte[]
indexRowKey,
@@ -381,8 +387,8 @@ public abstract class UncoveredIndexRegionScanner extends
BaseRegionScanner {
}
}
- public boolean next(List<Cell> result, ScannerContext scannerContext)
throws IOException {
- return next(result);
+ public boolean next(List<Cell> result) throws IOException {
+ return next(result, null);
}
/**
@@ -399,7 +405,7 @@ public abstract class UncoveredIndexRegionScanner extends
BaseRegionScanner {
* @throws IOException
*/
@Override
- public boolean next(List<Cell> result) throws IOException {
+ public boolean next(List<Cell> result, ScannerContext scannerContext)
throws IOException {
long startTime = EnvironmentEdgeManager.currentTimeMillis();
boolean hasMore;
region.startRegionOperation();
@@ -416,7 +422,7 @@ public abstract class UncoveredIndexRegionScanner extends
BaseRegionScanner {
state = State.SCANNING_INDEX;
}
if (state == State.SCANNING_INDEX) {
- hasMore = scanIndexTableRows(result, startTime);
+ hasMore = scanIndexTableRows(result, startTime,
scannerContext);
if (isDummy(result)) {
updateDummyWithPrevRowKey(result, initStartRowKey,
includeInitStartRowKey,
scan);
diff --git
a/phoenix-core-server/src/main/java/org/apache/phoenix/coprocessor/UncoveredLocalIndexRegionScanner.java
b/phoenix-core-server/src/main/java/org/apache/phoenix/coprocessor/UncoveredLocalIndexRegionScanner.java
index 39b8733a0e..31301c2839 100644
---
a/phoenix-core-server/src/main/java/org/apache/phoenix/coprocessor/UncoveredLocalIndexRegionScanner.java
+++
b/phoenix-core-server/src/main/java/org/apache/phoenix/coprocessor/UncoveredLocalIndexRegionScanner.java
@@ -120,18 +120,19 @@ public class UncoveredLocalIndexRegionScanner extends
UncoveredIndexRegionScanne
@Override
protected boolean scanIndexTableRows(List<Cell> result,
- final long startTime) throws
IOException {
- return scanIndexTableRows(result, startTime, actualStartKey, offset);
+ final long startTime,
+ ScannerContext scannerContext) throws
IOException {
+ return scanIndexTableRows(result, startTime, actualStartKey, offset,
scannerContext);
}
@Override
- public boolean next(List<Cell> result) throws IOException {
- boolean hasMore = super.next(result);
+ public boolean next(List<Cell> result, ScannerContext scannerContext)
throws IOException {
+ boolean hasMore = super.next(result, scannerContext);
ServerIndexUtil.wrapResultUsingOffset(result, offset);
return hasMore;
}
- public boolean next(List<Cell> result, ScannerContext scannerContext)
throws IOException {
- return next(result);
+ public boolean next(List<Cell> result) throws IOException {
+ return next(result, null);
}
}
diff --git
a/phoenix-core/src/it/java/org/apache/phoenix/monitoring/CountRowsScannedIT.java
b/phoenix-core/src/it/java/org/apache/phoenix/monitoring/CountRowsScannedIT.java
index d074d4a483..9a3a894e6c 100644
---
a/phoenix-core/src/it/java/org/apache/phoenix/monitoring/CountRowsScannedIT.java
+++
b/phoenix-core/src/it/java/org/apache/phoenix/monitoring/CountRowsScannedIT.java
@@ -215,6 +215,26 @@ public class CountRowsScannedIT extends BaseTest {
Assert.assertEquals(indexName,
stmt.getQueryPlan().getTableRef().getTable().getTableName().toString());
}
+ @Test
+ public void testQueryUncoveredIndex() throws Exception {
+ Connection conn = DriverManager.getConnection(getUrl());
+ String tableName = generateUniqueName();
+ String indexName = generateUniqueName();
+ PhoenixStatement stmt =
conn.createStatement().unwrap(PhoenixStatement.class);
+ stmt.execute("CREATE TABLE " + tableName
+ + " (A UNSIGNED_LONG NOT NULL PRIMARY KEY, Z UNSIGNED_LONG)");
+ stmt.execute("CREATE UNCOVERED INDEX " + indexName + " ON " +
tableName + "(Z)");
+ for (int i = 1; i <= 100; i++) {
+ String sql = String.format("UPSERT INTO %s VALUES (%d, %d)",
tableName, i, i);
+ stmt.execute(sql);
+ }
+ conn.commit();
+ String selectQuery = "SELECT A FROM " + tableName + " WHERE Z > 34 AND
Z < 63";
+ long count = countRowsScannedFromSql(stmt, selectQuery);
+ assertEquals(28, count);
+ Assert.assertEquals(indexName,
stmt.getQueryPlan().getTableRef().getTable().getTableName().toString());
+ }
+
@Test
public void testJoin() throws Exception {
Connection conn = DriverManager.getConnection(getUrl());