[ 
https://issues.apache.org/jira/browse/PHOENIX-2276?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Maryann Xue updated PHOENIX-2276:
---------------------------------
    Attachment: PHOENIX-2276-1.fix

[~samarthjain], [~jamestaylor], I think the reason is basically about different 
behaviors for setting the tenantId bytes in different classes. In this case, 
it's between BaseQueryPlan and ServerCacheClient. One is to set the cache and 
the other (BaseQueryPlan) is to read from the cache. We should probably wrap 
these lines in a method to ensure that the tenantId bytes are always set the 
same way.
Still there's another problem with removing the cache with this "fix" patch. If 
you guys allow me more time, I can probably fix it by tomorrow.

> Creating index on a global view on a multi-tenant table fails with NPE
> ----------------------------------------------------------------------
>
>                 Key: PHOENIX-2276
>                 URL: https://issues.apache.org/jira/browse/PHOENIX-2276
>             Project: Phoenix
>          Issue Type: Bug
>            Reporter: Samarth Jain
>            Assignee: Samarth Jain
>              Labels: SFDC
>             Fix For: 4.8.0
>
>         Attachments: PHOENIX-2276-1.fix, PHOENIX-2276.patch
>
>
> {code}
> @Test
>     public void testCreatingIndexOnGlobalView() throws Exception {
>         String baseTable = "testRowTimestampColWithViews".toUpperCase();
>         String globalView = "globalView".toUpperCase();
>         String globalViewIdx = "globalView_idx".toUpperCase();
>         long ts = nextTimestamp();
>         try (Connection conn = getConnection(ts)) {
>             conn.createStatement().execute("CREATE TABLE " + baseTable + " 
> (TENANT_ID CHAR(15) NOT NULL, PK2 DATE NOT NULL, PK3 INTEGER NOT NULL, KV1 
> VARCHAR, KV2 VARCHAR, KV3 CHAR(15) CONSTRAINT PK PRIMARY KEY(TENANT_ID, PK2 
> ROW_TIMESTAMP, PK3)) MULTI_TENANT=true");
>         }
>         ts = nextTimestamp();
>         try (Connection conn = getConnection(ts)) {
>             conn.createStatement().execute("CREATE VIEW " + globalView + " AS 
> SELECT * FROM " + baseTable + " WHERE KV1 = 'KV1'");
>         }
>         ts = nextTimestamp();
>         try (Connection conn = getConnection(ts)) {
>             conn.createStatement().execute("CREATE INDEX " + globalViewIdx + 
> " ON " + globalView + " (PK3 DESC, KV3) INCLUDE (KV1)");
>         }
>     }
> java.lang.NullPointerException
>       at 
> org.apache.phoenix.util.StringUtil.escapeBackslash(StringUtil.java:392)
>       at 
> org.apache.phoenix.compile.PostIndexDDLCompiler.compile(PostIndexDDLCompiler.java:78)
>       at 
> org.apache.phoenix.schema.MetaDataClient.buildIndex(MetaDataClient.java:1027)
>       at 
> org.apache.phoenix.schema.MetaDataClient.buildIndexAtTimeStamp(MetaDataClient.java:903)
>       at 
> org.apache.phoenix.schema.MetaDataClient.createIndex(MetaDataClient.java:1321)
>       at 
> org.apache.phoenix.compile.CreateIndexCompiler$1.execute(CreateIndexCompiler.java:95)
>       at 
> org.apache.phoenix.jdbc.PhoenixStatement$3.call(PhoenixStatement.java:315)
>       at 
> org.apache.phoenix.jdbc.PhoenixStatement$3.call(PhoenixStatement.java:1)
>       at org.apache.phoenix.call.CallRunner.run(CallRunner.java:53)
>       at 
> org.apache.phoenix.jdbc.PhoenixStatement.executeMutation(PhoenixStatement.java:306)
>       at 
> org.apache.phoenix.jdbc.PhoenixStatement.execute(PhoenixStatement.java:1375)
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to