PHOENIX-4209 Disallow DML operations on connections with CURRENT_SCN set (Ethan Wang)
Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/7fabb75b Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/7fabb75b Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/7fabb75b Branch: refs/heads/4.x-HBase-1.2 Commit: 7fabb75ba8d1c1f91bd5262d083df93606305a7e Parents: 7e789c6 Author: James Taylor <jtay...@salesforce.com> Authored: Fri Sep 15 10:21:42 2017 -0700 Committer: James Taylor <jtay...@salesforce.com> Committed: Fri Sep 15 10:29:58 2017 -0700 ---------------------------------------------------------------------- .../apache/phoenix/end2end/DistinctCountIT.java | 102 ++++++++----------- 1 file changed, 40 insertions(+), 62 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/phoenix/blob/7fabb75b/phoenix-core/src/it/java/org/apache/phoenix/end2end/DistinctCountIT.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/DistinctCountIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/DistinctCountIT.java index a7482cb..34ce4f1 100644 --- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/DistinctCountIT.java +++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/DistinctCountIT.java @@ -45,26 +45,22 @@ import java.sql.ResultSet; import java.sql.Types; import java.util.Properties; -import org.apache.phoenix.schema.TableAlreadyExistsException; import org.apache.phoenix.util.PhoenixRuntime; import org.apache.phoenix.util.PropertiesUtil; import org.junit.Test; -public class DistinctCountIT extends BaseClientManagedTimeIT { +public class DistinctCountIT extends ParallelStatsDisabledIT { @Test public void testDistinctCountOnColumn() throws Exception { - long ts = nextTimestamp(); String tenantId = getOrganizationId(); - initATableValues(tenantId, null, getDefaultSplits(tenantId), null, ts); - - String query = "SELECT count(DISTINCT A_STRING) FROM aTable"; + String tableName = generateUniqueName(); + initATableValues(tenantId, null, getDefaultSplits(tenantId), null, tableName); + String query = "SELECT count(DISTINCT A_STRING) FROM "+tableName; Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES); - props.setProperty(PhoenixRuntime.CURRENT_SCN_ATTRIB, Long.toString(ts + 2)); // Execute at - // timestamp 2 - Connection conn = DriverManager.getConnection(getUrl(), props); + Connection conn = DriverManager.getConnection(getUrl(),props); try { PreparedStatement statement = conn.prepareStatement(query); ResultSet rs = statement.executeQuery(); @@ -78,15 +74,13 @@ public class DistinctCountIT extends BaseClientManagedTimeIT { @Test public void testDistinctCountOnRKColumn() throws Exception { - long ts = nextTimestamp(); String tenantId = getOrganizationId(); - initATableValues(tenantId, null, getDefaultSplits(tenantId), null, ts); + String tableName = generateUniqueName(); + initATableValues(tenantId, null, getDefaultSplits(tenantId), null, tableName); - String query = "SELECT count(DISTINCT ORGANIZATION_ID) FROM aTable"; + String query = "SELECT count(DISTINCT ORGANIZATION_ID) FROM "+tableName; Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES); - props.setProperty(PhoenixRuntime.CURRENT_SCN_ATTRIB, Long.toString(ts + 2)); // Execute at - // timestamp 2 Connection conn = DriverManager.getConnection(getUrl(), props); try { PreparedStatement statement = conn.prepareStatement(query); @@ -101,15 +95,13 @@ public class DistinctCountIT extends BaseClientManagedTimeIT { @Test public void testDistinctCountWithGroupBy() throws Exception { - long ts = nextTimestamp(); String tenantId = getOrganizationId(); - initATableValues(tenantId, null, getDefaultSplits(tenantId), null, ts); + String tableName = generateUniqueName(); + initATableValues(tenantId, null, getDefaultSplits(tenantId), null, tableName); - String query = "SELECT A_STRING, count(DISTINCT B_STRING) FROM aTable group by A_STRING"; + String query = "SELECT A_STRING, count(DISTINCT B_STRING) FROM "+tableName+" group by A_STRING"; Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES); - props.setProperty(PhoenixRuntime.CURRENT_SCN_ATTRIB, Long.toString(ts + 2)); // Execute at - // timestamp 2 Connection conn = DriverManager.getConnection(getUrl(), props); try { PreparedStatement statement = conn.prepareStatement(query); @@ -131,15 +123,13 @@ public class DistinctCountIT extends BaseClientManagedTimeIT { @Test public void testDistinctCountWithGroupByAndOrderBy() throws Exception { - long ts = nextTimestamp(); String tenantId = getOrganizationId(); - initATableValues(tenantId, null, getDefaultSplits(tenantId), null, ts); + String tableName = generateUniqueName(); + initATableValues(tenantId, null, getDefaultSplits(tenantId), null, tableName); - String query = "SELECT A_STRING, count(DISTINCT B_STRING) FROM aTable group by A_STRING order by A_STRING desc"; + String query = "SELECT A_STRING, count(DISTINCT B_STRING) FROM "+tableName+" group by A_STRING order by A_STRING desc"; Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES); - props.setProperty(PhoenixRuntime.CURRENT_SCN_ATTRIB, Long.toString(ts + 2)); // Execute at - // timestamp 2 Connection conn = DriverManager.getConnection(getUrl(), props); try { PreparedStatement statement = conn.prepareStatement(query); @@ -161,15 +151,13 @@ public class DistinctCountIT extends BaseClientManagedTimeIT { @Test public void testDistinctCountWithGroupByAndOrderByOnDistinctCount() throws Exception { - long ts = nextTimestamp(); String tenantId = getOrganizationId(); - initATableValues(tenantId, null, getDefaultSplits(tenantId), null, ts); + String tableName = generateUniqueName(); + initATableValues(tenantId, null, getDefaultSplits(tenantId), null, tableName); - String query = "SELECT A_STRING, count(DISTINCT B_STRING) as COUNT_B_STRING FROM aTable group by A_STRING order by COUNT_B_STRING"; + String query = "SELECT A_STRING, count(DISTINCT B_STRING) as COUNT_B_STRING FROM "+tableName+" group by A_STRING order by COUNT_B_STRING"; Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES); - props.setProperty(PhoenixRuntime.CURRENT_SCN_ATTRIB, Long.toString(ts + 2)); // Execute at - // timestamp 2 Connection conn = DriverManager.getConnection(getUrl(), props); try { PreparedStatement statement = conn.prepareStatement(query); @@ -191,16 +179,14 @@ public class DistinctCountIT extends BaseClientManagedTimeIT { @Test public void testDistinctCountWithGroupByOrdered() throws Exception { - long ts = nextTimestamp(); String tenantId = getOrganizationId(); String tenantId2 = "00D400000000XHP"; - initATableValues(tenantId, tenantId2, getDefaultSplits(tenantId), null, ts); + String tableName = generateUniqueName(); + initATableValues(tenantId, tenantId2, getDefaultSplits(tenantId), null, tableName); - String query = "SELECT organization_id, count(DISTINCT A_STRING) FROM aTable group by organization_id"; + String query = "SELECT organization_id, count(DISTINCT A_STRING) FROM "+tableName+" group by organization_id"; Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES); - props.setProperty(PhoenixRuntime.CURRENT_SCN_ATTRIB, Long.toString(ts + 2)); // Execute at - // timestamp 2 Connection conn = DriverManager.getConnection(getUrl(), props); try { PreparedStatement statement = conn.prepareStatement(query); @@ -219,14 +205,13 @@ public class DistinctCountIT extends BaseClientManagedTimeIT { @Test public void testDistinctCountOn2Columns() throws Exception { - long ts = nextTimestamp(); String tenantId = getOrganizationId(); - initATableValues(tenantId, null, getDefaultSplits(tenantId), null, ts); + String tableName = generateUniqueName(); + initATableValues(tenantId, null, getDefaultSplits(tenantId), null, tableName); - String query = "SELECT count(DISTINCT A_STRING), count(DISTINCT B_STRING) FROM aTable"; + String query = "SELECT count(DISTINCT A_STRING), count(DISTINCT B_STRING) FROM "+tableName; Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES); - props.setProperty(PhoenixRuntime.CURRENT_SCN_ATTRIB, Long.toString(ts + 10)); Connection conn = DriverManager.getConnection(getUrl(), props); try { PreparedStatement statement = conn.prepareStatement(query); @@ -242,15 +227,13 @@ public class DistinctCountIT extends BaseClientManagedTimeIT { @Test public void testDistinctCountONE() throws Exception { - long ts = nextTimestamp(); String tenantId = getOrganizationId(); - initATableValues(tenantId, null, getDefaultSplits(tenantId), null, ts); + String tableName = generateUniqueName(); + initATableValues(tenantId, null, getDefaultSplits(tenantId), null, tableName); - String query = "SELECT count(DISTINCT 1) FROM aTable"; + String query = "SELECT count(DISTINCT 1) FROM "+tableName; Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES); - props.setProperty(PhoenixRuntime.CURRENT_SCN_ATTRIB, Long.toString(ts + 2)); // Execute at - // timestamp 2 Connection conn = DriverManager.getConnection(getUrl(), props); try { PreparedStatement statement = conn.prepareStatement(query); @@ -265,14 +248,13 @@ public class DistinctCountIT extends BaseClientManagedTimeIT { @Test public void testDistinctCountONEWithEmptyResult() throws Exception { - long ts = nextTimestamp(); String tenantId = getOrganizationId(); - initATableValues(null, null, getDefaultSplits(tenantId), null, ts); + String tableName = generateUniqueName(); + initATableValues(null, null, getDefaultSplits(tenantId), null, tableName); - String query = "SELECT count(DISTINCT 1) FROM aTable"; + String query = "SELECT count(DISTINCT 1) FROM "+tableName; Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES); - props.setProperty(PhoenixRuntime.CURRENT_SCN_ATTRIB, Long.toString(ts + 10)); Connection conn = DriverManager.getConnection(getUrl(), props); try { PreparedStatement statement = conn.prepareStatement(query); @@ -285,23 +267,17 @@ public class DistinctCountIT extends BaseClientManagedTimeIT { } } - protected static void initATableValues(String tenantId1, String tenantId2, byte[][] splits, Date date, Long ts) throws Exception { - if (ts == null) { - ensureTableCreated(getUrl(), ATABLE_NAME, ATABLE_NAME, splits, null); - } else { - ensureTableCreated(getUrl(), ATABLE_NAME, ATABLE_NAME, splits, ts-2, null); - } + protected static void initATableValues(String tenantId1, String tenantId2, byte[][] splits, Date date, + String tableName) throws Exception { + ensureTableCreated(getUrl(), tableName, ATABLE_NAME, splits, null); Properties props = new Properties(); - if (ts != null) { - props.setProperty(PhoenixRuntime.CURRENT_SCN_ATTRIB, ts.toString()); - } Connection conn = DriverManager.getConnection(getUrl(), props); try { // Insert all rows at ts PreparedStatement stmt = conn.prepareStatement( - "upsert into " + - "ATABLE(" + + "upsert into " + tableName + + " (" + " ORGANIZATION_ID, " + " ENTITY_ID, " + " A_STRING, " + @@ -459,8 +435,10 @@ public class DistinctCountIT extends BaseClientManagedTimeIT { @Test public void testDistinctCountOnIndexTab() throws Exception { + String tableName=generateUniqueName(); + String indexName=generateUniqueName(); long ts = nextTimestamp(); - String ddl = "create table personal_details (id integer not null, first_name char(15),\n" + String ddl = "create table "+tableName+" (id integer not null, first_name char(15),\n" + " last_name char(15), CONSTRAINT pk PRIMARY KEY (id))"; Properties props = new Properties(); props.setProperty(PhoenixRuntime.CURRENT_SCN_ATTRIB, Long.toString(ts + 10)); @@ -471,12 +449,12 @@ public class DistinctCountIT extends BaseClientManagedTimeIT { props.setProperty(PhoenixRuntime.CURRENT_SCN_ATTRIB, Long.toString(ts + 20)); conn = DriverManager.getConnection(getUrl(), props); - conn.createStatement().execute("CREATE INDEX personal_details_idx ON personal_details(first_name)"); + conn.createStatement().execute("CREATE INDEX "+indexName+" ON "+tableName+"(first_name)"); conn.close(); props.setProperty(PhoenixRuntime.CURRENT_SCN_ATTRIB, Long.toString(ts + 30)); conn = DriverManager.getConnection(getUrl(), props); - stmt = conn.prepareStatement("upsert into personal_details(id, first_name, " + stmt = conn.prepareStatement("upsert into "+tableName+" (id, first_name, " + "last_name) VALUES (?, ?, ?)"); stmt.setInt(1, 1); stmt.setString(2, "NAME1"); @@ -495,7 +473,7 @@ public class DistinctCountIT extends BaseClientManagedTimeIT { props.setProperty(PhoenixRuntime.CURRENT_SCN_ATTRIB, Long.toString(ts + 40)); conn = DriverManager.getConnection(getUrl(), props); - String query = "SELECT COUNT (DISTINCT first_name) FROM personal_details"; + String query = "SELECT COUNT (DISTINCT first_name) FROM "+tableName; PreparedStatement statement = conn.prepareStatement(query); ResultSet rs = statement.executeQuery(); assertTrue(rs.next());