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

Reply via email to