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());

Reply via email to