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");