Repository: phoenix Updated Branches: refs/heads/5.x-HBase-2.0 d3b192777 -> 30ff6d5bb
PHOENIX-4304 Adding coprocessor existence checks to avoid failures.(Rajeshbabu) Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/30ff6d5b Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/30ff6d5b Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/30ff6d5b Branch: refs/heads/5.x-HBase-2.0 Commit: 30ff6d5bbca230ccfba9cbfeceea34b06cf9b022 Parents: d3b1927 Author: Rajeshbabu Chintaguntla <rajeshb...@apache.org> Authored: Tue Nov 28 14:12:33 2017 +0530 Committer: Rajeshbabu Chintaguntla <rajeshb...@apache.org> Committed: Tue Nov 28 14:12:33 2017 +0530 ---------------------------------------------------------------------- .../query/ConnectionQueryServicesImpl.java | 28 +++++++++++++++++--- 1 file changed, 24 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/phoenix/blob/30ff6d5b/phoenix-core/src/main/java/org/apache/phoenix/query/ConnectionQueryServicesImpl.java ---------------------------------------------------------------------- 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 b31e112..6f84915 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 @@ -857,20 +857,27 @@ public class ConnectionQueryServicesImpl extends DelegateQueryServices implement && !SchemaUtil.isMetaTable(tableName) && !SchemaUtil.isStatsTable(tableName)) { if (isTransactional) { + if(!newDesc.hasCoprocessor(PhoenixTransactionalIndexer.class.getName())) { builder.addCoprocessor(PhoenixTransactionalIndexer.class.getName(), null, priority, null); + } // For alter table, remove non transactional index coprocessor + if(newDesc.hasCoprocessor(Indexer.class.getName())) { builder.removeCoprocessor(Indexer.class.getName()); + } } else { if (!newDesc.hasCoprocessor(Indexer.class.getName())) { // If exception on alter table to transition back to non transactional + if (newDesc.hasCoprocessor(PhoenixTransactionalIndexer.class.getName())) { builder.removeCoprocessor(PhoenixTransactionalIndexer.class.getName()); + } Map<String, String> opts = Maps.newHashMapWithExpectedSize(1); opts.put(NonTxIndexBuilder.CODEC_CLASS_NAME_KEY, PhoenixIndexCodec.class.getName()); Indexer.enableIndexing(builder, PhoenixIndexBuilder.class, opts, priority); } } } - if (SchemaUtil.isStatsTable(tableName)) { + if ((SchemaUtil.isStatsTable(tableName) || SchemaUtil.isMetaTable(tableName)) + && !newDesc.hasCoprocessor(MultiRowMutationEndpoint.class.getName())) { builder.addCoprocessor(MultiRowMutationEndpoint.class.getName(), null, priority, null); } @@ -878,28 +885,40 @@ public class ConnectionQueryServicesImpl extends DelegateQueryServices implement Set<byte[]> familiesKeys = builder.build().getColumnFamilyNames(); for(byte[] family: familiesKeys) { if(Bytes.toString(family).startsWith(QueryConstants.LOCAL_INDEX_COLUMN_FAMILY_PREFIX)) { + if(!newDesc.hasCoprocessor(IndexHalfStoreFileReaderGenerator.class.getName())) { builder.addCoprocessor(IndexHalfStoreFileReaderGenerator.class.getName(), - null, priority, null); + null, priority, null); break; + } } } // Setup split policy on Phoenix metadata table to ensure that the key values of a Phoenix table // stay on the same region. if (SchemaUtil.isMetaTable(tableName) || SchemaUtil.isFunctionTable(tableName)) { + if (!newDesc.hasCoprocessor(MetaDataEndpointImpl.class.getName())) { builder.addCoprocessor(MetaDataEndpointImpl.class.getName(), null, priority, null); + } if(SchemaUtil.isMetaTable(tableName) ) { + if (!newDesc.hasCoprocessor(MetaDataRegionObserver.class.getName())) { builder.addCoprocessor(MetaDataRegionObserver.class.getName(), null, priority + 1, null); + } } } else if (SchemaUtil.isSequenceTable(tableName)) { - builder.addCoprocessor(SequenceRegionObserver.class.getName(), null, priority, null); + if(!newDesc.hasCoprocessor(SequenceRegionObserver.class.getName())) { + builder.addCoprocessor(SequenceRegionObserver.class.getName(), null, priority, null); + } } if (isTransactional) { + if(!newDesc.hasCoprocessor(PhoenixTransactionalProcessor.class.getName())) { builder.addCoprocessor(PhoenixTransactionalProcessor.class.getName(), null, priority - 10, null); + } } else { // If exception on alter table to transition back to non transactional + if(newDesc.hasCoprocessor(PhoenixTransactionalProcessor.class.getName())) { builder.removeCoprocessor(PhoenixTransactionalProcessor.class.getName()); + } } } catch (IOException e) { throw ServerUtil.parseServerException(e); @@ -2191,7 +2210,8 @@ public class ConnectionQueryServicesImpl extends DelegateQueryServices implement } } } - return new Pair<>(origTableDescriptor, newTableDescriptorBuilder.build()); + return new Pair<>(origTableDescriptor, newTableDescriptorBuilder == null ? null + : newTableDescriptorBuilder.build()); } private void checkTransactionalVersionsValue(ColumnFamilyDescriptor colDescriptor) throws SQLException {