This is an automated email from the ASF dual-hosted git repository.

eolivelli pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/pulsar.git


The following commit(s) were added to refs/heads/master by this push:
     new e34448cd363 Tiered Storage: add JClouds HttpClient driver (#15105)
e34448cd363 is described below

commit e34448cd363bf9ed07321acd3c9a1c5e81c7156a
Author: Enrico Olivelli <[email protected]>
AuthorDate: Mon Apr 11 08:40:14 2022 +0200

    Tiered Storage: add JClouds HttpClient driver (#15105)
---
 jclouds-shaded/pom.xml                             |  7 +++
 .../apache/pulsar/jclouds/ShadedJCloudsUtils.java  | 63 ++++++++++++++++++++++
 pom.xml                                            |  2 +-
 tiered-storage/jcloud/pom.xml                      |  4 ++
 .../jcloud/provider/JCloudBlobStoreProvider.java   | 15 +++---
 5 files changed, 82 insertions(+), 9 deletions(-)

diff --git a/jclouds-shaded/pom.xml b/jclouds-shaded/pom.xml
index e19d2e1bfce..bfec207ad2b 100644
--- a/jclouds-shaded/pom.xml
+++ b/jclouds-shaded/pom.xml
@@ -40,6 +40,11 @@
       <artifactId>jclouds-allblobstore</artifactId>
       <version>${jclouds.version}</version>
     </dependency>
+    <dependency>
+      <groupId>org.apache.jclouds.driver</groupId>
+      <artifactId>jclouds-apachehc</artifactId>
+      <version>${jclouds.version}</version>
+    </dependency>
     <dependency>
       <groupId>org.apache.jclouds.driver</groupId>
       <artifactId>jclouds-slf4j</artifactId>
@@ -74,11 +79,13 @@
                   <include>org.apache.jclouds:*</include>
                   <include>org.apache.jclouds.api:*</include>
                   <include>org.apache.jclouds.common:*</include>
+                  <include>org.apache.jclouds.driver:*</include>
                   <include>org.apache.jclouds.provider:*</include>
                   
<include>com.google.inject.extensions:guice-assistedinject</include>
                   <include>com.google.inject:guice</include>
                   
<include>com.google.inject.extensions:guice-multibindings</include>
                   <include>com.google.code.gson:gson</include>
+                  <include>org.apache.httpcomponents:*</include>
                   <include>javax.ws.rs:*</include>
                   <include>com.jamesmurty.utils:*</include>
                   <include>net.iharder:*</include>
diff --git 
a/jclouds-shaded/src/main/java/org/apache/pulsar/jclouds/ShadedJCloudsUtils.java
 
b/jclouds-shaded/src/main/java/org/apache/pulsar/jclouds/ShadedJCloudsUtils.java
new file mode 100644
index 00000000000..92209658745
--- /dev/null
+++ 
b/jclouds-shaded/src/main/java/org/apache/pulsar/jclouds/ShadedJCloudsUtils.java
@@ -0,0 +1,63 @@
+/**
+ * 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.pulsar.jclouds;
+
+import com.google.inject.AbstractModule;
+import lombok.experimental.UtilityClass;
+import lombok.extern.slf4j.Slf4j;
+import org.jclouds.ContextBuilder;
+import 
org.jclouds.http.apachehc.config.ApacheHCHttpCommandExecutorServiceModule;
+import org.jclouds.logging.slf4j.config.SLF4JLoggingModule;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * This utility class helps in dealing with shaded dependencies (especially 
Guice).
+ */
+@UtilityClass
+@Slf4j
+public class ShadedJCloudsUtils {
+
+    /**
+     * Use this System property to temporarily disable Apache Http Client 
Module.
+     * If you encounter problems and decide to use this flag please
+     * open a GH and share your problem.
+     * Apache Http Client module should work well in all the environments.
+     */
+    private static final boolean ENABLE_APACHE_HC_MODULE = Boolean
+            .parseBoolean(System.getProperty("pulsar.jclouds.use_apache_hc", 
"true"));
+    static {
+        log.info("Considering -Dpulsar.jclouds.use_apache_hc=" + 
ENABLE_APACHE_HC_MODULE);
+    }
+
+    /**
+     * Setup standard modules.
+     * @param builder the build
+     */
+    public static void addStandardModules(ContextBuilder builder) {
+        List<AbstractModule> modules = new ArrayList<>();
+        modules.add(new SLF4JLoggingModule());
+        if (ENABLE_APACHE_HC_MODULE) {
+            modules.add(new ApacheHCHttpCommandExecutorServiceModule());
+        }
+        builder.modules(modules);
+    }
+
+}
diff --git a/pom.xml b/pom.xml
index d2a1d797641..cb60f824a02 100644
--- a/pom.xml
+++ b/pom.xml
@@ -243,7 +243,7 @@ flexible messaging model and an intuitive client 
API.</description>
     <maven-compiler-plugin.version>3.9.0</maven-compiler-plugin.version>
     <maven-dependency-plugin.version>3.1.2</maven-dependency-plugin.version>
     <maven-modernizer-plugin.version>2.3.0</maven-modernizer-plugin.version>
-    <maven-shade-plugin>3.2.4</maven-shade-plugin>
+    <maven-shade-plugin>3.3.0</maven-shade-plugin>
     <maven-antrun-plugin.version>3.0.0</maven-antrun-plugin.version>
     <properties-maven-plugin.version>1.0.0</properties-maven-plugin.version>
     <nifi-nar-maven-plugin.version>1.2.0</nifi-nar-maven-plugin.version>
diff --git a/tiered-storage/jcloud/pom.xml b/tiered-storage/jcloud/pom.xml
index bd1a229bc50..7187c4c4989 100644
--- a/tiered-storage/jcloud/pom.xml
+++ b/tiered-storage/jcloud/pom.xml
@@ -68,6 +68,10 @@
           <groupId>org.apache.jclouds.provider</groupId>
           <artifactId>*</artifactId>
         </exclusion>
+        <exclusion>
+          <groupId>org.apache.jclouds.driver</groupId>
+          <artifactId>*</artifactId>
+        </exclusion>
       </exclusions>
     </dependency>
 
diff --git 
a/tiered-storage/jcloud/src/main/java/org/apache/bookkeeper/mledger/offload/jcloud/provider/JCloudBlobStoreProvider.java
 
b/tiered-storage/jcloud/src/main/java/org/apache/bookkeeper/mledger/offload/jcloud/provider/JCloudBlobStoreProvider.java
index 86d5fe57d71..28f3490b6eb 100644
--- 
a/tiered-storage/jcloud/src/main/java/org/apache/bookkeeper/mledger/offload/jcloud/provider/JCloudBlobStoreProvider.java
+++ 
b/tiered-storage/jcloud/src/main/java/org/apache/bookkeeper/mledger/offload/jcloud/provider/JCloudBlobStoreProvider.java
@@ -36,7 +36,6 @@ import java.io.File;
 import java.io.IOException;
 import java.io.Serializable;
 import java.nio.charset.Charset;
-import java.util.Arrays;
 import java.util.Properties;
 import java.util.UUID;
 import lombok.extern.slf4j.Slf4j;
@@ -44,6 +43,7 @@ import 
org.apache.bookkeeper.mledger.offload.jcloud.provider.TieredStorageConfig
 import 
org.apache.bookkeeper.mledger.offload.jcloud.provider.TieredStorageConfiguration.ConfigValidation;
 import 
org.apache.bookkeeper.mledger.offload.jcloud.provider.TieredStorageConfiguration.CredentialBuilder;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.pulsar.jclouds.ShadedJCloudsUtils;
 import org.jclouds.ContextBuilder;
 import org.jclouds.aws.domain.SessionCredentials;
 import org.jclouds.aws.s3.AWSS3ProviderMetadata;
@@ -57,7 +57,6 @@ import org.jclouds.domain.LocationBuilder;
 import org.jclouds.domain.LocationScope;
 import org.jclouds.googlecloud.GoogleCredentialsFromJson;
 import org.jclouds.googlecloudstorage.GoogleCloudStorageProviderMetadata;
-import org.jclouds.logging.slf4j.config.SLF4JLoggingModule;
 import org.jclouds.providers.AnonymousProviderMetadata;
 import org.jclouds.providers.ProviderMetadata;
 import org.jclouds.s3.S3ApiMetadata;
@@ -138,7 +137,7 @@ public enum JCloudBlobStoreProvider implements 
Serializable, ConfigValidation, B
         @Override
         public BlobStore getBlobStore(TieredStorageConfiguration config) {
             ContextBuilder contextBuilder = 
ContextBuilder.newBuilder(config.getProviderMetadata());
-            contextBuilder.modules(Arrays.asList(new SLF4JLoggingModule()));
+            ShadedJCloudsUtils.addStandardModules(contextBuilder);
             contextBuilder.overrides(config.getOverrides());
 
             if (config.getProviderCredentials() != null) {
@@ -203,9 +202,9 @@ public enum JCloudBlobStoreProvider implements 
Serializable, ConfigValidation, B
         @Override
         public BlobStore getBlobStore(TieredStorageConfiguration config) {
 
-            ContextBuilder builder =  ContextBuilder.newBuilder("transient");
-            builder.modules(Arrays.asList(new SLF4JLoggingModule()));
-            BlobStoreContext ctx = builder
+            ContextBuilder contextBuilder =  
ContextBuilder.newBuilder("transient");
+            ShadedJCloudsUtils.addStandardModules(contextBuilder);
+            BlobStoreContext ctx = contextBuilder
                     .buildView(BlobStoreContext.class);
 
             BlobStore bs = ctx.getBlobStore();
@@ -287,7 +286,7 @@ public enum JCloudBlobStoreProvider implements 
Serializable, ConfigValidation, B
 
     static final BlobStoreBuilder BLOB_STORE_BUILDER = 
(TieredStorageConfiguration config) -> {
         ContextBuilder contextBuilder = 
ContextBuilder.newBuilder(config.getProviderMetadata());
-        contextBuilder.modules(Arrays.asList(new SLF4JLoggingModule()));
+        ShadedJCloudsUtils.addStandardModules(contextBuilder);
         contextBuilder.overrides(config.getOverrides());
 
         if (StringUtils.isNotEmpty(config.getServiceEndpoint())) {
@@ -372,7 +371,7 @@ public enum JCloudBlobStoreProvider implements 
Serializable, ConfigValidation, B
 
     static final BlobStoreBuilder ALIYUN_OSS_BLOB_STORE_BUILDER = 
(TieredStorageConfiguration config) -> {
         ContextBuilder contextBuilder = 
ContextBuilder.newBuilder(config.getProviderMetadata());
-        contextBuilder.modules(Arrays.asList(new SLF4JLoggingModule()));
+        ShadedJCloudsUtils.addStandardModules(contextBuilder);
         Properties overrides = config.getOverrides();
         // For security reasons, OSS supports only virtual hosted style access.
         overrides.setProperty(S3Constants.PROPERTY_S3_VIRTUAL_HOST_BUCKETS, 
"true");

Reply via email to