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 3f75168 PHOENIX-6064 Make Tephra support optional
3f75168 is described below
commit 3f751689dde86942d20da4d319dca681fb841932
Author: Istvan Toth <[email protected]>
AuthorDate: Mon Aug 3 07:40:02 2020 +0200
PHOENIX-6064 Make Tephra support optional
build with -Dwithout.tephra to omit Tephra from the artifacts
---
phoenix-core/pom.xml | 70 +++++++++++++----
.../org/apache/phoenix/end2end/IndexToolIT.java | 4 +
.../end2end/ParameterizedIndexUpgradeToolIT.java | 2 +-
.../apache/phoenix/end2end/UpsertWithSCNIT.java | 2 +-
.../phoenix/query/ConnectionQueryServicesImpl.java | 4 +-
.../apache/phoenix/query/QueryServicesOptions.java | 3 +-
.../phoenix/schema/stats/UpdateStatisticsTool.java | 22 ++++--
.../NotAvailableTransactionProvider.java | 89 ++++++++++++++++++++++
.../phoenix/transaction/TransactionFactory.java | 39 +++++++---
phoenix-tracing-webapp/pom.xml | 14 ++++
pom.xml | 30 ++++++++
11 files changed, 242 insertions(+), 37 deletions(-)
diff --git a/phoenix-core/pom.xml b/phoenix-core/pom.xml
index 1eece7f..3afc4cc 100644
--- a/phoenix-core/pom.xml
+++ b/phoenix-core/pom.xml
@@ -337,20 +337,6 @@
<type>test-jar</type>
</dependency>
- <!-- Tephra dependencies -->
- <dependency>
- <groupId>org.apache.tephra</groupId>
- <artifactId>tephra-api</artifactId>
- </dependency>
- <dependency>
- <groupId>org.apache.tephra</groupId>
- <artifactId>tephra-core</artifactId>
- </dependency>
- <dependency>
- <groupId>org.apache.tephra</groupId>
- <artifactId>tephra-hbase-compat-2.0</artifactId>
- </dependency>
-
<!-- Other dependencies -->
<dependency>
<groupId>org.antlr</groupId>
@@ -502,6 +488,62 @@
<profiles>
<profile>
+ <id>exclude-tephra</id>
+ <activation>
+ <property>
+ <name>without.tephra</name>
+ </property>
+ </activation>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.tephra</groupId>
+ <artifactId>tephra-api</artifactId>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.tephra</groupId>
+ <artifactId>tephra-core</artifactId>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.tephra</groupId>
+ <artifactId>tephra-hbase-compat-2.0</artifactId>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.thrift</groupId>
+ <artifactId>libthrift</artifactId>
+ <scope>provided</scope>
+ </dependency>
+ </dependencies>
+ </profile>
+ <profile>
+ <id>include-tephra</id>
+ <activation>
+ <property>
+ <name>!without.tephra</name>
+ </property>
+ </activation>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.tephra</groupId>
+ <artifactId>tephra-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.tephra</groupId>
+ <artifactId>tephra-core</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.tephra</groupId>
+ <artifactId>tephra-hbase-compat-2.0</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.thrift</groupId>
+ <artifactId>libthrift</artifactId>
+ </dependency>
+ </dependencies>
+ </profile>
+ <profile>
<id>phoenix-hbase-compat-2.3.0</id>
<!-- keep dependency plugin happy -->
<activation>
diff --git
a/phoenix-core/src/it/java/org/apache/phoenix/end2end/IndexToolIT.java
b/phoenix-core/src/it/java/org/apache/phoenix/end2end/IndexToolIT.java
index df21529..ee88210 100644
--- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/IndexToolIT.java
+++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/IndexToolIT.java
@@ -166,6 +166,10 @@ public class IndexToolIT extends
BaseUniqueNamesOwnClusterIT {
List<Object[]> list = Lists.newArrayListWithExpectedSize(48);
boolean[] Booleans = new boolean[] { false, true };
for (String transactionProvider : new String[] {"TEPHRA", "OMID",
null}) {
+ if(transactionProvider !=null &&
+
!TransactionFactory.Provider.valueOf(transactionProvider).runTests()) {
+ continue;
+ }
for (boolean mutable : Booleans) {
for (boolean localIndex : Booleans) {
if (!localIndex
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 de3b8f0..8118780 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
@@ -196,7 +196,7 @@ public class ParameterizedIndexUpgradeToolIT extends
BaseTest {
TRANSACTIONAL_TABLE_LIST[0] = transactTable;
conn.createStatement().execute("CREATE TABLE " + transactTable + " (id
bigint NOT NULL "
+ "PRIMARY KEY, a.name varchar, sal bigint, address
varchar) "
- + " TRANSACTIONAL=true, TRANSACTION_PROVIDER='TEPHRA' "
+ + " TRANSACTIONAL=true, TRANSACTION_PROVIDER='OMID' "
+ ((tableDDLOptions.trim().length() > 0) ? "," : "") +
tableDDLOptions);
String mockOneViewOne = "TEST." + generateUniqueName();
diff --git
a/phoenix-core/src/it/java/org/apache/phoenix/end2end/UpsertWithSCNIT.java
b/phoenix-core/src/it/java/org/apache/phoenix/end2end/UpsertWithSCNIT.java
index c21f84e..c3bba40 100644
--- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/UpsertWithSCNIT.java
+++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/UpsertWithSCNIT.java
@@ -54,7 +54,7 @@ public class UpsertWithSCNIT extends ParallelStatsDisabledIT {
+ "METRIC_ID CHAR(15) NOT NULL,METRIC_VALUE VARCHAR(50)
CONSTRAINT PK PRIMARY KEY("
+ (rowColumn? "CREATED_DATE ROW_TIMESTAMP, ":"") +
"METRIC_ID)) "
+ "IMMUTABLE_ROWS=" + (mutable? "false" : "true" )
- + (txTable ? ",
TRANSACTION_PROVIDER='TEPHRA',TRANSACTIONAL=true":"");
+ + (txTable ? ",
TRANSACTION_PROVIDER='OMID',TRANSACTIONAL=true":"");
props = new Properties();
Connection conn = DriverManager.getConnection(getUrl(), props);
conn.createStatement().execute(createTable);
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 6e7b497..ea0acf0 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
@@ -1088,7 +1088,7 @@ public class ConnectionQueryServicesImpl extends
DelegateQueryServices implement
}
} else {
// Remove all potential transactional coprocessors
- for (TransactionFactory.Provider aprovider :
TransactionFactory.Provider.values()) {
+ for (TransactionFactory.Provider aprovider :
TransactionFactory.Provider.available()) {
Class<? extends RegionObserver> coprocessorClass =
aprovider.getTransactionProvider().getCoprocessor();
Class<? extends RegionObserver> coprocessorGCClass =
aprovider.getTransactionProvider().getGCCoprocessor();
if (coprocessorClass != null &&
newDesc.hasCoprocessor(coprocessorClass.getName())) {
@@ -1449,7 +1449,7 @@ public class ConnectionQueryServicesImpl extends
DelegateQueryServices implement
}
private static boolean hasTxCoprocessor(TableDescriptor descriptor) {
- for (TransactionFactory.Provider provider :
TransactionFactory.Provider.values()) {
+ for (TransactionFactory.Provider provider :
TransactionFactory.Provider.available()) {
Class<? extends RegionObserver> coprocessorClass =
provider.getTransactionProvider().getCoprocessor();
if (coprocessorClass != null &&
descriptor.hasCoprocessor(coprocessorClass.getName())) {
return true;
diff --git
a/phoenix-core/src/main/java/org/apache/phoenix/query/QueryServicesOptions.java
b/phoenix-core/src/main/java/org/apache/phoenix/query/QueryServicesOptions.java
index 1e396db..9411d41 100644
---
a/phoenix-core/src/main/java/org/apache/phoenix/query/QueryServicesOptions.java
+++
b/phoenix-core/src/main/java/org/apache/phoenix/query/QueryServicesOptions.java
@@ -116,7 +116,6 @@ import org.apache.phoenix.trace.util.Tracing;
import org.apache.phoenix.transaction.TransactionFactory;
import org.apache.phoenix.util.DateUtil;
import org.apache.phoenix.util.ReadOnlyProps;
-import org.apache.tephra.TxConstants;
/**
@@ -450,7 +449,7 @@ public class QueryServicesOptions {
.setIfUnset(PHOENIX_ACLS_ENABLED, DEFAULT_PHOENIX_ACLS_ENABLED)
.setIfUnset(LOG_LEVEL, DEFAULT_LOGGING_LEVEL)
.setIfUnset(LOG_SAMPLE_RATE, DEFAULT_LOG_SAMPLE_RATE)
- .setIfUnset(TxConstants.TX_PRE_014_CHANGESET_KEY,
Boolean.FALSE.toString())
+ .setIfUnset("data.tx.pre.014.changeset.key",
Boolean.FALSE.toString())
.setIfUnset(CLIENT_METRICS_TAG, DEFAULT_CLIENT_METRICS_TAG)
.setIfUnset(CLIENT_INDEX_ASYNC_THRESHOLD,
DEFAULT_CLIENT_INDEX_ASYNC_THRESHOLD)
;
diff --git
a/phoenix-core/src/main/java/org/apache/phoenix/schema/stats/UpdateStatisticsTool.java
b/phoenix-core/src/main/java/org/apache/phoenix/schema/stats/UpdateStatisticsTool.java
index 1b99759..47651b3 100644
---
a/phoenix-core/src/main/java/org/apache/phoenix/schema/stats/UpdateStatisticsTool.java
+++
b/phoenix-core/src/main/java/org/apache/phoenix/schema/stats/UpdateStatisticsTool.java
@@ -48,10 +48,6 @@ import
org.apache.phoenix.mapreduce.util.PhoenixConfigurationUtil;
import org.apache.phoenix.mapreduce.util.PhoenixConfigurationUtil.MRJobType;
import org.apache.phoenix.mapreduce.util.PhoenixMapReduceUtil;
import org.apache.phoenix.util.SchemaUtil;
-import org.apache.tephra.TransactionNotInProgressException;
-import org.apache.tephra.TransactionSystemClient;
-import org.apache.tephra.hbase.coprocessor.TransactionProcessor;
-import org.apache.thrift.transport.TTransportException;
import org.apache.twill.common.Cancellable;
import org.apache.twill.discovery.DiscoveryServiceClient;
import org.apache.twill.discovery.ZKDiscoveryService;
@@ -217,10 +213,20 @@ public class UpdateStatisticsTool extends Configured
implements Tool {
job.setPriority(this.jobPriority);
TableMapReduceUtil.addDependencyJars(job);
- TableMapReduceUtil.addDependencyJarsForClasses(job.getConfiguration(),
PhoenixConnection.class, Chronology.class,
- CharStream.class, TransactionSystemClient.class,
TransactionNotInProgressException.class,
- ZKClient.class, DiscoveryServiceClient.class,
ZKDiscoveryService.class,
- Cancellable.class, TTransportException.class,
SpanReceiver.class, TransactionProcessor.class, Gauge.class,
MetricRegistriesImpl.class);
+ TableMapReduceUtil.addDependencyJarsForClasses(job.getConfiguration(),
+ PhoenixConnection.class, Chronology.class, CharStream.class,
ZKClient.class,
+ DiscoveryServiceClient.class, ZKDiscoveryService.class,
Cancellable.class,
+ SpanReceiver.class, Gauge.class, MetricRegistriesImpl.class);
+ try {
+
TableMapReduceUtil.addDependencyJarsForClasses(job.getConfiguration(),
+
Class.forName("org.apache.tephra.TransactionNotInProgressException"),
+ Class.forName("org.apache.tephra.TransactionSystemClient"),
+
Class.forName("org.apache.tephra.hbase.coprocessor.TransactionProcessor"),
+
Class.forName("org.apache.thrift.transport.TTransportException"));
+ } catch (Throwable t) {
+ //Tephra is excluded
+ }
+
LOGGER.info("UpdateStatisticsTool running for: " + tableName
+ " on snapshot: " + snapshotName + " with restore dir: " +
restoreDir);
}
diff --git
a/phoenix-core/src/main/java/org/apache/phoenix/transaction/NotAvailableTransactionProvider.java
b/phoenix-core/src/main/java/org/apache/phoenix/transaction/NotAvailableTransactionProvider.java
new file mode 100644
index 0000000..2daa6dc
--- /dev/null
+++
b/phoenix-core/src/main/java/org/apache/phoenix/transaction/NotAvailableTransactionProvider.java
@@ -0,0 +1,89 @@
+/*
+ * 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.
+ */
+package org.apache.phoenix.transaction;
+
+import java.io.IOException;
+import java.sql.SQLException;
+
+import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.hbase.client.Put;
+import org.apache.hadoop.hbase.coprocessor.RegionObserver;
+import org.apache.phoenix.jdbc.PhoenixConnection;
+import org.apache.phoenix.jdbc.PhoenixEmbeddedDriver.ConnectionInfo;
+import org.apache.phoenix.transaction.TransactionFactory.Provider;
+
+public class NotAvailableTransactionProvider implements
PhoenixTransactionProvider {
+ private static final NotAvailableTransactionProvider INSTANCE = new
NotAvailableTransactionProvider();
+
+ private static final String message="This Phoenix has been built without
Tephra support";
+
+ public static final NotAvailableTransactionProvider getInstance() {
+ return INSTANCE;
+ }
+
+ private NotAvailableTransactionProvider() {
+ }
+
+ @Override
+ public String toString() {
+ throw new UnsupportedOperationException(message);
+ }
+
+ @Override
+ public PhoenixTransactionContext getTransactionContext(byte[] txnBytes)
throws IOException {
+ throw new UnsupportedOperationException(message);
+ }
+
+ @Override
+ public PhoenixTransactionContext getTransactionContext(PhoenixConnection
connection) throws SQLException {
+ throw new UnsupportedOperationException(message);
+ }
+
+ @Override
+ public PhoenixTransactionClient getTransactionClient(Configuration config,
ConnectionInfo connectionInfo) {
+ throw new UnsupportedOperationException(message);
+ }
+
+ @Override
+ public PhoenixTransactionService getTransactionService(Configuration
config, ConnectionInfo connInfo, int port) {
+ throw new UnsupportedOperationException(message);
+ }
+
+ @Override
+ public Class<? extends RegionObserver> getCoprocessor() {
+ throw new UnsupportedOperationException(message);
+ }
+
+ @Override
+ public Class<? extends RegionObserver> getGCCoprocessor() {return null;}
+
+ @Override
+ public Provider getProvider() {
+ return TransactionFactory.Provider.TEPHRA;
+ }
+
+ @Override
+ public boolean isUnsupported(Feature feature) {
+ throw new UnsupportedOperationException(message);
+ }
+
+ @Override
+ public Put markPutAsCommitted(Put put, long timestamp, long
commitTimestamp) {
+ throw new UnsupportedOperationException(message);
+ }
+}
diff --git
a/phoenix-core/src/main/java/org/apache/phoenix/transaction/TransactionFactory.java
b/phoenix-core/src/main/java/org/apache/phoenix/transaction/TransactionFactory.java
index 0f10b37..c453c71 100644
---
a/phoenix-core/src/main/java/org/apache/phoenix/transaction/TransactionFactory.java
+++
b/phoenix-core/src/main/java/org/apache/phoenix/transaction/TransactionFactory.java
@@ -18,26 +18,47 @@
package org.apache.phoenix.transaction;
import java.io.IOException;
+import java.util.List;
import org.apache.phoenix.coprocessor.MetaDataProtocol;
+public class TransactionFactory {
+ private static PhoenixTransactionProvider tephraTransactionProvider;
+
+ static{
+ try {
+ tephraTransactionProvider = (PhoenixTransactionProvider)
+
Class.forName("org.apache.phoenix.transaction.TephraTransactionProvider")
+ .newInstance();
+ } catch (Throwable e) {
+ tephraTransactionProvider =
NotAvailableTransactionProvider.getInstance();
+ }
+ }
-public class TransactionFactory {
public enum Provider {
- TEPHRA((byte)1, TephraTransactionProvider.getInstance(), true),
+ TEPHRA((byte)1, tephraTransactionProvider,
+ tephraTransactionProvider instanceof TephraTransactionProvider),
OMID((byte)2, OmidTransactionProvider.getInstance(), true);
-
+
private final byte code;
private final PhoenixTransactionProvider provider;
private final boolean runTests;
-
+
Provider(byte code, PhoenixTransactionProvider provider, boolean
runTests) {
this.code = code;
this.provider = provider;
this.runTests = runTests;
}
-
+
+ public static Provider[] available() {
+ if(TEPHRA.getTransactionProvider() instanceof
TephraTransactionProvider) {
+ return values();
+ } else {
+ return new Provider[] {OMID};
+ }
+ }
+
public byte getCode() {
return this.code;
}
@@ -48,7 +69,7 @@ public class TransactionFactory {
}
return Provider.values()[code-1];
}
-
+
public static Provider getDefault() {
return OMID;
}
@@ -56,7 +77,7 @@ public class TransactionFactory {
public PhoenixTransactionProvider getTransactionProvider() {
return provider;
}
-
+
public boolean runTests() {
return runTests;
}
@@ -65,7 +86,7 @@ public class TransactionFactory {
public static PhoenixTransactionProvider getTransactionProvider(Provider
provider) {
return provider.getTransactionProvider();
}
-
+
public static PhoenixTransactionProvider getTransactionProvider(byte[]
txState, int clientVersion) {
if (txState == null || txState.length == 0) {
return null;
@@ -75,7 +96,7 @@ public class TransactionFactory {
: Provider.fromCode(txState[txState.length-1]);
return provider.getTransactionProvider();
}
-
+
public static PhoenixTransactionContext getTransactionContext(byte[]
txState, int clientVersion) throws IOException {
PhoenixTransactionProvider provider = getTransactionProvider(txState,
clientVersion);
if (provider == null) {
diff --git a/phoenix-tracing-webapp/pom.xml b/phoenix-tracing-webapp/pom.xml
index 33e90d1..3557ff1 100755
--- a/phoenix-tracing-webapp/pom.xml
+++ b/phoenix-tracing-webapp/pom.xml
@@ -110,6 +110,20 @@
<build>
<plugins>
<plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-failsafe-plugin</artifactId>
+ <configuration>
+ <skip>true</skip>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <configuration>
+ <skip>true</skip>
+ </configuration>
+ </plugin>
+ <plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
</plugin>
diff --git a/pom.xml b/pom.xml
index 81bdff7..2edb31d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1468,6 +1468,36 @@
</plugins>
</build>
</profile>
+ <profile>
+ <id>exclude-tephra</id>
+ <activation>
+ <property>
+ <name>without.tephra</name>
+ </property>
+ </activation>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-failsafe-plugin</artifactId>
+ <configuration>
+ <classpathDependencyExcludes>
+
org.apache.tephra:tephra-api,org.apache.tephra:tephra-core,org.apache.thrift:libthrift
+ </classpathDependencyExcludes>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <configuration>
+ <classpathDependencyExcludes>
+
org.apache.tephra:tephra-api,org.apache.tephra:tephra-core,org.apache.thrift:libthrift
+ </classpathDependencyExcludes>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
<!-- See BUILDING.md for profile selection-->
<!-- The dependencies should be defined only in phoenix-core
,but maven doesn't seem to support that -->