[
https://issues.apache.org/jira/browse/PHOENIX-5317?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17054630#comment-17054630
]
Sandeep Guggilam commented on PHOENIX-5317:
-------------------------------------------
[~gjacoby] Regarding #2 in the above review comments, the method
getIndexPkColumnCount cannot be called for the first instance of this duplicate
code as it expects some class level variables which are not yet populated at
that point of time. This will be a bigger refactor change which can probably be
dealt in a different Jira . Should that be fine ?
Have incorporated #1 and uploaded the latest patch, the Hadoop QA run went
fine. Can you please have a look?
> Upserting rows into child views with pk fails when the base view has an index
> on it.
> ------------------------------------------------------------------------------------
>
> Key: PHOENIX-5317
> URL: https://issues.apache.org/jira/browse/PHOENIX-5317
> Project: Phoenix
> Issue Type: Sub-task
> Affects Versions: 4.13.0, 4.14.1
> Reporter: Jacob Isaac
> Assignee: Sandeep Guggilam
> Priority: Major
> Attachments: PHOENIX-5137-TestFailure.txt,
> PHOENIX-5317.4.x-HBase-1.3.v1.patch, PHOENIX-5317.4.x-HBase-1.3.v2.patch,
> PHOENIX-5317.4.x-HBase-1.3.v3.patch
>
>
> Steps to reproduce -
> 1 Create Base Table, Base/Global View and Index using non tenanted connection.
> CREATE TABLE IF NOT EXISTS TEST.BASETABLE (
> TENANT_ID CHAR(15) NOT NULL,
> KEY_PREFIX CHAR(3) NOT NULL,
> CREATED_DATE DATE,
> CREATED_BY CHAR(15),
> SYSTEM_MODSTAMP DATE
> CONSTRAINT PK PRIMARY KEY (
> TENANT_ID,
> KEY_PREFIX
> )
> ) VERSIONS=1, MULTI_TENANT=true, IMMUTABLE_ROWS=TRUE, REPLICATION_SCOPE=1;
> CREATE VIEW IF NOT EXISTS TEST.MY_GLOBAL_VIEW (
> TEXT1 VARCHAR NOT NULL,
> INT1 BIGINT NOT NULL,
> DOUBLE1 DECIMAL(12, 3),
> IS_BOOLEAN BOOLEAN,
> RELATIONSHIP_ID CHAR(15),
> TEXT_READ_ONLY VARCHAR,
> DATE_TIME1 DATE,
> JSON1 VARCHAR,
> IP_START_ADDRESS VARCHAR
> CONSTRAINT PKVIEW PRIMARY KEY
> (
> TEXT1, INT1
> )
> )
> AS SELECT * FROM TEST.BASETABLE WHERE KEY_PREFIX = '0CY';
> CREATE INDEX IF NOT EXISTS TEST_MY_GLOBAL_VIEW_SEC_INDEX
> ON TEST.MY_GLOBAL_VIEW (TEXT1, INT1)
> INCLUDE (CREATED_BY, RELATIONSHIP_ID, JSON1, DOUBLE1, IS_BOOLEAN,
> IP_START_ADDRESS, CREATED_DATE, SYSTEM_MODSTAMP, TEXT_READ_ONLY);
> 2. Create child view using an tenant-owned connection
> CREATE VIEW IF NOT EXISTS TEST."z01" (COL1 VARCHAR, COL2 VARCHAR, COL3
> VARCHAR, COL4 VARCHAR CONSTRAINT PK PRIMARY KEY (COL1, COL2, COL3, COL4)) AS
> SELECT * FROM TEST.MY_GLOBAL_VIEW;
> 3. Upsert into child view
> UPSERT INTO TEST."z01" (DATE_TIME1, INT1, TEXT1, COL1, COL2, COL3, COL4)
> VALUES (TO_DATE('2017-10-16 22:00:00', 'yyyy-MM-dd HH:mm:ss'), 10, 'zzzzz',
> '8', 'zzzzz', 'zzzzz', 'zzzzz');
> Following exception is thrown -
> 0: jdbc:phoenix:localhost> UPSERT INTO TEST."z01" (DATE_TIME1, INT1, TEXT1,
> COL1, COL2, COL3, COL4) VALUES (TO_DATE('2017-10-16 22:00:00', 'yyyy-MM-dd
> HH:mm:ss'), 10, 'zzzzz', '8', 'zzzzz', 'zzzzz', 'zzzzz');
> java.lang.IllegalArgumentException
> at
> com.google.common.base.Preconditions.checkArgument(Preconditions.java:76)
> at
> com.google.common.collect.Lists.computeArrayListCapacity(Lists.java:105)
> at
> com.google.common.collect.Lists.newArrayListWithExpectedSize(Lists.java:195)
> at
> org.apache.phoenix.index.IndexMaintainer.<init>(IndexMaintainer.java:424)
> at
> org.apache.phoenix.index.IndexMaintainer.create(IndexMaintainer.java:143)
> at
> org.apache.phoenix.schema.PTableImpl.getIndexMaintainer(PTableImpl.java:1176)
> at
> org.apache.phoenix.util.IndexUtil.generateIndexData(IndexUtil.java:303)
> at
> org.apache.phoenix.execute.MutationState$1.next(MutationState.java:519)
> at
> org.apache.phoenix.execute.MutationState$1.next(MutationState.java:501)
> at org.apache.phoenix.execute.MutationState.send(MutationState.java:941)
> at
> org.apache.phoenix.execute.MutationState.send(MutationState.java:1387)
> at
> org.apache.phoenix.execute.MutationState.commit(MutationState.java:1228)
> at
> org.apache.phoenix.jdbc.PhoenixConnection$3.call(PhoenixConnection.java:666)
> at
> org.apache.phoenix.jdbc.PhoenixConnection$3.call(PhoenixConnection.java:662)
> at org.apache.phoenix.call.CallRunner.run(CallRunner.java:53)
> at
> org.apache.phoenix.jdbc.PhoenixConnection.commit(PhoenixConnection.java:662)
> at
> org.apache.phoenix.jdbc.PhoenixStatement$2.call(PhoenixStatement.java:399)
> at
> org.apache.phoenix.jdbc.PhoenixStatement$2.call(PhoenixStatement.java:379)
> at org.apache.phoenix.call.CallRunner.run(CallRunner.java:53)
> at
> org.apache.phoenix.jdbc.PhoenixStatement.executeMutation(PhoenixStatement.java:378)
> at
> org.apache.phoenix.jdbc.PhoenixStatement.executeMutation(PhoenixStatement.java:366)
> at
> org.apache.phoenix.jdbc.PhoenixStatement.execute(PhoenixStatement.java:1775)
> at sqlline.Commands.execute(Commands.java:822)
> at sqlline.Commands.sql(Commands.java:732)
> at sqlline.SqlLine.dispatch(SqlLine.java:807)
> at sqlline.SqlLine.begin(SqlLine.java:681)
> at sqlline.SqlLine.start(SqlLine.java:398)
> at sqlline.SqlLine.main(SqlLine.java:292)
--
This message was sent by Atlassian Jira
(v8.3.4#803005)