phoenix-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Jan Van Besien <janvanbes...@gmail.com>
Subject Re: multi tenancy
Date Tue, 26 Aug 2014 14:54:48 GMT
A second problem I noticed is difficult to reproduce in code, so bear with me.

The problem seems to be that it is impossible to create a tenant
specific connection if the same driver instance hasn't previously been
used to create a global connection.

To reproduce:
- connect to a running hbase with a non-tenant specific connection
(using sqlline or squirrel or whatever you want)
- create a multitenant table
- close the connection and make a new tenant specific connection from
within a new JVM (otherwise the driver instance is reused). When using
squirrel, this implies restarting the app

This fails with
Caused by: java.sql.SQLException: ERROR 1030 (42Y89): Cannot create
table for tenant-specific connection tableName=SYSTEM.CATALOG
at org.apache.phoenix.exception.SQLExceptionCode$Factory$1.newException(SQLExceptionCode.java:309)
at org.apache.phoenix.exception.SQLExceptionInfo.buildException(SQLExceptionInfo.java:133)
at org.apache.phoenix.schema.MetaDataClient.createTableInternal(MetaDataClient.java:873)
at org.apache.phoenix.schema.MetaDataClient.createTable(MetaDataClient.java:422)
at org.apache.phoenix.compile.CreateTableCompiler$2.execute(CreateTableCompiler.java:183)
at org.apache.phoenix.jdbc.PhoenixStatement$2.call(PhoenixStatement.java:246)
at org.apache.phoenix.jdbc.PhoenixStatement$2.call(PhoenixStatement.java:236)
at org.apache.phoenix.util.PhoenixContextExecutor.call(PhoenixContextExecutor.java:54)
at org.apache.phoenix.jdbc.PhoenixStatement.executeMutation(PhoenixStatement.java:235)
at org.apache.phoenix.jdbc.PhoenixStatement.executeUpdate(PhoenixStatement.java:935)
at org.apache.phoenix.query.ConnectionQueryServicesImpl$9.call(ConnectionQueryServicesImpl.java:1462)
at org.apache.phoenix.query.ConnectionQueryServicesImpl$9.call(ConnectionQueryServicesImpl.java:1428)
at org.apache.phoenix.util.PhoenixContextExecutor.call(PhoenixContextExecutor.java:54)
at org.apache.phoenix.query.ConnectionQueryServicesImpl.init(ConnectionQueryServicesImpl.java:1428)
at org.apache.phoenix.jdbc.PhoenixDriver.getConnectionQueryServices(PhoenixDriver.java:131)
at org.apache.phoenix.jdbc.PhoenixEmbeddedDriver.connect(PhoenixEmbeddedDriver.java:112)
at net.sourceforge.squirrel_sql.fw.sql.SQLDriverManager.getConnection(SQLDriverManager.java:133)
at net.sourceforge.squirrel_sql.client.mainframe.action.OpenConnectionCommand.executeConnect(OpenConnectionCommand.java:167)
... 7 more


When reusing the driver instance, this works. I think it has to do
with the logic around the check for "initialized" in
ConnectionQueryServicesImpl but I didn't dig any further.

thanks
Jan

ps: I can create jira tickets for all of these if you prefer of course.

On Fri, Aug 22, 2014 at 5:18 PM, James Taylor <jamestaylor@apache.org> wrote:
> Hi Jan,
> Yes, this works as designed. Would you mind filing a JIRA for us to enhance
> our multi tenant docs, as it sounds like it's unclear?

Mime
View raw message