On Fri, Aug 22, 2014 at 5:18 PM, James Taylor <jamestay...@apache.org> wrote: > 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?
I created the jira ticket and some progress has already been made, happy about that ;-) However, I still have the impression that there are some things which do not work as expected. Here is a first testcase which triggers what looks like a bug to me. I would expect this to work, but the last statement fails (upsert and commit) with org.apache.phoenix.schema.TableNotFoundException: ERROR 1012 (42M03): Table undefined. tableName=TEST Note that just before, I execute a select query on the same table. Thanks for looking into this, Jan @Test public void phoenixMultiTenancyTest() throws Exception { HBaseTestingUtility testUtil = new HBaseTestingUtility(); testUtil.startMiniCluster(); String globalUrl = "jdbc:phoenix:localhost:" + testUtil.getConfiguration().get("hbase.zookeeper.property.clientPort"); Connection globalConn = DriverManager.getConnection(globalUrl); Statement stmt = globalConn.createStatement(); stmt.execute("CREATE TABLE test (tenant_id VARCHAR not null, id bigint not null, " + "first_name varchar constraint pk primary key(tenant_id, id)) MULTI_TENANT=true"); stmt.execute("upsert into test values('jan', 1, 'a')"); stmt.execute("upsert into test values('bruno', 1, 'b')"); globalConn.commit(); String tenantUrl = globalUrl + ";TenantId=jan"; Connection tenantConn = DriverManager.getConnection(tenantUrl); Statement tenantStmt = tenantConn.createStatement(); // this works and is correctly limited to only data for tenant "jan" ResultSet rs = tenantStmt.executeQuery("select id, first_name from test"); Assert.assertTrue(rs.next()); Assert.assertEquals("1", rs.getString(1)); Assert.assertEquals("a", rs.getString(2)); Assert.assertFalse(rs.next()); // this fails with TableNotFoundException tenantStmt.execute("upsert into test values (2, 'b')"); tenantConn.commit(); }