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