You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@phoenix.apache.org by pa...@apache.org on 2025/05/19 20:49:16 UTC
(phoenix) branch master updated: PHOENIX-7599: Fix count of rows scanned metric for uncovered indexes (#2139)
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 <pa...@gmail.com>
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 <p....@pchauha-ltmgv47.internal.salesforce.com>
---
.../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());