[ 
https://issues.apache.org/jira/browse/PHOENIX-5712?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17194542#comment-17194542
 ] 

Xinyi Yan commented on PHOENIX-5712:
------------------------------------

With the approach that I listed below, the 4.14 client should not have a 
problem to for 4.15+ client created view index if 
phoenix.index.longViewIndex.enabled config is false. The 4.15 client shouldn't 
have any issue because VIEW_INDEX_ID_DATA_TYPE column is the place that handles 
SMALLINT/BIGINT. Here is what we gonna do:
 # adding LONG_VIEW_INDEX_ID column in 4.16 release, and the 4.16 client dual 
writes view index id value to LONG_VIEW_INDEX_ID and 
VIEW_INDEX_ID/VIEW_INDEX_ID_DATA_TYPE columns.
 # for 4.14 and 4.15 clients created view index, the 4.16 server-side should 
handle/check and update the view index id value to the LONG_VIEW_INDEX_ID 
column. 
 # adding extra logic during the upgrade path for updating view index id value 
to the LONG_VIEW_INDEX_ID column so that both columns have view index id 
information.
 # dropping VIEW_INDEX_ID/VIEW_INDEX_ID_DATA_TYPE in 4.17/4.18 release(depends 
on how many old versions that we want to support) and supporting view index id 
only through the LONG_VIEW_INDEX_ID column.

This approach will not solve the problem for querying VIEW_INDEX_ID from 
syscat(SMALLINT instead of BIGINT), but it can alternatively get view index id 
from the LONG_VIEW_INDEX_ID column instead. In the future, we should consider 
supporting server-side metadata management/control so that we have better 
flexibility to upgrade in the future release.  

cc [~larsh] [~gjacoby] [~ckulkarni] 

> Got SYSCAT  ILLEGAL_DATA exception after created tenant index on view
> ---------------------------------------------------------------------
>
>                 Key: PHOENIX-5712
>                 URL: https://issues.apache.org/jira/browse/PHOENIX-5712
>             Project: Phoenix
>          Issue Type: Bug
>    Affects Versions: 4.15.0
>            Reporter: Xinyi Yan
>            Priority: Blocker
>             Fix For: 5.1.0, 4.16.0
>
>         Attachments: 5712-WIP.txt, 5712-test.txt, t.txt
>
>
> repo
> //create a multi-tenant table on global connection
> CREATE TABLE A (TENANT_ID CHAR(15) NOT NULL, ID CHAR(3) NOT NULL, NUM BIGINT 
> CONSTRAINT PK PRIMARY KEY (TENANT_ID, ID)) MULTI_TENANT = true;
> // create view and index on tenant connection
> CREATE VIEW A_VIEW AS SELECT * FROM A;
> UPSERT INTO A_VIEW (ID, NUM) VALUES ('A', 1);
> CREATE INDEX A_VIEW_INDEX ON A_VIEW (NUM DESC) INCLUDE (ID);
> // qeury data on global connection 
> SELECT * RFOM SYSTEM.CATALOG;
> {code:java}
> Error: ERROR 201 (22000): Illegal data. Expected length of at least 8 bytes, 
> but had 3 (state=22000,code=201)
> java.sql.SQLException: ERROR 201 (22000): Illegal data. Expected length of at 
> least 8 bytes, but had 3
>         at 
> org.apache.phoenix.exception.SQLExceptionCode$Factory$1.newException(SQLExceptionCode.java:559)
>         at 
> org.apache.phoenix.exception.SQLExceptionInfo.buildException(SQLExceptionInfo.java:195)
>         at 
> org.apache.phoenix.schema.types.PDataType.checkForSufficientLength(PDataType.java:290)
>         at 
> org.apache.phoenix.schema.types.PLong$LongCodec.decodeLong(PLong.java:256)
>         at org.apache.phoenix.schema.types.PLong.toObject(PLong.java:115)
>         at org.apache.phoenix.schema.types.PLong.toObject(PLong.java:31)
>         at 
> org.apache.phoenix.schema.types.PDataType.toObject(PDataType.java:1011)
>         at 
> org.apache.phoenix.compile.ExpressionProjector.getValue(ExpressionProjector.java:75)
>         at 
> org.apache.phoenix.jdbc.PhoenixResultSet.getObject(PhoenixResultSet.java:585)
>         at sqlline.Rows$Row.<init>(Rows.java:258)
>         at sqlline.BufferedRows.nextList(BufferedRows.java:111)
>         at sqlline.BufferedRows.<init>(BufferedRows.java:52)
>         at sqlline.SqlLine.print(SqlLine.java:1623)
>         at sqlline.Commands.execute(Commands.java:982)
>         at sqlline.Commands.sql(Commands.java:906)
>         at sqlline.SqlLine.dispatch(SqlLine.java:740)
>         at sqlline.SqlLine.begin(SqlLine.java:557)
>         at sqlline.SqlLine.start(SqlLine.java:270)
>         at sqlline.SqlLine.main(SqlLine.java:201)
> {code}
> I tried to drop the view, and I was able to query the data from the SYSCATA. 
> I tested on 4.x-HBase1.3 and master branch, all branches have the same 
> behavior.
>  
> cc [~kadir] [~gjacoby] [~swaroopa]
>  



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to