[
https://issues.apache.org/jira/browse/PHOENIX-7035?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17772079#comment-17772079
]
ASF GitHub Bot commented on PHOENIX-7035:
-----------------------------------------
stoty commented on code in PR #1675:
URL: https://github.com/apache/phoenix/pull/1675#discussion_r1326867147
##########
phoenix-core/src/main/java/org/apache/phoenix/index/IndexMaintainer.java:
##########
@@ -634,6 +638,23 @@ private Void addDataColInfo(final PTable dataTable,
Expression expression) {
}
return null;
}
+
+ private boolean tableHasOnlyPkCols(PTable dataTable,
byte[] cf) {
+ try {
+ dataTable.getColumnFamily(cf);
+ } catch (ColumnFamilyNotFoundException e) {
+ List<PColumn> columns = dataTable.getColumns();
+ if (columns != null && columns.size() > 0) {
+ boolean nonPkPresent = columns.stream()
+ .anyMatch(column ->
column.getFamilyName() != null);
Review Comment:
Iterating over the columns seems a bit awkward.
Can't we detect this case in the outer catch block, and return null from
there ?
> Index on data table with only pk columns result into invalid state
> ------------------------------------------------------------------
>
> Key: PHOENIX-7035
> URL: https://issues.apache.org/jira/browse/PHOENIX-7035
> Project: Phoenix
> Issue Type: Bug
> Affects Versions: 5.1.3
> Reporter: Viraj Jasani
> Assignee: Viraj Jasani
> Priority: Major
> Fix For: 5.2.0, 5.1.4
>
>
> For a given data table with only primary keys (and no other non-pk columns),
> creating uncovered or covered index on a function results in the index table
> getting stuck in the BUILDING state:
> {code:java}
> CREATE TABLE T1 (ID VARCHAR(15) NOT NULL PRIMARY KEY);
> CREATE INDEX IDX_T1 ON T1 (PHOENIX_ROW_TIMESTAMP()); {code}
> CREATE INDEX results into:
> {code:java}
> Error: ERROR 1001 (42I01): Undefined column family. familyName=0
> (state=42I01,code=1001)
> org.apache.phoenix.schema.ColumnFamilyNotFoundException: ERROR 1001 (42I01):
> Undefined column family. familyName=0
> at
> org.apache.phoenix.schema.PTableImpl.getColumnFamily(PTableImpl.java:1592)
> at
> org.apache.phoenix.index.IndexMaintainer$5.addDataColInfo(IndexMaintainer.java:617)
> at
> org.apache.phoenix.index.IndexMaintainer$5.visit(IndexMaintainer.java:593)
> at
> org.apache.phoenix.index.IndexMaintainer$5.visit(IndexMaintainer.java:590)
> at
> org.apache.phoenix.expression.KeyValueColumnExpression.accept(KeyValueColumnExpression.java:143)
> at
> org.apache.phoenix.expression.BaseExpression.acceptChildren(BaseExpression.java:244)
> at
> org.apache.phoenix.expression.function.ScalarFunction.accept(ScalarFunction.java:70)
> at
> org.apache.phoenix.index.IndexMaintainer.<init>(IndexMaintainer.java:638)
> at
> org.apache.phoenix.index.IndexMaintainer.create(IndexMaintainer.java:148)
> at
> org.apache.phoenix.schema.PTableImpl.getIndexMaintainer(PTableImpl.java:1725)
> at
> org.apache.phoenix.compile.ServerBuildIndexCompiler.compile(ServerBuildIndexCompiler.java:104)
> at
> org.apache.phoenix.schema.MetaDataClient.getMutationPlanForBuildingIndex(MetaDataClient.java:1285)
> at
> org.apache.phoenix.schema.MetaDataClient.buildIndex(MetaDataClient.java:1294)
> at
> org.apache.phoenix.schema.MetaDataClient.createIndex(MetaDataClient.java:1698)
> at
> org.apache.phoenix.compile.CreateIndexCompiler$1.execute(CreateIndexCompiler.java:85)
> at
> org.apache.phoenix.jdbc.PhoenixStatement$2.call(PhoenixStatement.java:559)
> at
> org.apache.phoenix.jdbc.PhoenixStatement$2.call(PhoenixStatement.java:525)
> at org.apache.phoenix.call.CallRunner.run(CallRunner.java:53)
> at
> org.apache.phoenix.jdbc.PhoenixStatement.executeMutation(PhoenixStatement.java:524)
> at
> org.apache.phoenix.jdbc.PhoenixStatement.executeMutation(PhoenixStatement.java:512)
> at
> org.apache.phoenix.jdbc.PhoenixStatement.execute(PhoenixStatement.java:2202)
> at sqlline.Commands.executeSingleQuery(Commands.java:1054)
> at sqlline.Commands.execute(Commands.java:1003)
> at sqlline.Commands.sql(Commands.java:967)
> at sqlline.SqlLine.dispatch(SqlLine.java:734)
> at sqlline.SqlLine.begin(SqlLine.java:541)
> at sqlline.SqlLine.start(SqlLine.java:267)
> at sqlline.SqlLine.main(SqlLine.java:206) {code}
>
> While the index table does get created, it stays in the BUILDING state
> because the index build fails to generate IndexMaintainer for the given index
> table.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)