This is an automated email from the ASF dual-hosted git repository. stoty 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 8c2b410e36 PHOENIX-6692 Add HBase 2.5 support 8c2b410e36 is described below commit 8c2b410e36cf95a918e8fad9f63e6cd0d67f8abe Author: Istvan Toth <st...@apache.org> AuthorDate: Mon Apr 25 15:27:15 2022 +0200 PHOENIX-6692 Add HBase 2.5 support --- Jenkinsfile | 2 +- phoenix-core/pom.xml | 3 + .../end2end/index/MutableIndexExtendedIT.java | 18 +++- .../it/resources/compatible_client_versions.json | 5 +- .../hadoop/hbase/ipc/PhoenixRpcScheduler.java | 2 +- .../schema/tool/SchemaExtractionProcessor.java | 9 +- .../java/org/apache/phoenix/util/TestUtil.java | 19 +++- .../compat/hbase/CompatPhoenixRpcScheduler.java | 11 ++ .../apache/phoenix/compat/hbase/CompatUtil.java | 12 --- .../compat/hbase/HbaseCompatCapabilities.java | 8 +- .../compat/hbase/CompatPhoenixRpcScheduler.java | 11 ++ .../apache/phoenix/compat/hbase/CompatUtil.java | 12 --- .../compat/hbase/HbaseCompatCapabilities.java | 8 +- .../compat/hbase/CompatPhoenixRpcScheduler.java | 12 +++ .../apache/phoenix/compat/hbase/CompatUtil.java | 13 --- .../compat/hbase/HbaseCompatCapabilities.java | 8 +- phoenix-hbase-compat-2.5.0/pom.xml | 113 +++++++++++++++++++++ .../phoenix/compat/hbase/CompatDelegateHTable.java | 31 ++++-- .../compat/hbase/CompatOmidTransactionTable.java | 25 +++-- .../compat/hbase/CompatPhoenixRpcScheduler.java | 17 +++- .../compat/hbase/CompatSteppingSplitPolicy.java | 8 +- .../apache/phoenix/compat/hbase/CompatUtil.java | 13 --- .../compat/hbase/HbaseCompatCapabilities.java | 8 +- pom.xml | 61 ++++++----- 24 files changed, 299 insertions(+), 130 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index aa098ba604..2a6a393a43 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -39,7 +39,7 @@ pipeline { axes { axis { name 'HBASE_PROFILE' - values '2.3', '2.4' + values '2.3', '2.4', '2.5' } } diff --git a/phoenix-core/pom.xml b/phoenix-core/pom.xml index cf410b3384..f162aa8128 100644 --- a/phoenix-core/pom.xml +++ b/phoenix-core/pom.xml @@ -65,6 +65,9 @@ || ("${hbase.compat.version}".equals("2.4.1") && hbaseMinor == 4 && hbasePatch >=1) + || ("${hbase.compat.version}".equals("2.5.0") + && hbaseMinor == 5 + && hbasePatch >=0) ) </condition> </evaluateBeanshell> diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/MutableIndexExtendedIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/MutableIndexExtendedIT.java index f7aa1b45a2..4987c6e776 100644 --- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/MutableIndexExtendedIT.java +++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/MutableIndexExtendedIT.java @@ -21,6 +21,9 @@ import org.apache.hadoop.hbase.TableName; import org.apache.hadoop.hbase.client.*; import org.apache.hadoop.hbase.regionserver.HRegion; import org.apache.hadoop.hbase.regionserver.HStore; +import org.apache.hadoop.hbase.regionserver.compactions.CompactionContext; +import org.apache.hadoop.hbase.regionserver.compactions.CompactionLifeCycleTracker; +import org.apache.hadoop.hbase.regionserver.throttle.NoLimitThroughputController; import org.apache.hadoop.hbase.snapshot.SnapshotTestingUtils; import org.apache.hadoop.hbase.util.Bytes; import org.apache.hadoop.hbase.util.Threads; @@ -49,6 +52,7 @@ import java.sql.Connection; import java.util.Arrays; import java.util.Collection; import java.util.List; +import java.util.Optional; import java.util.Properties; import static org.apache.phoenix.util.TestUtil.TEST_PROPERTIES; @@ -125,8 +129,13 @@ public class MutableIndexExtendedIT extends ParallelStatsDisabledIT { HRegion hRegion = regions.get(0); hRegion.flush(true); HStore store = hRegion.getStore(famBytes); + // Trigger major compaction store.triggerMajorCompaction(); - store.compactRecentForTestingAssumingDefaultPolicy(1); + Optional<CompactionContext> requestCompaction = + store.requestCompaction(org.apache.hadoop.hbase.regionserver.Store.PRIORITY_USER, + CompactionLifeCycleTracker.DUMMY, null); + store.compact(requestCompaction.get(), NoLimitThroughputController.INSTANCE, null); + assertEquals(1, store.getStorefiles().size()); // we should be able to compact syscat itself as well regions = @@ -135,8 +144,13 @@ public class MutableIndexExtendedIT extends ParallelStatsDisabledIT { hRegion = regions.get(0); hRegion.flush(true); store = hRegion.getStore(QueryConstants.DEFAULT_COLUMN_FAMILY_BYTES); + // Trigger major compaction store.triggerMajorCompaction(); - store.compactRecentForTestingAssumingDefaultPolicy(1); + requestCompaction = + store.requestCompaction(org.apache.hadoop.hbase.regionserver.Store.PRIORITY_USER, + CompactionLifeCycleTracker.DUMMY, null); + store.compact(requestCompaction.get(), NoLimitThroughputController.INSTANCE, null); + assertEquals(1, store.getStorefiles().size()); } } diff --git a/phoenix-core/src/it/resources/compatible_client_versions.json b/phoenix-core/src/it/resources/compatible_client_versions.json index ed189cc416..2cb449015c 100644 --- a/phoenix-core/src/it/resources/compatible_client_versions.json +++ b/phoenix-core/src/it/resources/compatible_client_versions.json @@ -23,6 +23,7 @@ "1.6": [ {"artifactId":"phoenix-client-hbase-1.6", "version":"4.16.0"} ], "2.1": [ {"artifactId":"phoenix-client-hbase-2.1", "version":"5.1.0"} ], "2.2": [ {"artifactId":"phoenix-client-hbase-2.2", "version":"5.1.0"} ], - "2.3": [ {"artifactId":"phoenix-client-hbase-2.3", "version":"5.1.0"} ], - "2.4": [ {"artifactId":"phoenix-client-hbase-2.4", "version":"5.1.0"} ] + "2.3": [ {"artifactId":"phoenix-client-hbase-2.3", "version":"5.1.0"}, {"artifactId":"phoenix-client-hbase-2.3", "version":"5.2.0"} ], + "2.4": [ {"artifactId":"phoenix-client-hbase-2.4", "version":"5.1.0"}, {"artifactId":"phoenix-client-hbase-2.3", "version":"5.2.0"} ], + "2.5": [ {"artifactId":"phoenix-client-hbase-2.5", "version":"5.2.0"} ] } diff --git a/phoenix-core/src/main/java/org/apache/hadoop/hbase/ipc/PhoenixRpcScheduler.java b/phoenix-core/src/main/java/org/apache/hadoop/hbase/ipc/PhoenixRpcScheduler.java index 6d816ec17d..ea6a5c9719 100644 --- a/phoenix-core/src/main/java/org/apache/hadoop/hbase/ipc/PhoenixRpcScheduler.java +++ b/phoenix-core/src/main/java/org/apache/hadoop/hbase/ipc/PhoenixRpcScheduler.java @@ -88,7 +88,7 @@ public class PhoenixRpcScheduler extends CompatPhoenixRpcScheduler { } @Override - public boolean dispatch(CallRunner callTask) throws InterruptedException, IOException { + public boolean compatDispatch(CallRunner callTask) throws IOException, InterruptedException { RpcCall call = callTask.getRpcCall(); int priority = call.getHeader().getPriority(); if (indexPriority == priority) { diff --git a/phoenix-core/src/main/java/org/apache/phoenix/schema/tool/SchemaExtractionProcessor.java b/phoenix-core/src/main/java/org/apache/phoenix/schema/tool/SchemaExtractionProcessor.java index 72267cb1fd..4ea76aaa2a 100644 --- a/phoenix-core/src/main/java/org/apache/phoenix/schema/tool/SchemaExtractionProcessor.java +++ b/phoenix-core/src/main/java/org/apache/phoenix/schema/tool/SchemaExtractionProcessor.java @@ -46,7 +46,7 @@ import java.util.Map; import java.util.Set; import java.util.List; import java.util.ArrayList; - +import java.util.Arrays; import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.TRANSACTION_PROVIDER; import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.UPDATE_CACHE_FREQUENCY; @@ -59,6 +59,9 @@ public class SchemaExtractionProcessor implements SchemaProcessor { private static final String CREATE_TABLE = "CREATE TABLE %s"; private static final String CREATE_INDEX = "CREATE %sINDEX %s ON %s"; private static final String CREATE_VIEW = "CREATE VIEW %s%s AS SELECT * FROM %s%s"; + private static final List<String> QUOTE_PROPERTIES = + //Copying here, because this only exists in Hbase 2.5+ + Arrays.asList(new String[] {"hbase.store.file-tracker.impl"}); private PTable table; private Configuration conf; @@ -399,7 +402,9 @@ public class SchemaExtractionProcessor implements SchemaProcessor { String columnFamilyName = QueryConstants.DEFAULT_COLUMN_FAMILY; String[] colPropKey = key.split("\\."); - if (colPropKey.length > 1) { + if (QUOTE_PROPERTIES.contains(key)) { + key = "\"" + key + "\""; + } else if (colPropKey.length > 1) { columnFamilyName = colPropKey[0]; key = colPropKey[1]; } diff --git a/phoenix-core/src/test/java/org/apache/phoenix/util/TestUtil.java b/phoenix-core/src/test/java/org/apache/phoenix/util/TestUtil.java index 30d3d7c4cc..c4fd0809db 100644 --- a/phoenix-core/src/test/java/org/apache/phoenix/util/TestUtil.java +++ b/phoenix-core/src/test/java/org/apache/phoenix/util/TestUtil.java @@ -810,14 +810,23 @@ public class TestUtil { public static void majorCompact(HBaseTestingUtility utility, TableName table) throws IOException, InterruptedException { long compactionRequestedSCN = EnvironmentEdgeManager.currentTimeMillis(); - Admin admin = utility.getHBaseAdmin(); + Admin admin = utility.getAdmin(); admin.majorCompact(table); long lastCompactionTimestamp; CompactionState state = null; - while ((lastCompactionTimestamp = admin.getLastMajorCompactionTimestamp(table)) - < compactionRequestedSCN - || (state = admin.getCompactionState(table)).equals(CompactionState.MAJOR) - || admin.getCompactionState(table).equals(CompactionState.MAJOR_AND_MINOR)){ + CompactionState previousState = null; + while ((state = admin.getCompactionState(table)).equals(CompactionState.MAJOR) + || state.equals(CompactionState.MAJOR_AND_MINOR) + || (lastCompactionTimestamp = + admin.getLastMajorCompactionTimestamp(table)) < compactionRequestedSCN) { + // In HBase 2.5 getLastMajorCompactionTimestamp doesn't seem to get updated when the + // clock is stopped, so check for the state going to NONE instead + if (state.equals(CompactionState.NONE) && (previousState != null + && previousState.equals(CompactionState.MAJOR_AND_MINOR) + || previousState.equals(CompactionState.MAJOR))) { + break; + } + previousState = state; Thread.sleep(100); } } diff --git a/phoenix-hbase-compat-2.3.0/src/main/java/org/apache/phoenix/compat/hbase/CompatPhoenixRpcScheduler.java b/phoenix-hbase-compat-2.3.0/src/main/java/org/apache/phoenix/compat/hbase/CompatPhoenixRpcScheduler.java index 5f0bc0dc4a..b8a255a7e9 100644 --- a/phoenix-hbase-compat-2.3.0/src/main/java/org/apache/phoenix/compat/hbase/CompatPhoenixRpcScheduler.java +++ b/phoenix-hbase-compat-2.3.0/src/main/java/org/apache/phoenix/compat/hbase/CompatPhoenixRpcScheduler.java @@ -17,6 +17,9 @@ */ package org.apache.phoenix.compat.hbase; +import java.io.IOException; + +import org.apache.hadoop.hbase.ipc.CallRunner; import org.apache.hadoop.hbase.ipc.RpcScheduler; /** @@ -25,5 +28,13 @@ import org.apache.hadoop.hbase.ipc.RpcScheduler; */ public abstract class CompatPhoenixRpcScheduler extends RpcScheduler { protected RpcScheduler delegate; + + @Override + public boolean dispatch(CallRunner task) throws IOException, InterruptedException { + return compatDispatch(task); + } + + public abstract boolean compatDispatch(CallRunner task) + throws IOException, InterruptedException; } diff --git a/phoenix-hbase-compat-2.3.0/src/main/java/org/apache/phoenix/compat/hbase/CompatUtil.java b/phoenix-hbase-compat-2.3.0/src/main/java/org/apache/phoenix/compat/hbase/CompatUtil.java index c76fe95b85..c07353f02a 100644 --- a/phoenix-hbase-compat-2.3.0/src/main/java/org/apache/phoenix/compat/hbase/CompatUtil.java +++ b/phoenix-hbase-compat-2.3.0/src/main/java/org/apache/phoenix/compat/hbase/CompatUtil.java @@ -18,32 +18,20 @@ package org.apache.phoenix.compat.hbase; import org.apache.hadoop.conf.Configuration; -import org.apache.hadoop.hbase.Cell; import org.apache.hadoop.hbase.CellComparator; -import org.apache.hadoop.hbase.CellComparatorImpl; import org.apache.hadoop.hbase.MetaTableAccessor; -import org.apache.hadoop.hbase.RegionMetrics; -import org.apache.hadoop.hbase.ServerName; import org.apache.hadoop.hbase.TableName; -import org.apache.hadoop.hbase.client.Admin; import org.apache.hadoop.hbase.client.Connection; import org.apache.hadoop.hbase.client.Scan; -import org.apache.hadoop.hbase.exceptions.DeserializationException; import org.apache.hadoop.hbase.io.compress.Compression.Algorithm; import org.apache.hadoop.hbase.io.encoding.DataBlockEncoding; import org.apache.hadoop.hbase.io.hfile.HFileContext; import org.apache.hadoop.hbase.io.hfile.HFileContextBuilder; import org.apache.hadoop.hbase.regionserver.HStore; -import org.apache.hadoop.hbase.regionserver.StoreFileWriter; -import org.apache.hadoop.hbase.security.access.Permission; -import org.apache.hadoop.hbase.security.access.PermissionStorage; import org.apache.hadoop.hbase.util.ChecksumType; -import org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.io.IOException; - public class CompatUtil { diff --git a/phoenix-hbase-compat-2.3.0/src/main/java/org/apache/phoenix/compat/hbase/HbaseCompatCapabilities.java b/phoenix-hbase-compat-2.3.0/src/main/java/org/apache/phoenix/compat/hbase/HbaseCompatCapabilities.java index bf4c3c9c67..9fc812c655 100644 --- a/phoenix-hbase-compat-2.3.0/src/main/java/org/apache/phoenix/compat/hbase/HbaseCompatCapabilities.java +++ b/phoenix-hbase-compat-2.3.0/src/main/java/org/apache/phoenix/compat/hbase/HbaseCompatCapabilities.java @@ -19,8 +19,6 @@ package org.apache.phoenix.compat.hbase; public class HbaseCompatCapabilities { - - // Currently each supported HBase version has the same capabilities, so there is - // nothing in here. - -} \ No newline at end of file + // Currently every supported HBase version has the same capabilities, so there is + // nothing in here. +} diff --git a/phoenix-hbase-compat-2.4.0/src/main/java/org/apache/phoenix/compat/hbase/CompatPhoenixRpcScheduler.java b/phoenix-hbase-compat-2.4.0/src/main/java/org/apache/phoenix/compat/hbase/CompatPhoenixRpcScheduler.java index 4ed9c91122..c84af2a70b 100644 --- a/phoenix-hbase-compat-2.4.0/src/main/java/org/apache/phoenix/compat/hbase/CompatPhoenixRpcScheduler.java +++ b/phoenix-hbase-compat-2.4.0/src/main/java/org/apache/phoenix/compat/hbase/CompatPhoenixRpcScheduler.java @@ -17,6 +17,9 @@ */ package org.apache.phoenix.compat.hbase; +import java.io.IOException; + +import org.apache.hadoop.hbase.ipc.CallRunner; import org.apache.hadoop.hbase.ipc.RpcScheduler; /** @@ -25,4 +28,12 @@ import org.apache.hadoop.hbase.ipc.RpcScheduler; */ public abstract class CompatPhoenixRpcScheduler extends RpcScheduler { protected RpcScheduler delegate; + + @Override + public boolean dispatch(CallRunner task) throws IOException, InterruptedException { + return compatDispatch(task); + } + + public abstract boolean compatDispatch(CallRunner task) + throws IOException, InterruptedException; } diff --git a/phoenix-hbase-compat-2.4.0/src/main/java/org/apache/phoenix/compat/hbase/CompatUtil.java b/phoenix-hbase-compat-2.4.0/src/main/java/org/apache/phoenix/compat/hbase/CompatUtil.java index 46966afaf1..bf32584603 100644 --- a/phoenix-hbase-compat-2.4.0/src/main/java/org/apache/phoenix/compat/hbase/CompatUtil.java +++ b/phoenix-hbase-compat-2.4.0/src/main/java/org/apache/phoenix/compat/hbase/CompatUtil.java @@ -18,32 +18,20 @@ package org.apache.phoenix.compat.hbase; import org.apache.hadoop.conf.Configuration; -import org.apache.hadoop.hbase.Cell; import org.apache.hadoop.hbase.CellComparator; -import org.apache.hadoop.hbase.CellComparatorImpl; import org.apache.hadoop.hbase.MetaTableAccessor; -import org.apache.hadoop.hbase.RegionMetrics; -import org.apache.hadoop.hbase.ServerName; import org.apache.hadoop.hbase.TableName; -import org.apache.hadoop.hbase.client.Admin; import org.apache.hadoop.hbase.client.Connection; import org.apache.hadoop.hbase.client.Scan; -import org.apache.hadoop.hbase.exceptions.DeserializationException; import org.apache.hadoop.hbase.io.compress.Compression.Algorithm; import org.apache.hadoop.hbase.io.encoding.DataBlockEncoding; import org.apache.hadoop.hbase.io.hfile.HFileContext; import org.apache.hadoop.hbase.io.hfile.HFileContextBuilder; import org.apache.hadoop.hbase.regionserver.HStore; -import org.apache.hadoop.hbase.regionserver.StoreFileWriter; -import org.apache.hadoop.hbase.security.access.Permission; -import org.apache.hadoop.hbase.security.access.PermissionStorage; import org.apache.hadoop.hbase.util.ChecksumType; -import org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.io.IOException; - public class CompatUtil { diff --git a/phoenix-hbase-compat-2.4.0/src/main/java/org/apache/phoenix/compat/hbase/HbaseCompatCapabilities.java b/phoenix-hbase-compat-2.4.0/src/main/java/org/apache/phoenix/compat/hbase/HbaseCompatCapabilities.java index f63e74452e..9fc812c655 100644 --- a/phoenix-hbase-compat-2.4.0/src/main/java/org/apache/phoenix/compat/hbase/HbaseCompatCapabilities.java +++ b/phoenix-hbase-compat-2.4.0/src/main/java/org/apache/phoenix/compat/hbase/HbaseCompatCapabilities.java @@ -19,8 +19,6 @@ package org.apache.phoenix.compat.hbase; public class HbaseCompatCapabilities { - - // Currently each supported HBase version has the same capabilities, so there is - // nothing in here. - -} \ No newline at end of file + // Currently every supported HBase version has the same capabilities, so there is + // nothing in here. +} diff --git a/phoenix-hbase-compat-2.4.1/src/main/java/org/apache/phoenix/compat/hbase/CompatPhoenixRpcScheduler.java b/phoenix-hbase-compat-2.4.1/src/main/java/org/apache/phoenix/compat/hbase/CompatPhoenixRpcScheduler.java index 4ed9c91122..b8a255a7e9 100644 --- a/phoenix-hbase-compat-2.4.1/src/main/java/org/apache/phoenix/compat/hbase/CompatPhoenixRpcScheduler.java +++ b/phoenix-hbase-compat-2.4.1/src/main/java/org/apache/phoenix/compat/hbase/CompatPhoenixRpcScheduler.java @@ -17,6 +17,9 @@ */ package org.apache.phoenix.compat.hbase; +import java.io.IOException; + +import org.apache.hadoop.hbase.ipc.CallRunner; import org.apache.hadoop.hbase.ipc.RpcScheduler; /** @@ -25,4 +28,13 @@ import org.apache.hadoop.hbase.ipc.RpcScheduler; */ public abstract class CompatPhoenixRpcScheduler extends RpcScheduler { protected RpcScheduler delegate; + + @Override + public boolean dispatch(CallRunner task) throws IOException, InterruptedException { + return compatDispatch(task); + } + + public abstract boolean compatDispatch(CallRunner task) + throws IOException, InterruptedException; } + diff --git a/phoenix-hbase-compat-2.4.1/src/main/java/org/apache/phoenix/compat/hbase/CompatUtil.java b/phoenix-hbase-compat-2.4.1/src/main/java/org/apache/phoenix/compat/hbase/CompatUtil.java index d52608cfe2..a59f19e8bb 100644 --- a/phoenix-hbase-compat-2.4.1/src/main/java/org/apache/phoenix/compat/hbase/CompatUtil.java +++ b/phoenix-hbase-compat-2.4.1/src/main/java/org/apache/phoenix/compat/hbase/CompatUtil.java @@ -18,33 +18,20 @@ package org.apache.phoenix.compat.hbase; import org.apache.hadoop.conf.Configuration; -import org.apache.hadoop.hbase.Cell; import org.apache.hadoop.hbase.CellComparator; -import org.apache.hadoop.hbase.CellComparatorImpl; import org.apache.hadoop.hbase.MetaTableAccessor; -import org.apache.hadoop.hbase.RegionMetrics; -import org.apache.hadoop.hbase.ServerName; import org.apache.hadoop.hbase.TableName; -import org.apache.hadoop.hbase.client.Admin; import org.apache.hadoop.hbase.client.Connection; import org.apache.hadoop.hbase.client.Scan; -import org.apache.hadoop.hbase.exceptions.DeserializationException; import org.apache.hadoop.hbase.io.compress.Compression.Algorithm; import org.apache.hadoop.hbase.io.encoding.DataBlockEncoding; import org.apache.hadoop.hbase.io.hfile.HFileContext; import org.apache.hadoop.hbase.io.hfile.HFileContextBuilder; -import org.apache.hadoop.hbase.regionserver.HStore; -import org.apache.hadoop.hbase.regionserver.StoreFileWriter; import org.apache.hadoop.hbase.regionserver.StoreUtils; -import org.apache.hadoop.hbase.security.access.Permission; -import org.apache.hadoop.hbase.security.access.PermissionStorage; import org.apache.hadoop.hbase.util.ChecksumType; -import org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.io.IOException; - public class CompatUtil { diff --git a/phoenix-hbase-compat-2.4.1/src/main/java/org/apache/phoenix/compat/hbase/HbaseCompatCapabilities.java b/phoenix-hbase-compat-2.4.1/src/main/java/org/apache/phoenix/compat/hbase/HbaseCompatCapabilities.java index bf4c3c9c67..9fc812c655 100644 --- a/phoenix-hbase-compat-2.4.1/src/main/java/org/apache/phoenix/compat/hbase/HbaseCompatCapabilities.java +++ b/phoenix-hbase-compat-2.4.1/src/main/java/org/apache/phoenix/compat/hbase/HbaseCompatCapabilities.java @@ -19,8 +19,6 @@ package org.apache.phoenix.compat.hbase; public class HbaseCompatCapabilities { - - // Currently each supported HBase version has the same capabilities, so there is - // nothing in here. - -} \ No newline at end of file + // Currently every supported HBase version has the same capabilities, so there is + // nothing in here. +} diff --git a/phoenix-hbase-compat-2.5.0/pom.xml b/phoenix-hbase-compat-2.5.0/pom.xml new file mode 100644 index 0000000000..e53c112bf2 --- /dev/null +++ b/phoenix-hbase-compat-2.5.0/pom.xml @@ -0,0 +1,113 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<project + xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation= + "http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> + <groupId>org.apache.phoenix</groupId> + <artifactId>phoenix</artifactId> + <version>5.2.0-SNAPSHOT</version> + </parent> + + <artifactId>phoenix-hbase-compat-2.5.0</artifactId> + <name>Phoenix Hbase 2.5.0 compatibility</name> + <description>Compatibility module for HBase 2.5.0+</description> + + <properties> + <hbase25.compat.version>2.5.0</hbase25.compat.version> + </properties> + + <dependencies> + <!-- HBase dependencies --> + <dependency> + <groupId>org.apache.hbase</groupId> + <artifactId>hbase-client</artifactId> + <version>${hbase25.compat.version}</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>org.apache.hbase</groupId> + <artifactId>hbase-common</artifactId> + <version>${hbase25.compat.version}</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>org.apache.hbase</groupId> + <artifactId>hbase-server</artifactId> + <version>${hbase25.compat.version}</version> + <scope>provided</scope> + </dependency> + <!-- Override parent dependencyManagement for transitive HBase dependencies --> + <dependency> + <groupId>org.apache.hbase</groupId> + <artifactId>hbase-hadoop-compat</artifactId> + <version>${hbase25.compat.version}</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>org.apache.hbase</groupId> + <artifactId>hbase-hadoop2-compat</artifactId> + <version>${hbase25.compat.version}</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>org.apache.hbase</groupId> + <artifactId>hbase-protocol</artifactId> + <version>${hbase25.compat.version}</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>org.apache.hbase</groupId> + <artifactId>hbase-protocol-shaded</artifactId> + <version>${hbase25.compat.version}</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>org.apache.hbase</groupId> + <artifactId>hbase-zookeeper</artifactId> + <version>${hbase25.compat.version}</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>org.apache.hbase</groupId> + <artifactId>hbase-metrics</artifactId> + <version>${hbase25.compat.version}</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>org.apache.hbase</groupId> + <artifactId>hbase-metrics-api</artifactId> + <version>${hbase25.compat.version}</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>org.slf4j</groupId> + <artifactId>slf4j-api</artifactId> + <scope>provided</scope> + </dependency> + <!-- Build with -Dwithout.tephra fails without this --> + <dependency> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + <scope>test</scope> + </dependency> + </dependencies> + +</project> diff --git a/phoenix-hbase-compat-2.3.0/src/main/java/org/apache/phoenix/compat/hbase/CompatPhoenixRpcScheduler.java b/phoenix-hbase-compat-2.5.0/src/main/java/org/apache/phoenix/compat/hbase/CompatDelegateHTable.java similarity index 55% copy from phoenix-hbase-compat-2.3.0/src/main/java/org/apache/phoenix/compat/hbase/CompatPhoenixRpcScheduler.java copy to phoenix-hbase-compat-2.5.0/src/main/java/org/apache/phoenix/compat/hbase/CompatDelegateHTable.java index 5f0bc0dc4a..a255732eff 100644 --- a/phoenix-hbase-compat-2.3.0/src/main/java/org/apache/phoenix/compat/hbase/CompatPhoenixRpcScheduler.java +++ b/phoenix-hbase-compat-2.5.0/src/main/java/org/apache/phoenix/compat/hbase/CompatDelegateHTable.java @@ -17,13 +17,28 @@ */ package org.apache.phoenix.compat.hbase; -import org.apache.hadoop.hbase.ipc.RpcScheduler; +import java.io.IOException; -/** - * {@link RpcScheduler} that first checks to see if this is an index or metadata update before - * passing off the call to the delegate {@link RpcScheduler}. - */ -public abstract class CompatPhoenixRpcScheduler extends RpcScheduler { - protected RpcScheduler delegate; -} +import org.apache.hadoop.hbase.client.RegionLocator; +import org.apache.hadoop.hbase.client.Result; +import org.apache.hadoop.hbase.client.RowMutations; +import org.apache.hadoop.hbase.client.Table; + +public abstract class CompatDelegateHTable implements Table { + + protected final Table delegate; + public CompatDelegateHTable(Table delegate) { + this.delegate = delegate; + } + + @Override + public RegionLocator getRegionLocator() throws IOException { + return delegate.getRegionLocator(); + } + + @Override + public Result mutateRow(RowMutations rm) throws IOException { + return delegate.mutateRow(rm); + } +} diff --git a/phoenix-hbase-compat-2.3.0/src/main/java/org/apache/phoenix/compat/hbase/CompatPhoenixRpcScheduler.java b/phoenix-hbase-compat-2.5.0/src/main/java/org/apache/phoenix/compat/hbase/CompatOmidTransactionTable.java similarity index 59% copy from phoenix-hbase-compat-2.3.0/src/main/java/org/apache/phoenix/compat/hbase/CompatPhoenixRpcScheduler.java copy to phoenix-hbase-compat-2.5.0/src/main/java/org/apache/phoenix/compat/hbase/CompatOmidTransactionTable.java index 5f0bc0dc4a..ae7992fb34 100644 --- a/phoenix-hbase-compat-2.3.0/src/main/java/org/apache/phoenix/compat/hbase/CompatPhoenixRpcScheduler.java +++ b/phoenix-hbase-compat-2.5.0/src/main/java/org/apache/phoenix/compat/hbase/CompatOmidTransactionTable.java @@ -17,13 +17,22 @@ */ package org.apache.phoenix.compat.hbase; -import org.apache.hadoop.hbase.ipc.RpcScheduler; +import java.io.IOException; -/** - * {@link RpcScheduler} that first checks to see if this is an index or metadata update before - * passing off the call to the delegate {@link RpcScheduler}. - */ -public abstract class CompatPhoenixRpcScheduler extends RpcScheduler { - protected RpcScheduler delegate; -} +import org.apache.hadoop.hbase.client.RegionLocator; +import org.apache.hadoop.hbase.client.Result; +import org.apache.hadoop.hbase.client.RowMutations; +import org.apache.hadoop.hbase.client.Table; + +public abstract class CompatOmidTransactionTable implements Table { + @Override + public RegionLocator getRegionLocator() throws IOException { + throw new UnsupportedOperationException(); + } + + @Override + public Result mutateRow(RowMutations rm) throws IOException { + throw new UnsupportedOperationException(); + } +} diff --git a/phoenix-hbase-compat-2.3.0/src/main/java/org/apache/phoenix/compat/hbase/CompatPhoenixRpcScheduler.java b/phoenix-hbase-compat-2.5.0/src/main/java/org/apache/phoenix/compat/hbase/CompatPhoenixRpcScheduler.java similarity index 72% copy from phoenix-hbase-compat-2.3.0/src/main/java/org/apache/phoenix/compat/hbase/CompatPhoenixRpcScheduler.java copy to phoenix-hbase-compat-2.5.0/src/main/java/org/apache/phoenix/compat/hbase/CompatPhoenixRpcScheduler.java index 5f0bc0dc4a..cb47f8291b 100644 --- a/phoenix-hbase-compat-2.3.0/src/main/java/org/apache/phoenix/compat/hbase/CompatPhoenixRpcScheduler.java +++ b/phoenix-hbase-compat-2.5.0/src/main/java/org/apache/phoenix/compat/hbase/CompatPhoenixRpcScheduler.java @@ -17,6 +17,9 @@ */ package org.apache.phoenix.compat.hbase; +import java.io.IOException; + +import org.apache.hadoop.hbase.ipc.CallRunner; import org.apache.hadoop.hbase.ipc.RpcScheduler; /** @@ -25,5 +28,17 @@ import org.apache.hadoop.hbase.ipc.RpcScheduler; */ public abstract class CompatPhoenixRpcScheduler extends RpcScheduler { protected RpcScheduler delegate; -} + @Override + public boolean dispatch(CallRunner task) { + try { + return compatDispatch(task); + } catch (Exception e) { + //This never happens with Hbase 2.5 + throw new RuntimeException(e); + } + } + + public abstract boolean compatDispatch(CallRunner task) + throws IOException, InterruptedException; +} diff --git a/phoenix-hbase-compat-2.3.0/src/main/java/org/apache/phoenix/compat/hbase/HbaseCompatCapabilities.java b/phoenix-hbase-compat-2.5.0/src/main/java/org/apache/phoenix/compat/hbase/CompatSteppingSplitPolicy.java similarity index 85% copy from phoenix-hbase-compat-2.3.0/src/main/java/org/apache/phoenix/compat/hbase/HbaseCompatCapabilities.java copy to phoenix-hbase-compat-2.5.0/src/main/java/org/apache/phoenix/compat/hbase/CompatSteppingSplitPolicy.java index bf4c3c9c67..f185153996 100644 --- a/phoenix-hbase-compat-2.3.0/src/main/java/org/apache/phoenix/compat/hbase/HbaseCompatCapabilities.java +++ b/phoenix-hbase-compat-2.5.0/src/main/java/org/apache/phoenix/compat/hbase/CompatSteppingSplitPolicy.java @@ -15,12 +15,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - package org.apache.phoenix.compat.hbase; -public class HbaseCompatCapabilities { +import org.apache.hadoop.hbase.regionserver.SteppingSplitPolicy; - // Currently each supported HBase version has the same capabilities, so there is - // nothing in here. +public class CompatSteppingSplitPolicy extends SteppingSplitPolicy { -} \ No newline at end of file +} diff --git a/phoenix-hbase-compat-2.4.1/src/main/java/org/apache/phoenix/compat/hbase/CompatUtil.java b/phoenix-hbase-compat-2.5.0/src/main/java/org/apache/phoenix/compat/hbase/CompatUtil.java similarity index 80% copy from phoenix-hbase-compat-2.4.1/src/main/java/org/apache/phoenix/compat/hbase/CompatUtil.java copy to phoenix-hbase-compat-2.5.0/src/main/java/org/apache/phoenix/compat/hbase/CompatUtil.java index d52608cfe2..a59f19e8bb 100644 --- a/phoenix-hbase-compat-2.4.1/src/main/java/org/apache/phoenix/compat/hbase/CompatUtil.java +++ b/phoenix-hbase-compat-2.5.0/src/main/java/org/apache/phoenix/compat/hbase/CompatUtil.java @@ -18,33 +18,20 @@ package org.apache.phoenix.compat.hbase; import org.apache.hadoop.conf.Configuration; -import org.apache.hadoop.hbase.Cell; import org.apache.hadoop.hbase.CellComparator; -import org.apache.hadoop.hbase.CellComparatorImpl; import org.apache.hadoop.hbase.MetaTableAccessor; -import org.apache.hadoop.hbase.RegionMetrics; -import org.apache.hadoop.hbase.ServerName; import org.apache.hadoop.hbase.TableName; -import org.apache.hadoop.hbase.client.Admin; import org.apache.hadoop.hbase.client.Connection; import org.apache.hadoop.hbase.client.Scan; -import org.apache.hadoop.hbase.exceptions.DeserializationException; import org.apache.hadoop.hbase.io.compress.Compression.Algorithm; import org.apache.hadoop.hbase.io.encoding.DataBlockEncoding; import org.apache.hadoop.hbase.io.hfile.HFileContext; import org.apache.hadoop.hbase.io.hfile.HFileContextBuilder; -import org.apache.hadoop.hbase.regionserver.HStore; -import org.apache.hadoop.hbase.regionserver.StoreFileWriter; import org.apache.hadoop.hbase.regionserver.StoreUtils; -import org.apache.hadoop.hbase.security.access.Permission; -import org.apache.hadoop.hbase.security.access.PermissionStorage; import org.apache.hadoop.hbase.util.ChecksumType; -import org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.io.IOException; - public class CompatUtil { diff --git a/phoenix-hbase-compat-2.4.1/src/main/java/org/apache/phoenix/compat/hbase/HbaseCompatCapabilities.java b/phoenix-hbase-compat-2.5.0/src/main/java/org/apache/phoenix/compat/hbase/HbaseCompatCapabilities.java similarity index 88% copy from phoenix-hbase-compat-2.4.1/src/main/java/org/apache/phoenix/compat/hbase/HbaseCompatCapabilities.java copy to phoenix-hbase-compat-2.5.0/src/main/java/org/apache/phoenix/compat/hbase/HbaseCompatCapabilities.java index bf4c3c9c67..9fc812c655 100644 --- a/phoenix-hbase-compat-2.4.1/src/main/java/org/apache/phoenix/compat/hbase/HbaseCompatCapabilities.java +++ b/phoenix-hbase-compat-2.5.0/src/main/java/org/apache/phoenix/compat/hbase/HbaseCompatCapabilities.java @@ -19,8 +19,6 @@ package org.apache.phoenix.compat.hbase; public class HbaseCompatCapabilities { - - // Currently each supported HBase version has the same capabilities, so there is - // nothing in here. - -} \ No newline at end of file + // Currently every supported HBase version has the same capabilities, so there is + // nothing in here. +} diff --git a/pom.xml b/pom.xml index 18c013e29b..779ac502cc 100644 --- a/pom.xml +++ b/pom.xml @@ -40,6 +40,7 @@ </organization> <modules> + <module>phoenix-hbase-compat-2.5.0</module> <module>phoenix-hbase-compat-2.4.1</module> <module>phoenix-hbase-compat-2.4.0</module> <module>phoenix-hbase-compat-2.3.0</module> @@ -80,11 +81,12 @@ <hbase.suffix>hbase-${hbase.profile}</hbase.suffix> <!-- This is used by the release script only --> - <hbase.profile.list>2.3 2.4.0 2.4</hbase.profile.list> + <hbase.profile.list>2.3 2.4.0 2.4 2.5</hbase.profile.list> <!-- The default hbase versions to build with (override with hbase.version) --> <hbase-2.3.runtime.version>2.3.7</hbase-2.3.runtime.version> <hbase-2.4.0.runtime.version>2.4.0</hbase-2.4.0.runtime.version> <hbase-2.4.runtime.version>2.4.13</hbase-2.4.runtime.version> + <hbase-2.5.runtime.version>2.5.0</hbase-2.5.runtime.version> <!-- General Properties --> <antlr-input.dir>src/main/antlr3</antlr-input.dir> @@ -387,6 +389,12 @@ <ignoredUnusedDeclaredDependency> org.apache.logging.log4j:log4j-1.2-api </ignoredUnusedDeclaredDependency> + <ignoredUnusedDeclaredDependency> + org.apache.logging.log4j:log4j-api + </ignoredUnusedDeclaredDependency> + <ignoredUnusedDeclaredDependency> + org.apache.logging.log4j:log4j-core + </ignoredUnusedDeclaredDependency> </ignoredUnusedDeclaredDependencies> <ignoredUsedUndeclaredDependencies> <ignoredUsedUndeclaredDependency> @@ -633,16 +641,6 @@ <artifactId>phoenix-core</artifactId> <version>${project.version}</version> </dependency> - <dependency> - <groupId>org.apache.phoenix</groupId> - <artifactId>phoenix-client-embedded-hbase-2.1</artifactId> - <version>${project.version}</version> - </dependency> - <dependency> - <groupId>org.apache.phoenix</groupId> - <artifactId>phoenix-client-embedded-hbase-2.2</artifactId> - <version>${project.version}</version> - </dependency> <dependency> <groupId>org.apache.phoenix</groupId> <artifactId>phoenix-client-embedded-hbase-2.3</artifactId> @@ -660,27 +658,27 @@ </dependency> <dependency> <groupId>org.apache.phoenix</groupId> - <artifactId>phoenix-server-hbase-2.1</artifactId> + <artifactId>phoenix-client-embedded-hbase-2.5</artifactId> <version>${project.version}</version> </dependency> <dependency> <groupId>org.apache.phoenix</groupId> - <artifactId>phoenix-server-hbase-2.2</artifactId> + <artifactId>phoenix-server-hbase-2.3</artifactId> <version>${project.version}</version> </dependency> <dependency> <groupId>org.apache.phoenix</groupId> - <artifactId>phoenix-server-hbase-2.3</artifactId> + <artifactId>phoenix-server-hbase-2.4.0</artifactId> <version>${project.version}</version> </dependency> <dependency> <groupId>org.apache.phoenix</groupId> - <artifactId>phoenix-server-hbase-2.4.0</artifactId> + <artifactId>phoenix-server-hbase-2.4</artifactId> <version>${project.version}</version> </dependency> <dependency> <groupId>org.apache.phoenix</groupId> - <artifactId>phoenix-server-hbase-2.4</artifactId> + <artifactId>phoenix-server-hbase-2.5</artifactId> <version>${project.version}</version> </dependency> <dependency> @@ -700,27 +698,22 @@ </dependency> <dependency> <groupId>org.apache.phoenix</groupId> - <artifactId>phoenix-hbase-compat-2.1.6</artifactId> - <version>${project.version}</version> - </dependency> - <dependency> - <groupId>org.apache.phoenix</groupId> - <artifactId>phoenix-hbase-compat-2.2.5</artifactId> + <artifactId>phoenix-hbase-compat-2.3.0</artifactId> <version>${project.version}</version> </dependency> <dependency> <groupId>org.apache.phoenix</groupId> - <artifactId>phoenix-hbase-compat-2.3.0</artifactId> + <artifactId>phoenix-hbase-compat-2.4.0</artifactId> <version>${project.version}</version> </dependency> <dependency> <groupId>org.apache.phoenix</groupId> - <artifactId>phoenix-hbase-compat-2.4.0</artifactId> + <artifactId>phoenix-hbase-compat-2.4.1</artifactId> <version>${project.version}</version> </dependency> <dependency> <groupId>org.apache.phoenix</groupId> - <artifactId>phoenix-hbase-compat-2.4.1</artifactId> + <artifactId>phoenix-hbase-compat-2.5.0</artifactId> <version>${project.version}</version> </dependency> <!-- Intra-project test dependencies --> @@ -1703,6 +1696,24 @@ <hbase.thirdparty.version>3.4.1</hbase.thirdparty.version> </properties> </profile> + <profile> + <!-- PHOENIX-5993 This won't work with the public HBase artifacts --> + <id>phoenix-hbase-compat-2.5.0</id> + <activation> + <property> + <name>hbase.profile</name> + <value>2.5</value> + </property> + </activation> + <properties> + <hbase.profile>2.5</hbase.profile> + <hbase.compat.version>2.5.0</hbase.compat.version> + <hadoop.version>3.2.3</hadoop.version> + <hbase.version>${hbase-2.5.runtime.version}</hbase.version> + <hbase.thirdparty.version>4.1.1</hbase.thirdparty.version> + <tephra.hbase.compat.version>2.4</tephra.hbase.compat.version> + </properties> + </profile> <profile> <id>owasp-dependency-check</id> <activation>