PHOENIX-3253 Make changes in various classes for method level parallelization in BaseHBaseManagedTimeTableReuseIT
Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/27697b36 Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/27697b36 Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/27697b36 Branch: refs/heads/calcite Commit: 27697b364511f8557a87d4007bff1a560e4b8490 Parents: 2c2b552 Author: James Taylor <jamestay...@apache.org> Authored: Thu Sep 15 00:22:33 2016 -0700 Committer: James Taylor <jamestay...@apache.org> Committed: Thu Sep 15 00:28:46 2016 -0700 ---------------------------------------------------------------------- .../ConnectionQueryServicesTestImpl.java | 7 ++- .../org/apache/phoenix/end2end/DeleteIT.java | 10 ++-- .../phoenix/end2end/PhoenixRuntimeIT.java | 48 +++++++++----------- .../phoenix/end2end/index/ViewIndexIT.java | 41 +++-------------- .../trace/PhoenixTableMetricsWriterIT.java | 22 +++++---- .../phoenix/trace/PhoenixTraceReaderIT.java | 16 ++++--- .../phoenix/trace/PhoenixTracingEndToEndIT.java | 23 +++++----- .../org/apache/phoenix/tx/TransactionIT.java | 27 ++++++----- .../phoenix/trace/PhoenixMetricsSink.java | 5 +- .../org/apache/phoenix/trace/TraceReader.java | 12 ++--- 10 files changed, 91 insertions(+), 120 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/phoenix/blob/27697b36/phoenix-core/src/it/java/org/apache/phoenix/end2end/ConnectionQueryServicesTestImpl.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/ConnectionQueryServicesTestImpl.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/ConnectionQueryServicesTestImpl.java index 48f392b..b1e264b 100644 --- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/ConnectionQueryServicesTestImpl.java +++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/ConnectionQueryServicesTestImpl.java @@ -20,6 +20,8 @@ package org.apache.phoenix.end2end; import static org.junit.Assert.assertEquals; import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Collection; import java.util.Properties; import java.util.Set; @@ -61,9 +63,10 @@ public class ConnectionQueryServicesTestImpl extends ConnectionQueryServicesImpl @Override public void close() throws SQLException { try { - Set<PhoenixConnection> connections; + Collection<PhoenixConnection> connections; synchronized(this) { - connections = this.connections; + // Make copy to prevent ConcurrentModificationException (TODO: figure out why this is necessary) + connections = new ArrayList<>(this.connections); this.connections = Sets.newHashSet(); } SQLCloseables.closeAll(connections); http://git-wip-us.apache.org/repos/asf/phoenix/blob/27697b36/phoenix-core/src/it/java/org/apache/phoenix/end2end/DeleteIT.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/DeleteIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/DeleteIT.java index 865b1fd..5234d10 100644 --- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/DeleteIT.java +++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/DeleteIT.java @@ -34,7 +34,6 @@ import java.util.Collections; import java.util.List; import org.apache.phoenix.util.QueryUtil; -import org.junit.Assert; import org.junit.Test; @@ -506,16 +505,17 @@ public class DeleteIT extends BaseHBaseManagedTimeTableReuseIT { @Test public void testDeleteForTableWithRowTimestampColServer() throws Exception { - testDeleteForTableWithRowTimestampCol(true); + String tableName = generateRandomString(); + testDeleteForTableWithRowTimestampCol(true, tableName); } @Test public void testDeleteForTableWithRowTimestampColClient() throws Exception { - testDeleteForTableWithRowTimestampCol(false); + String tableName = generateRandomString(); + testDeleteForTableWithRowTimestampCol(false, tableName); } - private void testDeleteForTableWithRowTimestampCol(boolean autoCommit) throws Exception { - String tableName = "testDeleteForTableWithRowTimestampCol".toUpperCase(); + private void testDeleteForTableWithRowTimestampCol(boolean autoCommit, String tableName) throws Exception { try (Connection conn = DriverManager.getConnection(getUrl())) { conn.setAutoCommit(autoCommit); Statement stm = conn.createStatement(); http://git-wip-us.apache.org/repos/asf/phoenix/blob/27697b36/phoenix-core/src/it/java/org/apache/phoenix/end2end/PhoenixRuntimeIT.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/PhoenixRuntimeIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/PhoenixRuntimeIT.java index 579eb19..c84a76c 100644 --- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/PhoenixRuntimeIT.java +++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/PhoenixRuntimeIT.java @@ -18,18 +18,17 @@ package org.apache.phoenix.end2end; import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.TABLE_FAMILY_BYTES; -import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; import java.io.IOException; import java.sql.Connection; import java.sql.DriverManager; import java.util.Arrays; -import java.util.Collections; -import java.util.List; +import java.util.HashSet; import java.util.Properties; +import java.util.Set; -import org.apache.hadoop.hbase.HConstants; import org.apache.hadoop.hbase.client.HTableInterface; import org.apache.hadoop.hbase.client.Result; import org.apache.hadoop.hbase.client.ResultScanner; @@ -53,7 +52,7 @@ import org.apache.phoenix.util.PropertiesUtil; import org.apache.phoenix.util.TestUtil; import org.junit.Test; -import com.google.common.collect.Lists; +import com.google.common.collect.Sets; public class PhoenixRuntimeIT extends BaseHBaseManagedTimeTableReuseIT { private static void assertTenantIds(Expression e, HTableInterface htable, Filter filter, String[] tenantIds) throws IOException { @@ -63,17 +62,15 @@ public class PhoenixRuntimeIT extends BaseHBaseManagedTimeTableReuseIT { ResultScanner scanner = htable.getScanner(scan); Result result = null; ResultTuple tuple = new ResultTuple(); - List<String> actualTenantIds = Lists.newArrayListWithExpectedSize(tenantIds.length); - List<String> expectedTenantIds = Arrays.asList(tenantIds); + Set<String> actualTenantIds = Sets.newHashSetWithExpectedSize(tenantIds.length); + Set<String> expectedTenantIds = new HashSet<>(Arrays.asList(tenantIds)); while ((result = scanner.next()) != null) { tuple.setResult(result); e.evaluate(tuple, ptr); String tenantId = (String)PVarchar.INSTANCE.toObject(ptr); actualTenantIds.add(tenantId == null ? "" : tenantId); } - // Need to sort because of salting - Collections.sort(actualTenantIds); - assertEquals(expectedTenantIds, actualTenantIds); + assertTrue(actualTenantIds.containsAll(expectedTenantIds)); } @Test @@ -96,35 +93,34 @@ public class PhoenixRuntimeIT extends BaseHBaseManagedTimeTableReuseIT { } private void testGetTenantIdExpression(boolean isSalted) throws Exception { - //Have to delete metaData tables because BaseHBaseManagedTimeTableReuseIT doesn't delete them after each test case , and tenant list will create issues between test cases - deletePriorMetaData(HConstants.LATEST_TIMESTAMP, getUrl()); - Connection conn = DriverManager.getConnection(getUrl()); conn.setAutoCommit(true); String tableName = generateRandomString() ; - String sequenceName = generateRandomString() ; + String sequenceName = generateRandomString(); + String t1 = generateRandomString(); + String t2 = t1 + generateRandomString(); // ensure bigger conn.createStatement().execute("CREATE TABLE " + tableName + " (k1 VARCHAR NOT NULL, k2 VARCHAR, CONSTRAINT PK PRIMARY KEY(K1,K2)) MULTI_TENANT=true" + (isSalted ? ",SALT_BUCKETS=3" : "")); conn.createStatement().execute("CREATE SEQUENCE " + sequenceName); - conn.createStatement().execute("UPSERT INTO " + tableName + " VALUES('t1','x')"); - conn.createStatement().execute("UPSERT INTO " + tableName + " VALUES('t2','y')"); + conn.createStatement().execute("UPSERT INTO " + tableName + " VALUES('" + t1 + "','x')"); + conn.createStatement().execute("UPSERT INTO " + tableName + " VALUES('" + t2 + "','y')"); Properties props = PropertiesUtil.deepCopy(TestUtil.TEST_PROPERTIES); - props.setProperty(PhoenixRuntime.TENANT_ID_ATTRIB, "t1"); + props.setProperty(PhoenixRuntime.TENANT_ID_ATTRIB, t1); Connection tsconn = DriverManager.getConnection(getUrl(), props); tsconn.createStatement().execute("CREATE SEQUENCE " + sequenceName); Expression e1 = PhoenixRuntime.getTenantIdExpression(tsconn, PhoenixDatabaseMetaData.SYSTEM_SEQUENCE_NAME); HTableInterface htable1 = tsconn.unwrap(PhoenixConnection.class).getQueryServices().getTable(PhoenixDatabaseMetaData.SYSTEM_SEQUENCE_NAME_BYTES); - assertTenantIds(e1, htable1, new FirstKeyOnlyFilter(), new String[] {"", "t1"} ); + assertTenantIds(e1, htable1, new FirstKeyOnlyFilter(), new String[] {"", t1} ); String viewName = generateRandomString(); tsconn.createStatement().execute("CREATE VIEW " + viewName + "(V1 VARCHAR) AS SELECT * FROM " + tableName); Expression e2 = PhoenixRuntime.getTenantIdExpression(tsconn, PhoenixDatabaseMetaData.SYSTEM_CATALOG_NAME); HTableInterface htable2 = conn.unwrap(PhoenixConnection.class).getQueryServices().getTable(PhoenixDatabaseMetaData.SYSTEM_CATALOG_NAME_BYTES); - assertTenantIds(e2, htable2, getUserTableAndViewsFilter(), new String[] {"", "t1"} ); + assertTenantIds(e2, htable2, getUserTableAndViewsFilter(), new String[] {"", t1} ); Expression e3 = PhoenixRuntime.getTenantIdExpression(conn, tableName); HTableInterface htable3 = conn.unwrap(PhoenixConnection.class).getQueryServices().getTable(Bytes.toBytes(tableName)); - assertTenantIds(e3, htable3, new FirstKeyOnlyFilter(), new String[] {"t1", "t2"} ); + assertTenantIds(e3, htable3, new FirstKeyOnlyFilter(), new String[] {t1, t2} ); String basTableName = generateRandomString(); conn.createStatement().execute("CREATE TABLE " + basTableName + " (k1 VARCHAR PRIMARY KEY)"); @@ -135,23 +131,21 @@ public class PhoenixRuntimeIT extends BaseHBaseManagedTimeTableReuseIT { tsconn.createStatement().execute("CREATE INDEX " + indexName1 + " ON " + viewName + "(V1)"); Expression e5 = PhoenixRuntime.getTenantIdExpression(tsconn, indexName1); HTableInterface htable5 = tsconn.unwrap(PhoenixConnection.class).getQueryServices().getTable(Bytes.toBytes(MetaDataUtil.VIEW_INDEX_TABLE_PREFIX + tableName)); - assertTenantIds(e5, htable5, new FirstKeyOnlyFilter(), new String[] {"t1"} ); + assertTenantIds(e5, htable5, new FirstKeyOnlyFilter(), new String[] {t1} ); String indexName2 = generateRandomString(); conn.createStatement().execute("CREATE INDEX " + indexName2 + " ON " + tableName + "(k2)"); Expression e6 = PhoenixRuntime.getTenantIdExpression(conn, indexName2); HTableInterface htable6 = conn.unwrap(PhoenixConnection.class).getQueryServices().getTable(Bytes.toBytes(indexName2)); - assertTenantIds(e6, htable6, new FirstKeyOnlyFilter(), new String[] {"t1", "t2"} ); + assertTenantIds(e6, htable6, new FirstKeyOnlyFilter(), new String[] {t1, t2} ); tableName = generateRandomString() + "BAR_" + (isSalted ? "SALTED" : "UNSALTED"); conn.createStatement().execute("CREATE TABLE " + tableName + " (k1 VARCHAR NOT NULL, k2 VARCHAR, CONSTRAINT PK PRIMARY KEY(K1,K2)) " + (isSalted ? "SALT_BUCKETS=3" : "")); - conn.createStatement().execute("UPSERT INTO " + tableName + " VALUES('t1','x')"); - conn.createStatement().execute("UPSERT INTO " + tableName + " VALUES('t2','y')"); + conn.createStatement().execute("UPSERT INTO " + tableName + " VALUES('" + t1 + "','x')"); + conn.createStatement().execute("UPSERT INTO " + tableName + " VALUES('" + t2 + "','y')"); Expression e7 = PhoenixRuntime.getFirstPKColumnExpression(conn, tableName); HTableInterface htable7 = conn.unwrap(PhoenixConnection.class).getQueryServices().getTable(Bytes.toBytes(tableName)); - assertTenantIds(e7, htable7, new FirstKeyOnlyFilter(), new String[] {"t1", "t2"} ); - - + assertTenantIds(e7, htable7, new FirstKeyOnlyFilter(), new String[] {t1, t2} ); } } http://git-wip-us.apache.org/repos/asf/phoenix/blob/27697b36/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/ViewIndexIT.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/ViewIndexIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/ViewIndexIT.java index c985fc9..f70397a 100644 --- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/ViewIndexIT.java +++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/ViewIndexIT.java @@ -31,53 +31,29 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.util.Arrays; import java.util.Collection; -import java.util.Map; import java.util.Properties; -import org.apache.hadoop.hbase.TableName; -import org.apache.hadoop.hbase.client.HBaseAdmin; import org.apache.phoenix.compile.QueryPlan; import org.apache.phoenix.end2end.BaseHBaseManagedTimeTableReuseIT; -import org.apache.phoenix.end2end.Shadower; import org.apache.phoenix.jdbc.PhoenixStatement; import org.apache.phoenix.query.QueryServices; import org.apache.phoenix.schema.PNameFactory; import org.apache.phoenix.util.QueryUtil; -import org.apache.phoenix.util.ReadOnlyProps; -import org.apache.phoenix.util.SchemaUtil; -import org.apache.phoenix.util.TestUtil; -import org.junit.BeforeClass; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameters; -import com.google.common.collect.Maps; - @RunWith(Parameterized.class) public class ViewIndexIT extends BaseHBaseManagedTimeTableReuseIT { - - - private String schemaName="TEST"; private boolean isNamespaceMapped; - - @BeforeClass - @Shadower(classBeingShadowed = BaseHBaseManagedTimeTableReuseIT.class) - public static void doSetup() throws Exception { - Map<String,String> props = Maps.newHashMapWithExpectedSize(3); - // Drop the HBase table metadata for this test to confirm that view index table dropped - props.put(QueryServices.DROP_METADATA_ATTRIB, Boolean.toString(true)); - // Must update config before starting server - setUpTestDriver(new ReadOnlyProps(props.entrySet().iterator())); - } - @Parameters(name = "isNamespaceMapped = {0}") public static Collection<Boolean> data() { return Arrays.asList(true, false); } - private void createBaseTable(String tableName, boolean multiTenant, Integer saltBuckets, String splits) + private void createBaseTable(String schemaName, String tableName, boolean multiTenant, Integer saltBuckets, String splits) throws SQLException { Connection conn = getConnection(); if (isNamespaceMapped) { @@ -104,9 +80,8 @@ public class ViewIndexIT extends BaseHBaseManagedTimeTableReuseIT { conn.close(); } - public Connection getConnection() throws SQLException{ + private Connection getConnection() throws SQLException{ Properties props = new Properties(); - props.put(QueryServices.DROP_METADATA_ATTRIB, Boolean.toString(true)); props.put(QueryServices.IS_NAMESPACE_MAPPING_ENABLED, Boolean.toString(isNamespaceMapped)); return DriverManager.getConnection(getUrl(),props); } @@ -117,14 +92,13 @@ public class ViewIndexIT extends BaseHBaseManagedTimeTableReuseIT { @Test public void testDeleteViewIndexSequences() throws Exception { + String schemaName = generateRandomString(); String tableName = schemaName + "." + generateRandomString(); String indexName = "IND_" + generateRandomString(); String VIEW_NAME = "VIEW_" + generateRandomString(); - TableName physicalTableName = SchemaUtil.getPhysicalTableName(tableName.getBytes(), isNamespaceMapped); - String viewIndexPhysicalTableName = physicalTableName.getNameAsString(); String viewName = schemaName + "." + VIEW_NAME; - createBaseTable(tableName, false, null, null); + createBaseTable(schemaName, tableName, false, null, null); Connection conn1 = getConnection(); Connection conn2 = getConnection(); conn1.createStatement().execute("CREATE VIEW " + viewName + " AS SELECT * FROM " + tableName); @@ -138,22 +112,19 @@ public class ViewIndexIT extends BaseHBaseManagedTimeTableReuseIT { // Check other format of sequence is not there as Sequences format is different for views/indexes created on // table which are namespace mapped and which are not. verifySequence(null, seqName, seqSchemaName, false); - HBaseAdmin admin = driver.getConnectionQueryServices(getUrl(), TestUtil.TEST_PROPERTIES).getAdmin(); conn1.createStatement().execute("DROP VIEW " + viewName); conn1.createStatement().execute("DROP TABLE "+ tableName); - admin = driver.getConnectionQueryServices(getUrl(), TestUtil.TEST_PROPERTIES).getAdmin(); - assertFalse("View index table should be deleted.", admin.tableExists(TableName.valueOf(viewIndexPhysicalTableName))); verifySequence(null, sequenceName, sequenceSchemaName, false); - } @Test public void testMultiTenantViewLocalIndex() throws Exception { + String schemaName = generateRandomString(); String tableName = generateRandomString(); String indexName = "IND_" + generateRandomString(); String VIEW_NAME = "VIEW_" + generateRandomString(); - createBaseTable(tableName, true, null, null); + createBaseTable(schemaName, tableName, true, null, null); Connection conn = DriverManager.getConnection(getUrl()); PreparedStatement stmt = conn.prepareStatement( "UPSERT INTO " + tableName http://git-wip-us.apache.org/repos/asf/phoenix/blob/27697b36/phoenix-core/src/it/java/org/apache/phoenix/trace/PhoenixTableMetricsWriterIT.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/it/java/org/apache/phoenix/trace/PhoenixTableMetricsWriterIT.java b/phoenix-core/src/it/java/org/apache/phoenix/trace/PhoenixTableMetricsWriterIT.java index 533b6f8..f0319c0 100644 --- a/phoenix-core/src/it/java/org/apache/phoenix/trace/PhoenixTableMetricsWriterIT.java +++ b/phoenix-core/src/it/java/org/apache/phoenix/trace/PhoenixTableMetricsWriterIT.java @@ -17,18 +17,18 @@ */ package org.apache.phoenix.trace; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.fail; + +import java.sql.Connection; +import java.util.Collection; + import org.apache.hadoop.metrics2.MetricsRecord; import org.apache.phoenix.query.QueryServicesOptions; import org.apache.phoenix.trace.TraceReader.SpanInfo; import org.apache.phoenix.trace.TraceReader.TraceHolder; import org.junit.Test; -import java.sql.Connection; -import java.util.Collection; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.fail; - /** * Test that the logging sink stores the expected metrics/stats */ @@ -43,7 +43,8 @@ public class PhoenixTableMetricsWriterIT extends BaseTracingTestIT { public void testCreatesTable() throws Exception { PhoenixMetricsSink sink = new PhoenixMetricsSink(); Connection conn = getConnectionWithoutTracing(); - sink.initForTesting(conn); + String tableName = generateRandomString(); + sink.initForTesting(conn, tableName); // check for existence of the tracing table try { @@ -57,7 +58,7 @@ public class PhoenixTableMetricsWriterIT extends BaseTracingTestIT { // initialize sink again, which should attempt to create the table, but not fail try { - sink.initForTesting(conn); + sink.initForTesting(conn, tableName); } catch (Exception e) { fail("Initialization shouldn't fail if table already exists!"); } @@ -73,7 +74,8 @@ public class PhoenixTableMetricsWriterIT extends BaseTracingTestIT { // hook up a phoenix sink PhoenixMetricsSink sink = new PhoenixMetricsSink(); Connection conn = getConnectionWithoutTracing(); - sink.initForTesting(conn); + String tableName = generateRandomString(); + sink.initForTesting(conn, tableName); // create a simple metrics record long traceid = 987654; @@ -94,7 +96,7 @@ public class PhoenixTableMetricsWriterIT extends BaseTracingTestIT { // make sure we only get expected stat entry (matcing the trace id), otherwise we could the // stats for the update as well - TraceReader reader = new TraceReader(conn); + TraceReader reader = new TraceReader(conn, tableName); Collection<TraceHolder> traces = reader.readAll(10); assertEquals("Wrong number of traces in the tracing table", 1, traces.size()); http://git-wip-us.apache.org/repos/asf/phoenix/blob/27697b36/phoenix-core/src/it/java/org/apache/phoenix/trace/PhoenixTraceReaderIT.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/it/java/org/apache/phoenix/trace/PhoenixTraceReaderIT.java b/phoenix-core/src/it/java/org/apache/phoenix/trace/PhoenixTraceReaderIT.java index 2315074..a7bd730 100644 --- a/phoenix-core/src/it/java/org/apache/phoenix/trace/PhoenixTraceReaderIT.java +++ b/phoenix-core/src/it/java/org/apache/phoenix/trace/PhoenixTraceReaderIT.java @@ -35,10 +35,10 @@ import org.apache.commons.logging.LogFactory; import org.apache.hadoop.metrics2.AbstractMetric; import org.apache.hadoop.metrics2.MetricsRecord; import org.apache.hadoop.metrics2.MetricsTag; +import org.apache.htrace.Span; import org.apache.phoenix.metrics.MetricInfo; import org.apache.phoenix.trace.TraceReader.SpanInfo; import org.apache.phoenix.trace.TraceReader.TraceHolder; -import org.apache.htrace.Span; import org.junit.Test; /** @@ -55,7 +55,8 @@ public class PhoenixTraceReaderIT extends BaseTracingTestIT { PhoenixMetricsSink sink = new PhoenixMetricsSink(); Properties props = new Properties(TEST_PROPERTIES); Connection conn = DriverManager.getConnection(getUrl(), props); - sink.initForTesting(conn); + String tableName = generateRandomString(); + sink.initForTesting(conn, tableName); // create a simple metrics record long traceid = 987654; @@ -64,7 +65,7 @@ public class PhoenixTraceReaderIT extends BaseTracingTestIT { "host-name.value", "test annotation for a span"); // start a reader - validateTraces(Collections.singletonList(record), conn, traceid); + validateTraces(Collections.singletonList(record), conn, traceid, tableName); } private MetricsRecord createAndFlush(PhoenixMetricsSink sink, long traceid, @@ -87,7 +88,8 @@ public class PhoenixTraceReaderIT extends BaseTracingTestIT { // hook up a phoenix sink PhoenixMetricsSink sink = new PhoenixMetricsSink(); Connection conn = getConnectionWithoutTracing(); - sink.initForTesting(conn); + String tableName = generateRandomString(); + sink.initForTesting(conn, tableName); // create a simple metrics record long traceid = 12345; @@ -119,12 +121,12 @@ public class PhoenixTraceReaderIT extends BaseTracingTestIT { sink.flush(); // start a reader - validateTraces(records, conn, traceid); + validateTraces(records, conn, traceid, tableName); } - private void validateTraces(List<MetricsRecord> records, Connection conn, long traceid) + private void validateTraces(List<MetricsRecord> records, Connection conn, long traceid, String tableName) throws Exception { - TraceReader reader = new TraceReader(conn); + TraceReader reader = new TraceReader(conn, tableName); Collection<TraceHolder> traces = reader.readAll(1); assertEquals("Got an unexpected number of traces!", 1, traces.size()); // make sure the trace matches what we wrote http://git-wip-us.apache.org/repos/asf/phoenix/blob/27697b36/phoenix-core/src/it/java/org/apache/phoenix/trace/PhoenixTracingEndToEndIT.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/it/java/org/apache/phoenix/trace/PhoenixTracingEndToEndIT.java b/phoenix-core/src/it/java/org/apache/phoenix/trace/PhoenixTracingEndToEndIT.java index 2cd795d..2e21846 100644 --- a/phoenix-core/src/it/java/org/apache/phoenix/trace/PhoenixTracingEndToEndIT.java +++ b/phoenix-core/src/it/java/org/apache/phoenix/trace/PhoenixTracingEndToEndIT.java @@ -48,7 +48,7 @@ import org.apache.phoenix.query.QueryServicesOptions; import org.apache.phoenix.trace.TraceReader.SpanInfo; import org.apache.phoenix.trace.TraceReader.TraceHolder; import org.junit.After; -import org.junit.BeforeClass; +import org.junit.Before; import org.junit.Test; import com.google.common.collect.ImmutableMap; @@ -64,13 +64,15 @@ public class PhoenixTracingEndToEndIT extends BaseTracingTestIT { private final String table = "ENABLED_FOR_LOGGING"; private final String index = "ENABALED_FOR_LOGGING_INDEX"; - private static DisableableMetricsWriter sink; + private DisableableMetricsWriter sink; + private String tableName; - @BeforeClass - public static void setupMetrics() throws Exception { + @Before + public void setupMetrics() throws Exception { PhoenixMetricsSink pWriter = new PhoenixMetricsSink(); Connection conn = getConnectionWithoutTracing(); - pWriter.initForTesting(conn); + tableName = generateRandomString(); + pWriter.initForTesting(conn, tableName); sink = new DisableableMetricsWriter(pWriter); TracingTestUtil.registerSink(sink); @@ -80,22 +82,19 @@ public class PhoenixTracingEndToEndIT extends BaseTracingTestIT { public void cleanup() { sink.disable(); sink.clear(); - sink.enable(); - - // LISTENABLE.clearListeners(); } - private static void waitForCommit(CountDownLatch latch) throws SQLException { + private void waitForCommit(CountDownLatch latch) throws SQLException { Connection conn = new CountDownConnection(getConnectionWithoutTracing(), latch); replaceWriterConnection(conn); } - private static void replaceWriterConnection(Connection conn) throws SQLException { + private void replaceWriterConnection(Connection conn) throws SQLException { // disable the writer sink.disable(); // swap the connection for one that listens - sink.getDelegate().initForTesting(conn); + sink.getDelegate().initForTesting(conn, tableName); // enable the writer sink.enable(); @@ -461,7 +460,7 @@ public class PhoenixTracingEndToEndIT extends BaseTracingTestIT { } private boolean checkStoredTraces(Connection conn, TraceChecker checker) throws Exception { - TraceReader reader = new TraceReader(conn); + TraceReader reader = new TraceReader(conn, tableName); int retries = 0; boolean found = false; outer: while (retries < MAX_RETRIES) { http://git-wip-us.apache.org/repos/asf/phoenix/blob/27697b36/phoenix-core/src/it/java/org/apache/phoenix/tx/TransactionIT.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/it/java/org/apache/phoenix/tx/TransactionIT.java b/phoenix-core/src/it/java/org/apache/phoenix/tx/TransactionIT.java index e55a63e..3d94eba 100644 --- a/phoenix-core/src/it/java/org/apache/phoenix/tx/TransactionIT.java +++ b/phoenix-core/src/it/java/org/apache/phoenix/tx/TransactionIT.java @@ -503,16 +503,18 @@ public class TransactionIT extends BaseHBaseManagedTimeTableReuseIT { public void testCreateTableToBeTransactional() throws Exception { Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES); Connection conn = DriverManager.getConnection(getUrl(), props); - String ddl = "CREATE TABLE TEST_TRANSACTIONAL_TABLE (k varchar primary key) transactional=true"; + String t1 = generateRandomString(); + String t2 = generateRandomString(); + String ddl = "CREATE TABLE " + t1 + " (k varchar primary key) transactional=true"; conn.createStatement().execute(ddl); PhoenixConnection pconn = conn.unwrap(PhoenixConnection.class); - PTable table = pconn.getTable(new PTableKey(null, "TEST_TRANSACTIONAL_TABLE")); - HTableInterface htable = pconn.getQueryServices().getTable(Bytes.toBytes("TEST_TRANSACTIONAL_TABLE")); + PTable table = pconn.getTable(new PTableKey(null, t1)); + HTableInterface htable = pconn.getQueryServices().getTable(Bytes.toBytes(t1)); assertTrue(table.isTransactional()); assertTrue(htable.getTableDescriptor().getCoprocessors().contains(PhoenixTransactionalProcessor.class.getName())); try { - ddl = "ALTER TABLE TEST_TRANSACTIONAL_TABLE SET transactional=false"; + ddl = "ALTER TABLE " + t1 + " SET transactional=false"; conn.createStatement().execute(ddl); fail(); } catch (SQLException e) { @@ -520,15 +522,15 @@ public class TransactionIT extends BaseHBaseManagedTimeTableReuseIT { } HBaseAdmin admin = pconn.getQueryServices().getAdmin(); - HTableDescriptor desc = new HTableDescriptor(TableName.valueOf("TXN_TEST_EXISTING")); + HTableDescriptor desc = new HTableDescriptor(TableName.valueOf(t2)); desc.addFamily(new HColumnDescriptor(QueryConstants.DEFAULT_COLUMN_FAMILY_BYTES)); admin.createTable(desc); - ddl = "CREATE TABLE TXN_TEST_EXISTING (k varchar primary key) transactional=true"; + ddl = "CREATE TABLE " + t2 + " (k varchar primary key) transactional=true"; conn.createStatement().execute(ddl); - assertEquals(Boolean.TRUE.toString(), admin.getTableDescriptor(TableName.valueOf("TXN_TEST_EXISTING")).getValue(TxConstants.READ_NON_TX_DATA)); + assertEquals(Boolean.TRUE.toString(), admin.getTableDescriptor(TableName.valueOf(t2)).getValue(TxConstants.READ_NON_TX_DATA)); // Should be ok, as HBase metadata should match existing metadata. - ddl = "CREATE TABLE IF NOT EXISTS TEST_TRANSACTIONAL_TABLE (k varchar primary key)"; + ddl = "CREATE TABLE IF NOT EXISTS " + t1 + " (k varchar primary key)"; try { conn.createStatement().execute(ddl); fail(); @@ -537,8 +539,8 @@ public class TransactionIT extends BaseHBaseManagedTimeTableReuseIT { } ddl += " transactional=true"; conn.createStatement().execute(ddl); - table = pconn.getTable(new PTableKey(null, "TEST_TRANSACTIONAL_TABLE")); - htable = pconn.getQueryServices().getTable(Bytes.toBytes("TEST_TRANSACTIONAL_TABLE")); + table = pconn.getTable(new PTableKey(null, t1)); + htable = pconn.getQueryServices().getTable(Bytes.toBytes(t1)); assertTrue(table.isTransactional()); assertTrue(htable.getTableDescriptor().getCoprocessors().contains(PhoenixTransactionalProcessor.class.getName())); } @@ -840,9 +842,10 @@ public class TransactionIT extends BaseHBaseManagedTimeTableReuseIT { String transTableName = generateRandomString(); String fullTableName = INDEX_DATA_SCHEMA + QueryConstants.NAME_SEPARATOR + transTableName; String selectSQL = "SELECT * FROM " + fullTableName; - try (Connection conn1 = DriverManager.getConnection(getUrl()); + try (Connection conn = DriverManager.getConnection(getUrl()); + Connection conn1 = DriverManager.getConnection(getUrl()); Connection conn2 = DriverManager.getConnection(getUrl())) { - createTable(conn1, fullTableName); + createTable(conn, fullTableName); conn1.setAutoCommit(false); conn2.setAutoCommit(true); ResultSet rs = conn1.createStatement().executeQuery(selectSQL); http://git-wip-us.apache.org/repos/asf/phoenix/blob/27697b36/phoenix-core/src/main/java/org/apache/phoenix/trace/PhoenixMetricsSink.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/main/java/org/apache/phoenix/trace/PhoenixMetricsSink.java b/phoenix-core/src/main/java/org/apache/phoenix/trace/PhoenixMetricsSink.java index af0d6e7..a8e80ab 100644 --- a/phoenix-core/src/main/java/org/apache/phoenix/trace/PhoenixMetricsSink.java +++ b/phoenix-core/src/main/java/org/apache/phoenix/trace/PhoenixMetricsSink.java @@ -147,11 +147,12 @@ public class PhoenixMetricsSink implements MetricsSink { * {@link org.apache.phoenix.query.QueryServicesOptions#DEFAULT_TRACING_STATS_TABLE_NAME} * * @param conn to store for upserts and to create the table (if necessary) + * @param tableName TODO * @throws SQLException if any phoenix operation fails */ @VisibleForTesting - public void initForTesting(Connection conn) throws SQLException { - initializeInternal(conn, QueryServicesOptions.DEFAULT_TRACING_STATS_TABLE_NAME); + public void initForTesting(Connection conn, String tableName) throws SQLException { + initializeInternal(conn, tableName); } /** http://git-wip-us.apache.org/repos/asf/phoenix/blob/27697b36/phoenix-core/src/main/java/org/apache/phoenix/trace/TraceReader.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/main/java/org/apache/phoenix/trace/TraceReader.java b/phoenix-core/src/main/java/org/apache/phoenix/trace/TraceReader.java index ccb9064..318453f 100644 --- a/phoenix-core/src/main/java/org/apache/phoenix/trace/TraceReader.java +++ b/phoenix-core/src/main/java/org/apache/phoenix/trace/TraceReader.java @@ -29,12 +29,12 @@ import java.util.TreeSet; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.apache.htrace.Span; import org.apache.phoenix.jdbc.PhoenixConnection; import org.apache.phoenix.metrics.MetricInfo; import org.apache.phoenix.query.QueryServices; import org.apache.phoenix.query.QueryServicesOptions; import org.apache.phoenix.util.LogUtil; -import org.apache.htrace.Span; import com.google.common.base.Joiner; import com.google.common.primitives.Longs; @@ -62,17 +62,13 @@ public class TraceReader { private String table; private int pageSize; - public TraceReader(Connection conn, String statsTableName) throws SQLException { + public TraceReader(Connection conn, String tracingTableName) throws SQLException { this.conn = conn; - this.table = statsTableName; + this.table = tracingTableName; String ps = conn.getClientInfo(QueryServices.TRACING_PAGE_SIZE_ATTRIB); this.pageSize = ps == null ? QueryServicesOptions.DEFAULT_TRACING_PAGE_SIZE : Integer.parseInt(ps); } - public TraceReader(Connection conn) throws SQLException { - this(conn, QueryServicesOptions.DEFAULT_TRACING_STATS_TABLE_NAME); - } - /** * Read all the currently stored traces. * <p> @@ -87,7 +83,7 @@ public class TraceReader { // trace // goes together), and then by start time (so parent spans always appear before child spans) String query = - "SELECT " + knownColumns + " FROM " + QueryServicesOptions.DEFAULT_TRACING_STATS_TABLE_NAME + "SELECT " + knownColumns + " FROM " + table + " ORDER BY " + MetricInfo.TRACE.columnName + " DESC, " + MetricInfo.START.columnName + " ASC" + " LIMIT " + pageSize; int resultCount = 0;