You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@phoenix.apache.org by sk...@apache.org on 2019/07/17 00:42:11 UTC
[phoenix] branch master updated: PHOENIX-5385: GlobalIndexChecker
coproc doesn't load on view indexes
This is an automated email from the ASF dual-hosted git repository.
skadam pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/phoenix.git
The following commit(s) were added to refs/heads/master by this push:
new fab96c3 PHOENIX-5385: GlobalIndexChecker coproc doesn't load on view indexes
fab96c3 is described below
commit fab96c3a9d031045e876cbea11033507e5c425ca
Author: s.kadam <sk...@apache.org>
AuthorDate: Tue Jul 16 12:14:41 2019 -0700
PHOENIX-5385: GlobalIndexChecker coproc doesn't load on view indexes
---
.../end2end/ParameterizedIndexUpgradeToolIT.java | 31 +++++------
.../apache/phoenix/end2end/index/DropColumnIT.java | 9 ++--
.../org/apache/phoenix/execute/MutationState.java | 60 ++++++++++++++--------
.../phoenix/mapreduce/index/IndexUpgradeTool.java | 23 +++++----
.../phoenix/query/ConnectionQueryServicesImpl.java | 13 +++--
5 files changed, 81 insertions(+), 55 deletions(-)
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 d2d68e2..2cde910 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
@@ -25,6 +25,7 @@ import org.apache.phoenix.hbase.index.IndexRegionObserver;
import org.apache.phoenix.hbase.index.Indexer;
import org.apache.phoenix.index.GlobalIndexChecker;
import org.apache.phoenix.jdbc.PhoenixConnection;
+
import org.apache.phoenix.mapreduce.index.IndexTool;
import org.apache.phoenix.mapreduce.index.IndexUpgradeTool;
import org.apache.phoenix.query.BaseTest;
@@ -60,11 +61,11 @@ import static org.apache.phoenix.mapreduce.index.IndexUpgradeTool.UPGRADE_OP;
@RunWith(Parameterized.class)
@Category(NeedsOwnMiniClusterTest.class)
public class ParameterizedIndexUpgradeToolIT extends BaseTest {
- //Please do not remove/uncomment commented items in the list until PHOENIX-5385 is fixed
private static final String [] INDEXES_LIST = {"TEST.INDEX1", "TEST.INDEX2", "TEST1.INDEX3",
- "TEST1.INDEX2","TEST1.INDEX1","TEST.INDEX3"/*, "_IDX_TEST.MOCK1", "_IDX_TEST1.MOCK2"*/};
- 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"*/};
+ "TEST1.INDEX2","TEST1.INDEX1","TEST.INDEX3", "_IDX_TEST.MOCK1", "_IDX_TEST1.MOCK2"};
+ 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 [] TABLE_LIST = {"TEST.MOCK1","TEST1.MOCK2","TEST.MOCK3"};
private static final String [] TABLE_LIST_NAMESPACE = {"TEST:MOCK1","TEST1:MOCK2","TEST:MOCK3"};
@@ -99,8 +100,8 @@ public class ParameterizedIndexUpgradeToolIT extends BaseTest {
.getQueryServices();
admin = queryServices.getAdmin();
iut = new IndexUpgradeTool(upgrade ? UPGRADE_OP : ROLLBACK_OP, INPUT_LIST,
- null, "/tmp/index_upgrade_" + UUID.randomUUID().toString(),true,
- Mockito.mock(IndexTool.class));
+ null, "/tmp/index_upgrade_" + UUID.randomUUID().toString(),true, Mockito.mock(
+ IndexTool.class));
iut.setConf(getUtility().getConfiguration());
iut.setTest(true);
if (!mutable) {
@@ -141,8 +142,7 @@ public class ParameterizedIndexUpgradeToolIT extends BaseTest {
+ "PRIMARY KEY, name varchar, city varchar, phone bigint)"+tableDDLOptions);
conn.createStatement().execute("CREATE TABLE TEST.MOCK3 (id bigint NOT NULL "
+ "PRIMARY KEY, name varchar, age bigint)"+tableDDLOptions);
- /*
- Please do not remove/uncomment commented code until PHOENIX-5385 is fixed
+
//views
conn.createStatement().execute("CREATE VIEW TEST.MOCK1_VIEW (view_column varchar) "
+ "AS SELECT * FROM TEST.MOCK1 WHERE a.name = 'a'");
@@ -158,7 +158,7 @@ public class ParameterizedIndexUpgradeToolIT extends BaseTest {
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)");*/
+ + "(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)");
@@ -190,7 +190,8 @@ public class ParameterizedIndexUpgradeToolIT extends BaseTest {
}
}
- private void checkNewIndexingCoprocessors(String [] indexList, String [] tableList) throws IOException {
+ private void checkNewIndexingCoprocessors(String [] indexList, String [] tableList)
+ throws IOException {
if (mutable) {
for (String table : tableList) {
Assert.assertTrue(admin.getDescriptor(TableName.valueOf(table))
@@ -205,7 +206,8 @@ public class ParameterizedIndexUpgradeToolIT extends BaseTest {
}
}
- private void checkOldIndexingCoprocessors(String [] indexList, String [] tableList) throws IOException {
+ private void checkOldIndexingCoprocessors(String [] indexList, String [] tableList)
+ throws IOException {
if (mutable) {
for (String table : tableList) {
Assert.assertTrue(admin.getDescriptor(TableName.valueOf(table))
@@ -234,7 +236,8 @@ public class ParameterizedIndexUpgradeToolIT extends BaseTest {
});
}
- public ParameterizedIndexUpgradeToolIT(boolean mutable, boolean upgrade, boolean isNamespaceEnabled) {
+ public ParameterizedIndexUpgradeToolIT(boolean mutable, boolean upgrade,
+ boolean isNamespaceEnabled) {
this.mutable = mutable;
this.upgrade = upgrade;
this.isNamespaceEnabled = isNamespaceEnabled;
@@ -304,8 +307,6 @@ public class ParameterizedIndexUpgradeToolIT extends BaseTest {
conn.createStatement().execute("DROP INDEX INDEX3 ON TEST1.MOCK2");
conn.createStatement().execute("DROP INDEX INDEX3 ON TEST.MOCK3");
- /*
- Please do not remove/uncomment commented code until PHOENIX-5385 is fixed
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");
@@ -313,7 +314,7 @@ public class ParameterizedIndexUpgradeToolIT extends BaseTest {
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 TEST1.MOCK2_VIEW");
conn.createStatement().execute("DROP TABLE TEST.MOCK1");
conn.createStatement().execute("DROP TABLE TEST1.MOCK2");
diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/DropColumnIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/DropColumnIT.java
index 16e38dd..6bc5031 100644
--- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/DropColumnIT.java
+++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/DropColumnIT.java
@@ -34,6 +34,7 @@ import java.util.Collection;
import java.util.Properties;
import org.apache.hadoop.hbase.KeyValue;
+import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.ResultScanner;
import org.apache.hadoop.hbase.client.Scan;
@@ -318,6 +319,7 @@ public class DropColumnIT extends ParallelStatsDisabledIT {
String localIndexTableName1 = "LOCAL_" + indexTableName + "_1";
String localIndexTableName2 = "LOCAL_" + indexTableName + "_2";
try (Connection conn = getConnection()) {
+
conn.setAutoCommit(false);
conn.createStatement().execute(
"CREATE TABLE " + dataTableFullName
@@ -342,8 +344,6 @@ public class DropColumnIT extends ParallelStatsDisabledIT {
PhoenixConnection pconn = conn.unwrap(PhoenixConnection.class);
PTable dataTable = pconn.getTable(new PTableKey(null, dataTableFullName));
assertEquals("Unexpected number of indexes ", 3, dataTable.getIndexes().size());
- PTable indexTable = dataTable.getIndexes().get(0);
- byte[] indexTablePhysicalName = indexTable.getPhysicalName().getBytes();
PName localIndexTablePhysicalName = dataTable.getIndexes().get(1).getPhysicalName();
// drop v2 which causes the regular index and first local index to be dropped
@@ -373,9 +373,10 @@ public class DropColumnIT extends ParallelStatsDisabledIT {
// verify that the regular index physical table was dropped
try {
- conn.unwrap(PhoenixConnection.class).getQueryServices().getTableDescriptor(indexTablePhysicalName);
+ conn.unwrap(PhoenixConnection.class).getQueryServices().getAdmin().getDescriptor(
+ TableName.valueOf(indexTableName));
fail("Index table should have been dropped");
- } catch (TableNotFoundException e) {
+ } catch (org.apache.hadoop.hbase.TableNotFoundException e) {
}
// verify that the local index physical table was *not* dropped
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/execute/MutationState.java b/phoenix-core/src/main/java/org/apache/phoenix/execute/MutationState.java
index cc57769..44760a8 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/execute/MutationState.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/execute/MutationState.java
@@ -43,12 +43,11 @@ import javax.annotation.concurrent.Immutable;
import org.apache.hadoop.hbase.HConstants;
import org.apache.hadoop.hbase.TableName;
-import org.apache.hadoop.hbase.client.Append;
import org.apache.hadoop.hbase.client.Delete;
-import org.apache.hadoop.hbase.client.Increment;
import org.apache.hadoop.hbase.client.Mutation;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.Table;
+import org.apache.hadoop.hbase.client.TableDescriptor;
import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
import org.apache.hadoop.hbase.util.Bytes;
import org.apache.hadoop.hbase.util.Pair;
@@ -85,6 +84,7 @@ import org.apache.phoenix.schema.PColumn;
import org.apache.phoenix.schema.PIndexState;
import org.apache.phoenix.schema.PMetaData;
import org.apache.phoenix.schema.PName;
+import org.apache.phoenix.schema.PNameFactory;
import org.apache.phoenix.schema.PRow;
import org.apache.phoenix.schema.PTable;
import org.apache.phoenix.schema.PTableRef;
@@ -104,6 +104,7 @@ import org.apache.phoenix.util.EncodedColumnsUtil;
import org.apache.phoenix.util.EnvironmentEdgeManager;
import org.apache.phoenix.util.IndexUtil;
import org.apache.phoenix.util.LogUtil;
+import org.apache.phoenix.util.MetaDataUtil;
import org.apache.phoenix.util.PhoenixKeyValueUtil;
import org.apache.phoenix.util.PhoenixRuntime;
import org.apache.phoenix.util.SQLCloseable;
@@ -509,7 +510,7 @@ public class MutationState implements SQLCloseable {
return ptr;
}
- private Iterator<Pair<PName, List<Mutation>>> addRowMutations(final TableRef tableRef,
+ private Iterator<Pair<PTable, List<Mutation>>> addRowMutations(final TableRef tableRef,
final MultiRowMutationState values, final long mutationTimestamp, final long serverTimestamp,
boolean includeAllIndexes, final boolean sendAll) {
final PTable table = tableRef.getTable();
@@ -522,7 +523,7 @@ public class MutationState implements SQLCloseable {
.newArrayListWithExpectedSize(values.size()) : null;
generateMutations(tableRef, mutationTimestamp, serverTimestamp, values, mutationList,
mutationsPertainingToIndex);
- return new Iterator<Pair<PName, List<Mutation>>>() {
+ return new Iterator<Pair<PTable, List<Mutation>>>() {
boolean isFirst = true;
Map<byte[], List<Mutation>> indexMutationsMap = null;
@@ -532,10 +533,10 @@ public class MutationState implements SQLCloseable {
}
@Override
- public Pair<PName, List<Mutation>> next() {
+ public Pair<PTable, List<Mutation>> next() {
if (isFirst) {
isFirst = false;
- return new Pair<>(table.getPhysicalName(), mutationList);
+ return new Pair<>(table, mutationList);
}
PTable index = indexes.next();
@@ -587,8 +588,9 @@ public class MutationState implements SQLCloseable {
} catch (SQLException | IOException e) {
throw new IllegalDataException(e);
}
- return new Pair<PName, List<Mutation>>(index.getPhysicalName(),
- indexMutations == null ? Collections.<Mutation> emptyList() : indexMutations);
+ return new Pair<PTable, List<Mutation>>(index,
+ indexMutations == null ? Collections.<Mutation> emptyList()
+ : indexMutations);
}
@Override
@@ -692,8 +694,9 @@ public class MutationState implements SQLCloseable {
private Iterator<Pair<byte[], List<Mutation>>> innerIterator = init();
private Iterator<Pair<byte[], List<Mutation>>> init() {
- final Iterator<Pair<PName, List<Mutation>>> mutationIterator = addRowMutations(current.getKey(),
- current.getValue(), mutationTimestamp, serverTimestamp, includeMutableIndexes, true);
+ final Iterator<Pair<PTable, List<Mutation>>> mutationIterator =
+ addRowMutations(current.getKey(), current.getValue(),
+ mutationTimestamp, serverTimestamp, includeMutableIndexes, true);
return new Iterator<Pair<byte[], List<Mutation>>>() {
@Override
public boolean hasNext() {
@@ -702,8 +705,9 @@ public class MutationState implements SQLCloseable {
@Override
public Pair<byte[], List<Mutation>> next() {
- Pair<PName, List<Mutation>> pair = mutationIterator.next();
- return new Pair<byte[], List<Mutation>>(pair.getFirst().getBytes(), pair.getSecond());
+ Pair<PTable, List<Mutation>> pair = mutationIterator.next();
+ return new Pair<byte[], List<Mutation>>(pair.getFirst().getPhysicalName()
+ .getBytes(), pair.getSecond());
}
@Override
@@ -839,14 +843,16 @@ public class MutationState implements SQLCloseable {
private final PName hTableName;
@Nonnull
private final TableRef origTableRef;
+ private final PTable pTable;
- public TableInfo(boolean isDataTable, PName hTableName, TableRef origTableRef) {
+ public TableInfo(boolean isDataTable, PName hTableName, TableRef origTableRef, PTable pTable) {
super();
checkNotNull(hTableName);
checkNotNull(origTableRef);
this.isDataTable = isDataTable;
this.hTableName = hTableName;
this.origTableRef = origTableRef;
+ this.pTable = pTable;
}
public boolean isDataTable() {
@@ -861,6 +867,10 @@ public class MutationState implements SQLCloseable {
return origTableRef;
}
+ public PTable getPTable() {
+ return pTable;
+ }
+
@Override
public int hashCode() {
final int prime = 31;
@@ -878,6 +888,8 @@ public class MutationState implements SQLCloseable {
TableInfo other = (TableInfo)obj;
if (!hTableName.equals(other.hTableName)) return false;
if (isDataTable != other.isDataTable) return false;
+ if (!pTable.equals(other.pTable)) return false;
+
return true;
}
@@ -916,17 +928,20 @@ public class MutationState implements SQLCloseable {
long mutationTimestamp = scn == null ?
(table.isTransactional() == true ? HConstants.LATEST_TIMESTAMP : EnvironmentEdgeManager.currentTimeMillis())
: scn;
- Iterator<Pair<PName, List<Mutation>>>
+ Iterator<Pair<PTable, List<Mutation>>>
mutationsIterator =
addRowMutations(tableRef, multiRowMutationState, mutationTimestamp,
serverTimestamp, false, sendAll);
// build map from physical table to mutation list
boolean isDataTable = true;
while (mutationsIterator.hasNext()) {
- Pair<PName, List<Mutation>> pair = mutationsIterator.next();
- PName hTableName = pair.getFirst();
+ Pair<PTable, List<Mutation>> pair = mutationsIterator.next();
+ PTable logicalTable = pair.getFirst();
List<Mutation> mutationList = pair.getSecond();
- TableInfo tableInfo = new TableInfo(isDataTable, hTableName, tableRef);
+
+ TableInfo tableInfo = new TableInfo(isDataTable, logicalTable.getPhysicalName(),
+ tableRef, logicalTable);
+
List<Mutation>
oldMutationList =
physicalTableMutationMap.put(tableInfo, mutationList);
@@ -972,7 +987,6 @@ public class MutationState implements SQLCloseable {
+ verifiedOrDeletedIndexMutations.toString(),
ex);
}
-
}
}
@@ -1198,11 +1212,13 @@ public class MutationState implements SQLCloseable {
while (mapIter.hasNext()) {
Entry<TableInfo, List<Mutation>> pair = mapIter.next();
TableInfo tableInfo = pair.getKey();
- if (tableInfo.getOrigTableRef().getTable().isImmutableRows() && IndexUtil.isGlobalIndexCheckerEnabled(connection, tableInfo.getHTableName())) {
- PTable table = PhoenixRuntime.getTable(connection, tableInfo.getHTableName().getString());
- byte[] emptyCF = SchemaUtil.getEmptyColumnFamily(table);
- byte[] emptyCQ = EncodedColumnsUtil.getEmptyKeyValueInfo(table).getFirst();
+ PTable logicalTable = tableInfo.getPTable();
+ if (tableInfo.getOrigTableRef().getTable().isImmutableRows()
+ && IndexUtil.isGlobalIndexCheckerEnabled(connection,
+ tableInfo.getHTableName())) {
+ byte[] emptyCF = SchemaUtil.getEmptyColumnFamily(logicalTable);
+ byte[] emptyCQ = EncodedColumnsUtil.getEmptyKeyValueInfo(logicalTable).getFirst();
List<Mutation> mutations = pair.getValue();
for (Mutation m : mutations) {
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/mapreduce/index/IndexUpgradeTool.java b/phoenix-core/src/main/java/org/apache/phoenix/mapreduce/index/IndexUpgradeTool.java
index 86ed66b..4d68165 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/mapreduce/index/IndexUpgradeTool.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/mapreduce/index/IndexUpgradeTool.java
@@ -48,6 +48,7 @@ import org.apache.phoenix.util.MetaDataUtil;
import org.apache.phoenix.util.PhoenixRuntime;
import java.sql.ResultSet;
+import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
@@ -96,6 +97,7 @@ public class IndexUpgradeTool extends Configured {
public static final String UPGRADE_OP = "upgrade";
public static final String ROLLBACK_OP = "rollback";
private static final String GLOBAL_INDEX_ID = "#NA#";
+ private IndexTool indexingTool;
private HashMap<String, HashSet<String>> tablesAndIndexes = new HashMap<>();
private HashMap<String, HashMap<String,String>> rebuildMap = new HashMap<>();
@@ -106,7 +108,6 @@ public class IndexUpgradeTool extends Configured {
private String inputTables;
private String logFile;
private String inputFile;
- private IndexTool indexingTool;
private boolean test = false;
@@ -160,13 +161,13 @@ public class IndexUpgradeTool extends Configured {
}
public IndexUpgradeTool(String mode, String tables, String inputFile,
- String outputFile, boolean dryRun, IndexTool indexingTool) {
+ String outputFile, boolean dryRun, IndexTool indexTool) {
this.operation = mode;
this.inputTables = tables;
this.inputFile = inputFile;
this.logFile = outputFile;
this.dryRun = dryRun;
- this.indexingTool = indexingTool;
+ this.indexingTool = indexTool;
}
public IndexUpgradeTool () { }
@@ -253,7 +254,6 @@ public class IndexUpgradeTool extends Configured {
inputFile = cmdLine.getOptionValue(TABLE_CSV_FILE_OPTION.getOpt());
dryRun = cmdLine.hasOption(DRY_RUN_OPTION.getOpt());
syncRebuild = cmdLine.hasOption(INDEX_SYNC_REBUILD_OPTION.getOpt());
- indexingTool = new IndexTool();
}
@VisibleForTesting
@@ -340,7 +340,11 @@ public class IndexUpgradeTool extends Configured {
modifyTable(admin, dataTableFullName, indexes);
enableTable(admin, dataTableFullName, indexes);
if (upgrade) {
- rebuildIndexes(dataTableFullName, conf);
+ if(!test) {
+ indexingTool = new IndexTool();
+ }
+ indexingTool.setConf(conf);
+ rebuildIndexes(dataTableFullName, indexingTool);
}
} catch (IOException | SQLException | InterruptedException e) {
LOGGER.severe("Something went wrong while executing " + operation + " steps " + e);
@@ -461,7 +465,7 @@ public class IndexUpgradeTool extends Configured {
}
}
- private int rebuildIndexes(String dataTable, Configuration conf) {
+ private int rebuildIndexes(String dataTable, IndexTool indexingTool) {
String schema = SchemaUtil.getSchemaNameFromFullName(dataTable);
String table = SchemaUtil.getTableNameFromFullName(dataTable);
for(Map.Entry<String, String> indexMap : rebuildMap.get(dataTable).entrySet()) {
@@ -469,12 +473,11 @@ public class IndexUpgradeTool extends Configured {
String tenantId = indexMap.getValue();
String indexName = SchemaUtil.getTableNameFromFullName(index);
String outFile = "/tmp/index_rebuild_" + indexName +
- (tenantId.equals(GLOBAL_INDEX_ID)?"":"_"+tenantId) +"_"+ UUID.randomUUID().toString();
+ (GLOBAL_INDEX_ID.equals(tenantId)?"":"_"+tenantId) +"_"+ UUID.randomUUID().toString();
String[] args =
{ "-s", schema, "-dt", table, "-it", indexName, "-direct", "-op", outFile };
- indexingTool.setConf(conf);
- List<String> list = Arrays.asList(args);
- if (!tenantId.equals(GLOBAL_INDEX_ID)) {
+ ArrayList<String> list = new ArrayList<>(Arrays.asList(args));
+ if (!GLOBAL_INDEX_ID.equals(tenantId)) {
list.add("-tenant");
list.add(tenantId);
}
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 77b541a..16c8777 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
@@ -916,12 +916,17 @@ public class ConnectionQueryServicesImpl extends DelegateQueryServices implement
boolean indexRegionObserverEnabled = config.getBoolean(
QueryServices.INDEX_REGION_OBSERVER_ENABLED_ATTRIB,
QueryServicesOptions.DEFAULT_INDEX_REGION_OBSERVER_ENABLED);
+ boolean isViewIndex = TRUE_BYTES_AS_STRING
+ .equals(tableProps.get(MetaDataUtil.IS_VIEW_INDEX_TABLE_PROP_NAME));
- if (tableType == PTableType.INDEX && !isTransactional) {
+ if ((tableType == PTableType.INDEX && !isTransactional) || isViewIndex) {
if (!indexRegionObserverEnabled && newDesc.hasCoprocessor(GlobalIndexChecker.class.getName())) {
builder.removeCoprocessor(GlobalIndexChecker.class.getName());
} else if (indexRegionObserverEnabled && !newDesc.hasCoprocessor(GlobalIndexChecker.class.getName()) &&
!isLocalIndexTable(newDesc.getColumnFamilyNames())) {
+ if (newDesc.hasCoprocessor(IndexRegionObserver.class.getName())) {
+ builder.removeCoprocessor(IndexRegionObserver.class.getName());
+ }
builder.addCoprocessor(GlobalIndexChecker.class.getName(), null, priority - 1, null);
}
}
@@ -943,7 +948,7 @@ public class ConnectionQueryServicesImpl extends DelegateQueryServices implement
// Since indexes can't have indexes, don't install our indexing coprocessor for indexes.
// Also don't install on the SYSTEM.CATALOG and SYSTEM.STATS table because we use
// all-or-none mutate class which break when this coprocessor is installed (PHOENIX-1318).
- if ((tableType != PTableType.INDEX && tableType != PTableType.VIEW)
+ if ((tableType != PTableType.INDEX && tableType != PTableType.VIEW && !isViewIndex)
&& !SchemaUtil.isMetaTable(tableName)
&& !SchemaUtil.isStatsTable(tableName)) {
if (isTransactional) {
@@ -1538,7 +1543,7 @@ public class ConnectionQueryServicesImpl extends DelegateQueryServices implement
tableProps.put(MetaDataUtil.IS_VIEW_INDEX_TABLE_PROP_NAME, TRUE_BYTES_AS_STRING);
TableDescriptor desc = ensureTableCreated(physicalIndexName, PTableType.TABLE, tableProps, families, splits,
- false, isNamespaceMapped, false);
+ true, isNamespaceMapped, false);
if (desc != null) {
if (!Boolean.TRUE.equals(PBoolean.INSTANCE.toObject(desc.getValue(MetaDataUtil.IS_VIEW_INDEX_TABLE_PROP_BYTES)))) {
String fullTableName = Bytes.toString(physicalIndexName);
@@ -1861,7 +1866,7 @@ public class ConnectionQueryServicesImpl extends DelegateQueryServices implement
private void dropTables(final List<byte[]> tableNamesToDelete) throws SQLException {
SQLException sqlE = null;
try (Admin admin = getAdmin()) {
- if (tableNamesToDelete != null){
+ if (tableNamesToDelete != null) {
for ( byte[] tableName : tableNamesToDelete ) {
try {
TableName tn = TableName.valueOf(tableName);