This is an automated email from the ASF dual-hosted git repository.
aldettinger pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git
The following commit(s) were added to refs/heads/master by this push:
new 44fb006 Added JDK11 support to the Kudu container-based itests
infrastructure #1132
44fb006 is described below
commit 44fb006bf001ca3b987d8c0c9e8db1852c405664
Author: aldettinger <[email protected]>
AuthorDate: Mon Apr 27 09:38:17 2020 +0200
Added JDK11 support to the Kudu container-based itests infrastructure #1132
---
integration-tests/kudu/pom.xml | 11 +++++-
.../kudu/it/KuduInfrastructureTestHelper.java | 46 ++++++++++++++++++----
...ion-config.json => reflection-config-jdk8.json} | 0
.../resources/reflection-config-jdk9-onward.json | 6 +++
4 files changed, 55 insertions(+), 8 deletions(-)
diff --git a/integration-tests/kudu/pom.xml b/integration-tests/kudu/pom.xml
index c6b546f..77a1b4a 100644
--- a/integration-tests/kudu/pom.xml
+++ b/integration-tests/kudu/pom.xml
@@ -137,12 +137,21 @@
</build>
</profile>
<profile>
+ <id>kudu-native-java9-onward</id>
+ <activation>
+ <jdk>[9,)</jdk>
+ </activation>
+ <properties>
+
<quarkus.native.additional-build-args>-H:ReflectionConfigurationFiles=reflection-config-jdk9-onward.json</quarkus.native.additional-build-args>
+ </properties>
+ </profile>
+ <profile>
<id>kudu-native-java8</id>
<activation>
<jdk>1.8</jdk>
</activation>
<properties>
-
<quarkus.native.additional-build-args>-H:ReflectionConfigurationFiles=reflection-config.json</quarkus.native.additional-build-args>
+
<quarkus.native.additional-build-args>-H:ReflectionConfigurationFiles=reflection-config-jdk8.json</quarkus.native.additional-build-args>
</properties>
</profile>
</profiles>
diff --git
a/integration-tests/kudu/src/main/java/org/apache/camel/quarkus/component/kudu/it/KuduInfrastructureTestHelper.java
b/integration-tests/kudu/src/main/java/org/apache/camel/quarkus/component/kudu/it/KuduInfrastructureTestHelper.java
index cb45f8b..9e9625d 100644
---
a/integration-tests/kudu/src/main/java/org/apache/camel/quarkus/component/kudu/it/KuduInfrastructureTestHelper.java
+++
b/integration-tests/kudu/src/main/java/org/apache/camel/quarkus/component/kudu/it/KuduInfrastructureTestHelper.java
@@ -43,14 +43,14 @@ import org.jboss.logging.Logger;
* camel.kudu.test.master.rpc-authority=kudu-master-hostname:7051
* Run integration tests with mvn clean integration-test -P native
*
- * B) How to run integration tests against the container based setup when NOT
running on top of OpenJDK 8:
+ * B) How to run integration tests against the container based setup when NOT
running on top of OpenJDK:
* Comment @Disabled and @DisabledOnNativeImage annotations from {@code
KuduTest} and {@code KuduIT}.
* Override the ip resolution of the host "kudu-tserver" to 127.0.0.1, e.g. by
adding an entry in /etc/hosts file as
* below:
* 127.0.0.1 kudu-tserver
* Run integration tests with mvn clean integration-test -P native
*
- * C) How to run integration tests against the container based setup when
running on top of OpenJDK 8:
+ * C) How to run integration tests against the container based setup when
running on top of OpenJDK:
* Comment @Disabled and @DisabledOnNativeImage annotations from {@code
KuduTest} and {@code KuduIT}.
* No extra setup is needed as {@code
overrideKuduTabletServerResolutionInInetAddressCache} takes care of redirecting
* the Kudu tablet server traffic toward localhost
@@ -69,17 +69,49 @@ public class KuduInfrastructureTestHelper {
}
public static void overrideTabletServerHostnameResolution() {
+ int javaMajorVersion =
Integer.parseInt(System.getProperty("java.version").replaceFirst("([0-9]+)[.].*",
"$1"));
+
+ if (javaMajorVersion == 1) {
+ attemptOverideTabletServerHostnameResolutionOpenJdk8();
+ } else if (javaMajorVersion >= 9) {
+ attemptOverideTabletServerHostnameResolutionOpenJdk9Onward();
+ } else {
+ attemptOverideTabletServerHostnameResolutionOpenJdk8();
+ attemptOverideTabletServerHostnameResolutionOpenJdk9Onward();
+ }
+ }
+
+ public static void
attemptOverideTabletServerHostnameResolutionOpenJdk9Onward() {
+ try {
+ // Warm up the InetAddress cache
+ InetAddress.getByName("localhost");
+ Field cacheField = InetAddress.class.getDeclaredField("cache");
+ cacheField.setAccessible(true);
+ Object cache = cacheField.get(null);
+
+ Method get = cache.getClass().getMethod("get", Object.class);
+ Object localHostCachedAddresses = get.invoke(cache, "localhost");
+
+ Method put = cache.getClass().getMethod("put", Object.class,
Object.class);
+ put.invoke(cache, KUDU_TABLET_SERVER_HOSTNAME,
localHostCachedAddresses);
+ } catch (Exception ex) {
+ final String msg = "An issue occurred while attempting the Open
JDK9+ override of the kudu tablet server hostname resolution";
+ LOG.warn(msg, ex);
+ }
+ }
+
+ public static void attemptOverideTabletServerHostnameResolutionOpenJdk8() {
try {
- Field field = InetAddress.class.getDeclaredField("addressCache");
- field.setAccessible(true);
- Object addressCache = field.get(null);
+ Field addressCacheField =
InetAddress.class.getDeclaredField("addressCache");
+ addressCacheField.setAccessible(true);
+ Object addressCache = addressCacheField.get(null);
Method put = addressCache.getClass().getMethod("put",
String.class, InetAddress[].class);
put.setAccessible(true);
put.invoke(addressCache, KUDU_TABLET_SERVER_HOSTNAME, (Object[])
InetAddress.getAllByName("localhost"));
} catch (Exception ex) {
- final String msg = "Can't override the kudu tablet server hostname
resolution when not running on top of OpenJDK 8";
- LOG.error(msg, ex);
+ final String msg = "An issue occurred while attempting the Open
JDK8 override of the kudu tablet server hostname resolution";
+ LOG.warn(msg, ex);
}
}
}
diff --git a/integration-tests/kudu/src/main/resources/reflection-config.json
b/integration-tests/kudu/src/main/resources/reflection-config-jdk8.json
similarity index 100%
rename from integration-tests/kudu/src/main/resources/reflection-config.json
rename to integration-tests/kudu/src/main/resources/reflection-config-jdk8.json
diff --git
a/integration-tests/kudu/src/main/resources/reflection-config-jdk9-onward.json
b/integration-tests/kudu/src/main/resources/reflection-config-jdk9-onward.json
new file mode 100644
index 0000000..63d1df7
--- /dev/null
+++
b/integration-tests/kudu/src/main/resources/reflection-config-jdk9-onward.json
@@ -0,0 +1,6 @@
+[
+ {
+ "name" : "java.util.concurrent.ConcurrentHashMap",
+ "allDeclaredMethods" : true
+ }
+]
\ No newline at end of file