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);