You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@phoenix.apache.org by ka...@apache.org on 2019/10/31 17:36:28 UTC

[phoenix] branch 4.14-HBase-1.3 updated: PHOENIX-5553: Transactional views should not get GlobalIndexChecker coproc

This is an automated email from the ASF dual-hosted git repository.

kadir pushed a commit to branch 4.14-HBase-1.3
in repository https://gitbox.apache.org/repos/asf/phoenix.git


The following commit(s) were added to refs/heads/4.14-HBase-1.3 by this push:
     new 570ab68  PHOENIX-5553: Transactional views should not get GlobalIndexChecker coproc
570ab68 is described below

commit 570ab68f2ffd5821ec60f5412a3f2282ad9f99ed
Author: Gokcen Iskender <gi...@salesforce.com>
AuthorDate: Tue Oct 29 18:02:47 2019 -0700

    PHOENIX-5553: Transactional views should not get GlobalIndexChecker coproc
    
    Signed-off-by: Kadir <ko...@salesforce.com>
---
 .../end2end/ParameterizedIndexUpgradeToolIT.java   | 27 ++++++++++++++++++++++
 .../phoenix/query/ConnectionQueryServicesImpl.java | 14 ++++++++++-
 2 files changed, 40 insertions(+), 1 deletion(-)

diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/ParameterizedIndexUpgradeToolIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/ParameterizedIndexUpgradeToolIT.java
index 0e1da0c..f1cbb9a 100644
--- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/ParameterizedIndexUpgradeToolIT.java
+++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/ParameterizedIndexUpgradeToolIT.java
@@ -69,10 +69,14 @@ public class ParameterizedIndexUpgradeToolIT extends BaseTest {
     private static final String [] INDEXES_LIST_NAMESPACE = {"TEST:INDEX1", "TEST:INDEX2"
             , "TEST1:INDEX3", "TEST1:INDEX2","TEST1:INDEX1"
             , "TEST:INDEX3", "TEST:_IDX_MOCK1", "TEST1:_IDX_MOCK2"};
+    private static final String [] TRANSACTIONAL_INDEXES_LIST = {"TRANSACTIONAL_INDEX",
+            "_IDX_TRANSACTIONAL_TABLE"};
+
     private static final String [] TABLE_LIST = {"TEST.MOCK1","TEST1.MOCK2","TEST.MOCK3","TEST.MULTI_TENANT_TABLE"};
     private static final String [] TABLE_LIST_NAMESPACE = {"TEST:MOCK1","TEST1:MOCK2","TEST:MOCK3",
             "TEST:MULTI_TENANT_TABLE"};
 
+    private static final String [] TRANSACTIONAL_TABLE_LIST = {"TRANSACTIONAL_TABLE"};
     private static final String INPUT_LIST = "TEST.MOCK1,TEST1.MOCK2,TEST.MOCK3,TEST.MULTI_TENANT_TABLE";
     private static final String INPUT_FILE = "/tmp/input_file_index_upgrade.csv";
 
@@ -158,6 +162,10 @@ public class ParameterizedIndexUpgradeToolIT extends BaseTest {
                 "CREATE TABLE TEST.MULTI_TENANT_TABLE " + " (TENANT_ID VARCHAR(15) NOT NULL,ID INTEGER NOT NULL"
                         + ", NAME VARCHAR, CONSTRAINT PK_1 PRIMARY KEY (TENANT_ID, ID)) MULTI_TENANT=true";
         conn.createStatement().execute(createTblStr);
+        conn.createStatement().execute("CREATE TABLE TRANSACTIONAL_TABLE(id bigint NOT NULL "
+                        + "PRIMARY KEY, a.name varchar, sal bigint, address varchar) "
+                + " TRANSACTIONAL=true "//", TRANSACTION_PROVIDER='TEPHRA' "
+                + ((tableDDLOptions.trim().length() > 0) ? "," : "") + tableDDLOptions);
 
         //views
         conn.createStatement().execute("CREATE VIEW TEST.MOCK1_VIEW (view_column varchar) "
@@ -166,11 +174,15 @@ public class ParameterizedIndexUpgradeToolIT extends BaseTest {
                 + " zip varchar) AS SELECT * FROM TEST.MOCK1 WHERE a.name = 'a'");
         conn.createStatement().execute("CREATE VIEW TEST1.MOCK2_VIEW (view_column varchar,"
                 + " state varchar) AS SELECT * FROM TEST1.MOCK2 WHERE name = 'c'");
+        conn.createStatement().execute("CREATE VIEW TRANSACTIONAL_VIEW (view_column varchar,"
+                + " state varchar) AS SELECT * FROM TRANSACTIONAL_TABLE WHERE name = 'c'");
+
         //view-indexes
         conn.createStatement().execute("CREATE INDEX MOCK1_INDEX1 ON TEST.MOCK1_VIEW1 " + "(view_column)");
         conn.createStatement().execute("CREATE INDEX MOCK1_INDEX2 ON TEST.MOCK1_VIEW1 " + "(zip)");
         conn.createStatement().execute("CREATE INDEX MOCK2_INDEX1 ON TEST1.MOCK2_VIEW " + "(state, city)");
         conn.createStatement().execute("CREATE INDEX MOCK1_INDEX3 ON TEST.MOCK1_VIEW " + "(view_column)");
+        conn.createStatement().execute("CREATE INDEX TRANSACTIONAL_VIEW_INDEX ON TRANSACTIONAL_VIEW " + "(view_column)");
         //indexes
         conn.createStatement().execute("CREATE INDEX INDEX1 ON TEST.MOCK1 (sal, a.name)");
         conn.createStatement().execute("CREATE INDEX INDEX2 ON TEST.MOCK1 (a.name)");
@@ -178,6 +190,7 @@ public class ParameterizedIndexUpgradeToolIT extends BaseTest {
         conn.createStatement().execute("CREATE INDEX INDEX2 ON TEST1.MOCK2 (phone)");
         conn.createStatement().execute("CREATE INDEX INDEX3 ON TEST1.MOCK2 (name)");
         conn.createStatement().execute("CREATE INDEX INDEX3 ON TEST.MOCK3 (age, name)");
+        conn.createStatement().execute("CREATE INDEX TRANSACTIONAL_INDEX ON TRANSACTIONAL_TABLE(sal)");
 
         // Tenant ones
         connTenant.createStatement().execute(
@@ -225,6 +238,15 @@ public class ParameterizedIndexUpgradeToolIT extends BaseTest {
             Assert.assertTrue(admin.getTableDescriptor(TableName.valueOf(index))
                     .hasCoprocessor(GlobalIndexChecker.class.getName()));
         }
+        // Transactional indexes should not have new coprocessors
+        for (String index : TRANSACTIONAL_INDEXES_LIST) {
+            Assert.assertFalse(admin.getTableDescriptor(TableName.valueOf(index))
+                    .hasCoprocessor(GlobalIndexChecker.class.getName()));
+        }
+        for (String table : TRANSACTIONAL_TABLE_LIST) {
+            Assert.assertFalse(admin.getTableDescriptor(TableName.valueOf(table))
+                    .hasCoprocessor(IndexRegionObserver.class.getName()));
+        }
     }
 
     private void checkOldIndexingCoprocessors(String [] indexList, String [] tableList)
@@ -323,15 +345,18 @@ public class ParameterizedIndexUpgradeToolIT extends BaseTest {
         conn.createStatement().execute("DROP INDEX INDEX3 ON TEST1.MOCK2");
         conn.createStatement().execute("DROP INDEX INDEX3 ON TEST.MOCK3");
         connTenant.createStatement().execute("DROP INDEX MULTI_TENANT_INDEX ON TEST.TEST_TENANT_VIEW");
+        conn.createStatement().execute("DROP INDEX TRANSACTIONAL_INDEX ON TRANSACTIONAL_TABLE");
 
         conn.createStatement().execute("DROP INDEX MOCK1_INDEX3 ON TEST.MOCK1_VIEW");
         conn.createStatement().execute("DROP INDEX MOCK1_INDEX1 ON TEST.MOCK1_VIEW1");
         conn.createStatement().execute("DROP INDEX MOCK1_INDEX2 ON TEST.MOCK1_VIEW1");
         conn.createStatement().execute("DROP INDEX MOCK2_INDEX1 ON TEST1.MOCK2_VIEW");
+        conn.createStatement().execute("DROP INDEX TRANSACTIONAL_VIEW_INDEX ON TRANSACTIONAL_VIEW");
 
         conn.createStatement().execute("DROP VIEW TEST.MOCK1_VIEW");
         conn.createStatement().execute("DROP VIEW TEST.MOCK1_VIEW1");
         conn.createStatement().execute("DROP VIEW TEST1.MOCK2_VIEW");
+        conn.createStatement().execute("DROP VIEW TRANSACTIONAL_VIEW");
         connTenant.createStatement().execute("DROP VIEW TEST.TEST_TENANT_VIEW");
 
         conn.createStatement().execute("DROP TABLE TEST.MOCK1");
@@ -339,6 +364,8 @@ public class ParameterizedIndexUpgradeToolIT extends BaseTest {
         conn.createStatement().execute("DROP TABLE TEST.MOCK3");
         conn.createStatement().execute("DROP TABLE TEST.MULTI_TENANT_TABLE");
 
+        conn.createStatement().execute("DROP TABLE TRANSACTIONAL_TABLE");
+
         if (isNamespaceEnabled) {
             conn.createStatement().execute("DROP SCHEMA TEST");
             conn.createStatement().execute("DROP SCHEMA TEST1");
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/query/ConnectionQueryServicesImpl.java b/phoenix-core/src/main/java/org/apache/phoenix/query/ConnectionQueryServicesImpl.java
index 9f098d3..e59c7e9 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/query/ConnectionQueryServicesImpl.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/query/ConnectionQueryServicesImpl.java
@@ -47,6 +47,7 @@ import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.SYSTEM_STATS_NAME;
 import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.TABLE_NAME;
 import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.TABLE_SCHEM;
 import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.TENANT_ID;
+import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.TRANSACTIONAL;
 import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.VIEW_CONSTANT;
 import static org.apache.phoenix.monitoring.GlobalClientMetrics.GLOBAL_HCONNECTIONS_COUNTER;
 import static org.apache.phoenix.monitoring.GlobalClientMetrics.GLOBAL_PHOENIX_CONNECTIONS_THROTTLED_COUNTER;
@@ -861,11 +862,22 @@ public class ConnectionQueryServicesImpl extends DelegateQueryServices implement
                     QueryServices.INDEX_REGION_OBSERVER_ENABLED_ATTRIB,
                     QueryServicesOptions.DEFAULT_INDEX_REGION_OBSERVER_ENABLED);
 
-            if ((tableType == PTableType.INDEX && !isTransactional) || isViewIndex ) {
+            boolean isViewBaseTransactional = false;
+            if (!isTransactional && isViewIndex) {
+                if (Boolean.TRUE.equals(tableProps.getOrDefault(TRANSACTIONAL, Boolean.FALSE))) {
+                    isViewBaseTransactional = true;
+                }
+            }
+
+            if (!isTransactional && !isViewBaseTransactional
+                    && (tableType == PTableType.INDEX || isViewIndex)) {
                 if (!indexRegionObserverEnabled && descriptor.hasCoprocessor(GlobalIndexChecker.class.getName())) {
                     descriptor.removeCoprocessor(GlobalIndexChecker.class.getName());
                 } else if (indexRegionObserverEnabled && !descriptor.hasCoprocessor(GlobalIndexChecker.class.getName()) &&
                         !isLocalIndexTable(descriptor.getFamiliesKeys())) {
+                    if (descriptor.hasCoprocessor(IndexRegionObserver.class.getName())) {
+                        descriptor.removeCoprocessor(IndexRegionObserver.class.getName());
+                    }
                     descriptor.addCoprocessor(GlobalIndexChecker.class.getName(), null, priority - 1, null);
                 }
             }