From a09e27de7e4303f157b0710cdf4d21d02316bad7 Mon Sep 17 00:00:00 2001
From: Palash Chauhan
Date: Fri, 12 Dec 2025 19:16:51 -0800
Subject: [PATCH 1/2] PHOENIX-7743 : Fix TNFE in IndexTool server side builds
for case sensitive names
---
.../PhoenixServerBuildIndexInputFormat.java | 20 ++++++++++++++++---
.../phoenix/mapreduce/index/IndexTool.java | 2 +-
2 files changed, 18 insertions(+), 4 deletions(-)
diff --git a/phoenix-core-server/src/main/java/org/apache/phoenix/mapreduce/PhoenixServerBuildIndexInputFormat.java b/phoenix-core-server/src/main/java/org/apache/phoenix/mapreduce/PhoenixServerBuildIndexInputFormat.java
index ba9abe77ce0..6c5285a971a 100644
--- a/phoenix-core-server/src/main/java/org/apache/phoenix/mapreduce/PhoenixServerBuildIndexInputFormat.java
+++ b/phoenix-core-server/src/main/java/org/apache/phoenix/mapreduce/PhoenixServerBuildIndexInputFormat.java
@@ -62,6 +62,7 @@
import org.apache.phoenix.util.EnvironmentEdgeManager;
import org.apache.phoenix.util.PhoenixRuntime;
import org.apache.phoenix.util.ScanUtil;
+import org.apache.phoenix.util.SchemaUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -92,8 +93,9 @@ private class TransformingDataTableQueryPlanBuilder implements QueryPlanBuilder
public QueryPlan getQueryPlan(PhoenixConnection phoenixConnection, String oldTableFullName,
String newTableFullName) throws SQLException {
PTable newTable = phoenixConnection.getTableNoCache(newTableFullName);
+ String quotedOldTableName = getQuotedTableNameForSQL(oldTableFullName);
ServerBuildTransformingTableCompiler compiler =
- new ServerBuildTransformingTableCompiler(phoenixConnection, oldTableFullName);
+ new ServerBuildTransformingTableCompiler(phoenixConnection, quotedOldTableName);
MutationPlan plan = compiler.compile(newTable);
return plan.getQueryPlan();
}
@@ -104,8 +106,9 @@ private class DataTableQueryPlanBuilder implements QueryPlanBuilder {
public QueryPlan getQueryPlan(PhoenixConnection phoenixConnection, String dataTableFullName,
String indexTableFullName) throws SQLException {
PTable indexTable = phoenixConnection.getTableNoCache(indexTableFullName);
+ String quotedDataTableName = getQuotedTableNameForSQL(dataTableFullName);
ServerBuildIndexCompiler compiler =
- new ServerBuildIndexCompiler(phoenixConnection, dataTableFullName);
+ new ServerBuildIndexCompiler(phoenixConnection, quotedDataTableName);
MutationPlan plan = compiler.compile(indexTable);
return plan.getQueryPlan();
}
@@ -117,7 +120,8 @@ public QueryPlan getQueryPlan(PhoenixConnection phoenixConnection, String dataTa
String indexTableFullName) throws SQLException {
QueryPlan plan;
try (final PhoenixStatement statement = new PhoenixStatement(phoenixConnection)) {
- String query = "SELECT count(*) FROM " + indexTableFullName;
+ String quotedIndexName = getQuotedTableNameForSQL(indexTableFullName);
+ String query = "SELECT count(*) FROM " + quotedIndexName;
plan = statement.compileQuery(query);
TableRef tableRef = plan.getTableRef();
Scan scan = plan.getContext().getScan();
@@ -139,6 +143,16 @@ public QueryPlan getQueryPlan(PhoenixConnection phoenixConnection, String dataTa
private QueryPlanBuilder queryPlanBuilder;
+ /**
+ * Quotes table name for SQL generation if case sensitivity is needed.
+ * Extracts schema and table from normalized name and uses SchemaUtil to add quotes.
+ */
+ private String getQuotedTableNameForSQL(String normalizedFullTableName) {
+ String schemaName = SchemaUtil.getSchemaNameFromFullName(normalizedFullTableName);
+ String tableName = SchemaUtil.getTableNameFromFullName(normalizedFullTableName);
+ return SchemaUtil.getFullTableNameWithQuotes(schemaName, tableName);
+ }
+
@Override
protected QueryPlan getQueryPlan(final JobContext context, final Configuration configuration)
throws IOException {
diff --git a/phoenix-core-server/src/main/java/org/apache/phoenix/mapreduce/index/IndexTool.java b/phoenix-core-server/src/main/java/org/apache/phoenix/mapreduce/index/IndexTool.java
index 92d4d01c559..ada6604dce0 100644
--- a/phoenix-core-server/src/main/java/org/apache/phoenix/mapreduce/index/IndexTool.java
+++ b/phoenix-core-server/src/main/java/org/apache/phoenix/mapreduce/index/IndexTool.java
@@ -754,7 +754,7 @@ private Job configureJobForServerBuildIndex() throws Exception {
configuration.setBooleanIfUnset(
PhoenixConfigurationUtil.MAPREDUCE_RANDOMIZE_MAPPER_EXECUTION_ORDER, true);
- PhoenixConfigurationUtil.setIndexToolDataTableName(configuration, dataTableWithSchema);
+ PhoenixConfigurationUtil.setIndexToolDataTableName(configuration, qDataTable);
PhoenixConfigurationUtil.setIndexToolIndexTableName(configuration, qIndexTable);
PhoenixConfigurationUtil.setIndexToolSourceTable(configuration, sourceTable);
if (startTime != null) {
From 4f5d54e1547eb68c1986d756afc83b8a1e7b09e3 Mon Sep 17 00:00:00 2001
From: Palash Chauhan
Date: Sat, 13 Dec 2025 10:03:28 -0800
Subject: [PATCH 2/2] remove comment
---
.../phoenix/mapreduce/PhoenixServerBuildIndexInputFormat.java | 4 ----
1 file changed, 4 deletions(-)
diff --git a/phoenix-core-server/src/main/java/org/apache/phoenix/mapreduce/PhoenixServerBuildIndexInputFormat.java b/phoenix-core-server/src/main/java/org/apache/phoenix/mapreduce/PhoenixServerBuildIndexInputFormat.java
index 6c5285a971a..5bae99d8832 100644
--- a/phoenix-core-server/src/main/java/org/apache/phoenix/mapreduce/PhoenixServerBuildIndexInputFormat.java
+++ b/phoenix-core-server/src/main/java/org/apache/phoenix/mapreduce/PhoenixServerBuildIndexInputFormat.java
@@ -143,10 +143,6 @@ public QueryPlan getQueryPlan(PhoenixConnection phoenixConnection, String dataTa
private QueryPlanBuilder queryPlanBuilder;
- /**
- * Quotes table name for SQL generation if case sensitivity is needed.
- * Extracts schema and table from normalized name and uses SchemaUtil to add quotes.
- */
private String getQuotedTableNameForSQL(String normalizedFullTableName) {
String schemaName = SchemaUtil.getSchemaNameFromFullName(normalizedFullTableName);
String tableName = SchemaUtil.getTableNameFromFullName(normalizedFullTableName);