From acf79bdec4e6d24d5e1c97e55418b5780ab980fb Mon Sep 17 00:00:00 2001 From: david dali susanibar arce Date: Wed, 20 Apr 2022 17:08:23 -0500 Subject: [PATCH 1/8] Support Java 17 --- .../apache/arrow/flight/TestCallOptions.java | 1 + .../arrow/flight/TestClientMiddleware.java | 2 + .../arrow/flight/sql/FlightSqlClient.java | 1 + .../memory/util/TestArrowBufPointer.java | 1 + java/pom.xml | 58 ++++++++++++++++++- 5 files changed, 62 insertions(+), 1 deletion(-) diff --git a/java/flight/flight-core/src/test/java/org/apache/arrow/flight/TestCallOptions.java b/java/flight/flight-core/src/test/java/org/apache/arrow/flight/TestCallOptions.java index 45e3e496092..c3beae296c0 100644 --- a/java/flight/flight-core/src/test/java/org/apache/arrow/flight/TestCallOptions.java +++ b/java/flight/flight-core/src/test/java/org/apache/arrow/flight/TestCallOptions.java @@ -97,6 +97,7 @@ public void mixedProperties() { testHeaders(headers); } + @SuppressWarnings("ReturnValueIgnored") private void testHeaders(CallHeaders headers) { try ( BufferAllocator a = new RootAllocator(Long.MAX_VALUE); diff --git a/java/flight/flight-core/src/test/java/org/apache/arrow/flight/TestClientMiddleware.java b/java/flight/flight-core/src/test/java/org/apache/arrow/flight/TestClientMiddleware.java index ccfc9f2d177..a1b26573c80 100644 --- a/java/flight/flight-core/src/test/java/org/apache/arrow/flight/TestClientMiddleware.java +++ b/java/flight/flight-core/src/test/java/org/apache/arrow/flight/TestClientMiddleware.java @@ -246,9 +246,11 @@ public FlightClientMiddleware onCallStarted(CallInfo info) { } // Used to test that middleware can send and receive multi-valued text and binary headers. + @SuppressWarnings({"DoubleBraceInitialization"}) static final Map> EXPECTED_BINARY_HEADERS = new HashMap>() {{ put("x-binary-bin", Arrays.asList(new byte[] {0}, new byte[]{1})); }}; + @SuppressWarnings({"DoubleBraceInitialization"}) static final Map> EXPECTED_TEXT_HEADERS = new HashMap>() {{ put("x-text", Arrays.asList("foo", "bar")); }}; diff --git a/java/flight/flight-sql/src/main/java/org/apache/arrow/flight/sql/FlightSqlClient.java b/java/flight/flight-sql/src/main/java/org/apache/arrow/flight/sql/FlightSqlClient.java index 719c6bb5ac5..c5a67d01f24 100644 --- a/java/flight/flight-sql/src/main/java/org/apache/arrow/flight/sql/FlightSqlClient.java +++ b/java/flight/flight-sql/src/main/java/org/apache/arrow/flight/sql/FlightSqlClient.java @@ -77,6 +77,7 @@ /** * Flight client with Flight SQL semantics. */ +@SuppressWarnings({"ProtoBuilderReturnValueIgnored", "ReturnValueIgnored"}) public class FlightSqlClient implements AutoCloseable { private final FlightClient client; diff --git a/java/memory/memory-core/src/test/java/org/apache/arrow/memory/util/TestArrowBufPointer.java b/java/memory/memory-core/src/test/java/org/apache/arrow/memory/util/TestArrowBufPointer.java index c3ed0d05705..315dd6b3cfc 100644 --- a/java/memory/memory-core/src/test/java/org/apache/arrow/memory/util/TestArrowBufPointer.java +++ b/java/memory/memory-core/src/test/java/org/apache/arrow/memory/util/TestArrowBufPointer.java @@ -111,6 +111,7 @@ public void testNullPointersHashCode() { } @Test + @SuppressWarnings("ReturnValueIgnored") public void testReuseHashCode() { try (ArrowBuf buf = allocator.buffer(10)) { buf.setInt(0, 10); diff --git a/java/pom.xml b/java/pom.xml index 5a266871e09..65177c0c1cd 100644 --- a/java/pom.xml +++ b/java/pom.xml @@ -43,6 +43,8 @@ 2 true 9+181-r4173-1 + 2.13.1 + 3.10.1 @@ -377,7 +379,7 @@ org.apache.maven.plugins maven-compiler-plugin - 3.6.2 + ${maven-compiler-plugin.version} @@ -736,6 +738,7 @@ See https://github.com/jbosstools/m2e-apt/issues/62 for details --> + 1.8 !m2e.version @@ -763,6 +766,59 @@ + + error-prone-jdk11+ + + [11,) + + !m2e.version + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + 8 + 8 + UTF-8 + + -XDcompilePolicy=simple + + -Xplugin:ErrorProne \ + -XepExcludedPaths:.*/(target/generated-sources)/.* + + -J--add-exports=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED + -J--add-exports=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED + -J--add-exports=jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED + -J--add-exports=jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED + -J--add-exports=jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED + -J--add-exports=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED + -J--add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED + -J--add-opens=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED + -J--add-opens=jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED + + + + com.google.errorprone + error_prone_core + ${error_prone_core.version} + + + + + + org.apache.maven.plugins + maven-surefire-plugin + + --add-opens=java.base/java.nio=ALL-UNNAMED + + + + + + error-prone-jdk8 From 865b5201eb91dd7110cce88f59bfb5a3d5cf84a7 Mon Sep 17 00:00:00 2001 From: david dali susanibar arce Date: Wed, 20 Apr 2022 19:39:12 -0500 Subject: [PATCH 2/8] Solving JDK17 adapter/orc error: java.lang.ClassNotFoundException: org.apache.hadoop.shaded.com.ctc.wstx.io.InputBootstrapper --- java/adapter/orc/pom.xml | 19 ++++++++++++++++++- java/pom.xml | 1 + 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/java/adapter/orc/pom.xml b/java/adapter/orc/pom.xml index ab5146fc958..85eb8607062 100644 --- a/java/adapter/orc/pom.xml +++ b/java/adapter/orc/pom.xml @@ -52,10 +52,27 @@ + + org.apache.hadoop + hadoop-client-runtime + 3.3.2 + test + + + commons-logging + commons-logging + + + + + org.apache.hadoop + hadoop-client-api + 3.3.2 + org.apache.hadoop hadoop-common - 2.2.0 + 3.3.2 test diff --git a/java/pom.xml b/java/pom.xml index 65177c0c1cd..cf90ddc3dd3 100644 --- a/java/pom.xml +++ b/java/pom.xml @@ -792,6 +792,7 @@ -J--add-exports=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED -J--add-exports=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED -J--add-exports=jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED + -J--add-exports=jdk.compiler/com.sun.tools.javac.model=ALL-UNNAMED -J--add-exports=jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED -J--add-exports=jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED -J--add-exports=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED From aea2f84d4cffac233e2978d2aef6a7e78df77b73 Mon Sep 17 00:00:00 2001 From: david dali susanibar arce Date: Thu, 21 Apr 2022 13:39:13 -0500 Subject: [PATCH 3/8] Solving PR comments --- .../apache/arrow/flight/TestCallOptions.java | 4 +-- .../arrow/flight/TestClientMiddleware.java | 14 ++++----- .../arrow/flight/sql/FlightSqlClient.java | 7 ++--- .../memory/util/TestArrowBufPointer.java | 7 +++-- java/pom.xml | 31 +++---------------- 5 files changed, 18 insertions(+), 45 deletions(-) diff --git a/java/flight/flight-core/src/test/java/org/apache/arrow/flight/TestCallOptions.java b/java/flight/flight-core/src/test/java/org/apache/arrow/flight/TestCallOptions.java index c3beae296c0..d739189e080 100644 --- a/java/flight/flight-core/src/test/java/org/apache/arrow/flight/TestCallOptions.java +++ b/java/flight/flight-core/src/test/java/org/apache/arrow/flight/TestCallOptions.java @@ -97,7 +97,6 @@ public void mixedProperties() { testHeaders(headers); } - @SuppressWarnings("ReturnValueIgnored") private void testHeaders(CallHeaders headers) { try ( BufferAllocator a = new RootAllocator(Long.MAX_VALUE); @@ -105,8 +104,7 @@ private void testHeaders(CallHeaders headers) { FlightServer s = FlightTestUtil.getStartedServer((location) -> FlightServer.builder(a, location, producer).build()); FlightClient client = FlightClient.builder(a, s.getLocation()).build()) { - client.doAction(new Action(""), new HeaderCallOption(headers)).hasNext(); - + Assert.assertFalse(client.doAction(new Action(""), new HeaderCallOption(headers)).hasNext()); final CallHeaders incomingHeaders = producer.headers(); for (String key : headers.keys()) { if (key.endsWith(Metadata.BINARY_HEADER_SUFFIX)) { diff --git a/java/flight/flight-core/src/test/java/org/apache/arrow/flight/TestClientMiddleware.java b/java/flight/flight-core/src/test/java/org/apache/arrow/flight/TestClientMiddleware.java index a1b26573c80..21bd2d66835 100644 --- a/java/flight/flight-core/src/test/java/org/apache/arrow/flight/TestClientMiddleware.java +++ b/java/flight/flight-core/src/test/java/org/apache/arrow/flight/TestClientMiddleware.java @@ -84,6 +84,8 @@ public void testMultiValuedHeaders() { }); // The server echoes the headers we send back to us, so ensure all the ones we sent are present with the correct // values in the correct order. + EXPECTED_BINARY_HEADERS.put("x-binary-bin", Arrays.asList(new byte[] {0}, new byte[]{1})); + EXPECTED_TEXT_HEADERS.put("x-text", Arrays.asList("foo", "bar")); for (final Map.Entry> entry : EXPECTED_BINARY_HEADERS.entrySet()) { // Compare header values entry-by-entry because byte arrays don't compare via equals final List receivedValues = clientFactory.lastBinaryHeaders.get(entry.getKey()); @@ -246,14 +248,8 @@ public FlightClientMiddleware onCallStarted(CallInfo info) { } // Used to test that middleware can send and receive multi-valued text and binary headers. - @SuppressWarnings({"DoubleBraceInitialization"}) - static final Map> EXPECTED_BINARY_HEADERS = new HashMap>() {{ - put("x-binary-bin", Arrays.asList(new byte[] {0}, new byte[]{1})); - }}; - @SuppressWarnings({"DoubleBraceInitialization"}) - static final Map> EXPECTED_TEXT_HEADERS = new HashMap>() {{ - put("x-text", Arrays.asList("foo", "bar")); - }}; + static final Map> EXPECTED_BINARY_HEADERS = new HashMap>(); + static final Map> EXPECTED_TEXT_HEADERS = new HashMap>(); static class MultiHeaderServerMiddlewareFactory implements FlightServerMiddleware.Factory { @@ -328,6 +324,8 @@ public MultiHeaderClientMiddleware(MultiHeaderClientMiddlewareFactory factory) { @Override public void onBeforeSendingHeaders(CallHeaders outgoingHeaders) { + EXPECTED_BINARY_HEADERS.put("x-binary-bin", Arrays.asList(new byte[] {0}, new byte[]{1})); + EXPECTED_TEXT_HEADERS.put("x-text", Arrays.asList("foo", "bar")); for (final Map.Entry> entry : EXPECTED_BINARY_HEADERS.entrySet()) { entry.getValue().forEach((value) -> outgoingHeaders.insert(entry.getKey(), value)); Assert.assertTrue(outgoingHeaders.containsKey(entry.getKey())); diff --git a/java/flight/flight-sql/src/main/java/org/apache/arrow/flight/sql/FlightSqlClient.java b/java/flight/flight-sql/src/main/java/org/apache/arrow/flight/sql/FlightSqlClient.java index c5a67d01f24..04001f8f36f 100644 --- a/java/flight/flight-sql/src/main/java/org/apache/arrow/flight/sql/FlightSqlClient.java +++ b/java/flight/flight-sql/src/main/java/org/apache/arrow/flight/sql/FlightSqlClient.java @@ -77,7 +77,6 @@ /** * Flight client with Flight SQL semantics. */ -@SuppressWarnings({"ProtoBuilderReturnValueIgnored", "ReturnValueIgnored"}) public class FlightSqlClient implements AutoCloseable { private final FlightClient client; @@ -319,7 +318,7 @@ public FlightInfo getPrimaryKeys(final TableRef tableRef, final CallOption... op } Objects.requireNonNull(tableRef.getTable()); - builder.setTable(tableRef.getTable()).build(); + builder.setTable(tableRef.getTable()).isInitialized(); final FlightDescriptor descriptor = FlightDescriptor.command(Any.pack(builder.build()).toByteArray()); return client.getInfo(descriptor, options); @@ -346,7 +345,7 @@ public FlightInfo getExportedKeys(final TableRef tableRef, final CallOption... o } Objects.requireNonNull(tableRef.getTable()); - builder.setTable(tableRef.getTable()).build(); + builder.setTable(tableRef.getTable()).isInitialized(); final FlightDescriptor descriptor = FlightDescriptor.command(Any.pack(builder.build()).toByteArray()); return client.getInfo(descriptor, options); @@ -374,7 +373,7 @@ public FlightInfo getImportedKeys(final TableRef tableRef, } Objects.requireNonNull(tableRef.getTable()); - builder.setTable(tableRef.getTable()).build(); + builder.setTable(tableRef.getTable()).isInitialized(); final FlightDescriptor descriptor = FlightDescriptor.command(Any.pack(builder.build()).toByteArray()); return client.getInfo(descriptor, options); diff --git a/java/memory/memory-core/src/test/java/org/apache/arrow/memory/util/TestArrowBufPointer.java b/java/memory/memory-core/src/test/java/org/apache/arrow/memory/util/TestArrowBufPointer.java index 315dd6b3cfc..ea3b11a871b 100644 --- a/java/memory/memory-core/src/test/java/org/apache/arrow/memory/util/TestArrowBufPointer.java +++ b/java/memory/memory-core/src/test/java/org/apache/arrow/memory/util/TestArrowBufPointer.java @@ -18,6 +18,7 @@ package org.apache.arrow.memory.util; import static junit.framework.TestCase.assertEquals; +import static junit.framework.TestCase.assertNotSame; import static junit.framework.TestCase.assertTrue; import static org.junit.jupiter.api.Assertions.assertFalse; @@ -121,18 +122,18 @@ public void testReuseHashCode() { ArrowBufPointer pointer = new ArrowBufPointer(hasher); pointer.set(buf, 0, 4); - pointer.hashCode(); + int hashCode = pointer.hashCode(); // hash code computed assertEquals(1, hasher.counter); // no hash code re-compute - pointer.hashCode(); + assertEquals(hashCode, pointer.hashCode()); assertEquals(1, hasher.counter); // hash code re-computed pointer.set(buf, 4, 4); - pointer.hashCode(); + assertNotSame(hashCode, pointer.hashCode()); assertEquals(2, hasher.counter); } } diff --git a/java/pom.xml b/java/pom.xml index 284300c940f..9d99304abf3 100644 --- a/java/pom.xml +++ b/java/pom.xml @@ -692,7 +692,7 @@ - java-8 + java-doclint [1.8,) @@ -730,7 +730,7 @@ - error-prone + error-prone-jdk8 - - 1.8 - - !m2e.version - - - - - - org.apache.maven.plugins - maven-compiler-plugin - - true - - -J-Xbootclasspath/p:${settings.localRepository}/com/google/errorprone/javac/${errorprone.javac.version}/javac-${errorprone.javac.version}.jar - - - - - - - code-coverage