You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@phoenix.apache.org by gj...@apache.org on 2019/12/13 19:14:04 UTC

[phoenix] 02/02: PHOENIX-5578 - CREATE TABLE IF NOT EXISTS loads IndexRegionObserver on an existing table

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

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

commit d779f85e84313f690154cb527e16d76e9a6cf5c5
Author: Geoffrey Jacoby <gj...@apache.org>
AuthorDate: Tue Dec 10 14:12:14 2019 -0800

    PHOENIX-5578 - CREATE TABLE IF NOT EXISTS loads IndexRegionObserver on an existing table
---
 .../phoenix/end2end/index/IndexCoprocIT.java       | 54 ++++++++++------------
 1 file changed, 24 insertions(+), 30 deletions(-)

diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/IndexCoprocIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/IndexCoprocIT.java
index c6b4e7b..0870e37 100644
--- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/IndexCoprocIT.java
+++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/IndexCoprocIT.java
@@ -62,7 +62,7 @@ public class IndexCoprocIT extends ParallelStatsDisabledIT {
 
     @Test
     public void testCreateCoprocs() throws Exception {
-        String schemaName = "S" + generateUniqueName();
+        String schemaName = "S_" + generateUniqueName();
         String tableName = "T_" + generateUniqueName();
         String indexName = "I_" + generateUniqueName();
         String physicalTableName = SchemaUtil.getPhysicalHBaseTableName(schemaName, tableName,
@@ -77,28 +77,35 @@ public class IndexCoprocIT extends ParallelStatsDisabledIT {
         HTableDescriptor baseDescriptor = admin.getTableDescriptor(TableName.valueOf(physicalTableName));
         HTableDescriptor indexDescriptor = admin.getTableDescriptor(TableName.valueOf(physicalIndexName));
 
-        assertCoprocsContains(IndexRegionObserver.class, baseDescriptor);
-        assertCoprocsContains(GlobalIndexChecker.class, indexDescriptor);
+        assertUsingNewCoprocs(baseDescriptor, indexDescriptor);
 
-        removeCoproc(IndexRegionObserver.class, baseDescriptor, admin);
-        removeCoproc(IndexRegionObserver.class, indexDescriptor, admin);
-        removeCoproc(GlobalIndexChecker.class, indexDescriptor, admin);
+        //Simulate an index upgrade rollback by removing coprocs and enabling old Indexer
+        downgradeIndexCoprocs(admin, baseDescriptor, indexDescriptor);
 
-        Map<String, String> props = new HashMap<String, String>();
-        props.put(NonTxIndexBuilder.CODEC_CLASS_NAME_KEY, PhoenixIndexCodec.class.getName());
-        Indexer.enableIndexing(baseDescriptor, NonTxIndexBuilder.class,
-            props, 100);
-        admin.modifyTable(baseDescriptor.getTableName(), baseDescriptor);
         baseDescriptor = admin.getTableDescriptor(TableName.valueOf(physicalTableName));
         indexDescriptor = admin.getTableDescriptor(TableName.valueOf(physicalIndexName));
         assertUsingOldCoprocs(baseDescriptor, indexDescriptor);
 
+        //Now that we've downgraded, we make sure that a create statement won't re-upgrade us
         createBaseTable(schemaName, tableName, true, 0, null);
         baseDescriptor = admin.getTableDescriptor(TableName.valueOf(physicalTableName));
         indexDescriptor = admin.getTableDescriptor(TableName.valueOf(physicalIndexName));
         assertUsingOldCoprocs(baseDescriptor, indexDescriptor);
     }
 
+    private void downgradeIndexCoprocs(Admin admin, HTableDescriptor baseDescriptor,
+                                       HTableDescriptor indexDescriptor) throws Exception {
+        removeCoproc(IndexRegionObserver.class, baseDescriptor, admin);
+        removeCoproc(IndexRegionObserver.class, indexDescriptor, admin);
+        removeCoproc(GlobalIndexChecker.class, indexDescriptor, admin);
+
+        Map<String, String> props = new HashMap<String, String>();
+        props.put(NonTxIndexBuilder.CODEC_CLASS_NAME_KEY, PhoenixIndexCodec.class.getName());
+        Indexer.enableIndexing(baseDescriptor, NonTxIndexBuilder.class,
+            props, 100);
+        admin.modifyTable(baseDescriptor.getTableName(), baseDescriptor);
+    }
+
     @Test
     public void testCreateOnExistingHBaseTable() throws Exception {
         String schemaName = generateUniqueName();
@@ -140,16 +147,14 @@ public class IndexCoprocIT extends ParallelStatsDisabledIT {
         HTableDescriptor baseDescriptor = admin.getTableDescriptor(TableName.valueOf(physicalTableName));
         HTableDescriptor indexDescriptor = admin.getTableDescriptor(TableName.valueOf(physicalIndexName));
 
-        assertCoprocsContains(IndexRegionObserver.class, baseDescriptor);
-        assertCoprocsContains(GlobalIndexChecker.class, indexDescriptor);
+        assertUsingNewCoprocs(baseDescriptor, indexDescriptor);
         String columnName = "foo";
         addColumnToBaseTable(schemaName, tableName, columnName);
-        assertCoprocsContains(IndexRegionObserver.class, baseDescriptor);
-        assertCoprocsContains(GlobalIndexChecker.class, indexDescriptor);
+        assertUsingNewCoprocs(baseDescriptor, indexDescriptor);
         dropColumnToBaseTable(schemaName, tableName, columnName);
-        assertCoprocsContains(IndexRegionObserver.class, baseDescriptor);
-        assertCoprocsContains(GlobalIndexChecker.class, indexDescriptor);
+        assertUsingNewCoprocs(baseDescriptor, indexDescriptor);
     }
+
     private void assertUsingOldCoprocs(HTableDescriptor baseDescriptor,
                                        HTableDescriptor indexDescriptor) {
         assertCoprocsContains(Indexer.class, baseDescriptor);
@@ -173,29 +178,18 @@ public class IndexCoprocIT extends ParallelStatsDisabledIT {
 
     private void assertCoprocsContains(Class clazz, HTableDescriptor descriptor) {
         String expectedCoprocName = clazz.getName();
-        boolean foundCoproc = isCoprocPresent(descriptor, expectedCoprocName);
+        boolean foundCoproc = descriptor.hasCoprocessor(expectedCoprocName);
         Assert.assertTrue("Could not find coproc " + expectedCoprocName +
             " in descriptor " + descriptor,foundCoproc);
     }
 
     private void assertCoprocsNotContains(Class clazz, HTableDescriptor descriptor) {
         String expectedCoprocName = clazz.getName();
-        boolean foundCoproc = isCoprocPresent(descriptor, expectedCoprocName);
+        boolean foundCoproc = descriptor.hasCoprocessor(expectedCoprocName);
         Assert.assertFalse("Could find coproc " + expectedCoprocName +
             " in descriptor " + descriptor,foundCoproc);
     }
 
-    private boolean isCoprocPresent(HTableDescriptor descriptor, String expectedCoprocName) {
-        boolean foundCoproc = false;
-        for (String coprocName : descriptor.getCoprocessors()){
-            if (coprocName.equals(expectedCoprocName)){
-                foundCoproc = true;
-                break;
-            }
-        }
-        return foundCoproc;
-    }
-
     private void removeCoproc(Class clazz, HTableDescriptor descriptor, Admin admin) throws Exception {
         descriptor.removeCoprocessor(clazz.getName());
         admin.modifyTable(descriptor.getTableName(), descriptor);