You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by st...@apache.org on 2025/04/16 12:43:43 UTC
(hadoop) branch trunk updated: HADOOP-19259. Upgrade to jackson 2.14.3 (#7428)
This is an automated email from the ASF dual-hosted git repository.
stevel pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/hadoop.git
The following commit(s) were added to refs/heads/trunk by this push:
new 3aaba940a84 HADOOP-19259. Upgrade to jackson 2.14.3 (#7428)
3aaba940a84 is described below
commit 3aaba940a84a78b1d3a8463466aa48b9748709f6
Author: PJ Fanning <pj...@users.noreply.github.com>
AuthorDate: Wed Apr 16 14:43:37 2025 +0200
HADOOP-19259. Upgrade to jackson 2.14.3 (#7428)
This upgrades Jackson to 2.14.3
as a side effect this changes two javax dependencies
-removes javax.ws.rs:jsr311-api:1.1.1
-adds javax.xml.bind:jaxb-api:2.3.1
Contributed by PJ Fanning
---
LICENSE-binary | 15 ++--
.../main/java/org/apache/hadoop/net/NetUtils.java | 87 ++++++++++++++++++----
.../java/org/apache/hadoop/net/TestNetUtils.java | 50 +++++++++++++
.../apache/hadoop/hdfs/web/WebHdfsFileSystem.java | 12 +--
hadoop-project/pom.xml | 4 +-
5 files changed, 134 insertions(+), 34 deletions(-)
diff --git a/LICENSE-binary b/LICENSE-binary
index 7b338917c75..6433b493f48 100644
--- a/LICENSE-binary
+++ b/LICENSE-binary
@@ -218,12 +218,12 @@ com.aliyun:aliyun-java-sdk-sts:3.0.0
com.aliyun.oss:aliyun-sdk-oss:3.13.2
com.cedarsoftware:java-util:1.9.0
com.cedarsoftware:json-io:2.5.1
-com.fasterxml.jackson.core:jackson-annotations:2.12.7
-com.fasterxml.jackson.core:jackson-core:2.12.7
-com.fasterxml.jackson.core:jackson-databind:2.12.7.1
-com.fasterxml.jackson.jaxrs:jackson-jaxrs-base:2.12.7
-com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider:2.12.7
-com.fasterxml.jackson.module:jackson-module-jaxb-annotations:2.12.7
+com.fasterxml.jackson.core:jackson-annotations:2.14.3
+com.fasterxml.jackson.core:jackson-core:2.14.3
+com.fasterxml.jackson.core:jackson-databind:2.14.3
+com.fasterxml.jackson.jaxrs:jackson-jaxrs-base:2.14.3
+com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider:2.14.3
+com.fasterxml.jackson.module:jackson-module-jaxb-annotations:2.14.3
com.fasterxml.uuid:java-uuid-generator:3.1.4
com.fasterxml.woodstox:woodstox-core:5.4.0
com.github.ben-manes.caffeine:caffeine:2.9.3
@@ -504,8 +504,7 @@ javax.cache:cache-api:1.1.1
javax.servlet:javax.servlet-api:3.1.0
javax.servlet.jsp:jsp-api:2.1
javax.websocket:javax.websocket-api:1.0
-javax.ws.rs:jsr311-api:1.1.1
-javax.xml.bind:jaxb-api:2.2.11
+javax.xml.bind:jaxb-api:2.3.1
Eclipse Distribution License (EDL) 1.0
--------------------------
diff --git a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/net/NetUtils.java b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/net/NetUtils.java
index 3a4f4fd37d3..58a5ffa7910 100644
--- a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/net/NetUtils.java
+++ b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/net/NetUtils.java
@@ -21,7 +21,6 @@
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
-import java.lang.reflect.Constructor;
import java.net.BindException;
import java.net.InetAddress;
import java.net.InetSocketAddress;
@@ -46,10 +45,6 @@
import javax.net.SocketFactory;
-import org.apache.hadoop.security.AccessControlException;
-import org.apache.hadoop.thirdparty.com.google.common.cache.Cache;
-import org.apache.hadoop.thirdparty.com.google.common.cache.CacheBuilder;
-
import org.apache.commons.net.util.SubnetUtils;
import org.apache.commons.net.util.SubnetUtils.SubnetInfo;
import org.apache.hadoop.classification.InterfaceAudience;
@@ -58,9 +53,13 @@
import org.apache.hadoop.fs.CommonConfigurationKeysPublic;
import org.apache.hadoop.ipc.Server;
import org.apache.hadoop.ipc.VersionedProtocol;
+import org.apache.hadoop.security.AccessControlException;
import org.apache.hadoop.security.SecurityUtil;
+import org.apache.hadoop.thirdparty.com.google.common.cache.Cache;
+import org.apache.hadoop.thirdparty.com.google.common.cache.CacheBuilder;
import org.apache.hadoop.util.ReflectionUtils;
import org.apache.hadoop.util.Preconditions;
+import org.apache.hadoop.util.dynamic.DynConstructors;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -941,10 +940,59 @@ public static IOException wrapException(final String destHost,
}
} catch (IOException ex) {
- return (IOException) new IOException("Failed on local exception: "
- + exception + "; Host Details : "
- + getHostDetailsAsString(destHost, destPort, localHost))
- .initCause(exception);
+ try {
+ return new IOException("Failed on local exception: "
+ + exception + "; Host Details : "
+ + getHostDetailsAsString(destHost, destPort, localHost), exception);
+ } catch (Exception ignore) {
+ // in worst case, return the original exception
+ return exception;
+ }
+ }
+ }
+
+ /**
+ * Return an @{@link IOException} of the same type as the input exception but with
+ * a modified exception message that includes the node name.
+ *
+ * @param ioe existing exception.
+ * @param nodeName name of the node.
+ * @return IOException
+ */
+ public static IOException addNodeNameToIOException(final IOException ioe, final String nodeName) {
+ try {
+ final Throwable cause = ioe.getCause();
+ IOException newIoe = null;
+ if (cause != null) {
+ try {
+ DynConstructors.Ctor<? extends IOException> ctor =
+ new DynConstructors.Builder()
+ .impl(ioe.getClass(), String.class, Throwable.class)
+ .buildChecked();
+ newIoe = ctor.newInstance(nodeName + ": " + ioe.getMessage(), cause);
+ } catch (NoSuchMethodException e) {
+ // no matching constructor - try next approach below
+ }
+ }
+ if (newIoe == null) {
+ DynConstructors.Ctor<? extends IOException> ctor =
+ new DynConstructors.Builder()
+ .impl(ioe.getClass(), String.class)
+ .buildChecked();
+ newIoe = ctor.newInstance(nodeName + ": " + ioe.getMessage());
+ if (cause != null) {
+ try {
+ newIoe.initCause(cause);
+ } catch (Exception e) {
+ // Unable to initCause. Ignore the exception.
+ }
+ }
+ }
+ newIoe.setStackTrace(ioe.getStackTrace());
+ return newIoe;
+ } catch (Exception e) {
+ // Unable to create new exception. Return the original exception.
+ return ioe;
}
}
@@ -957,9 +1005,22 @@ private static <T extends IOException> T wrapWithMessage(
T exception, String msg) throws T {
Class<? extends Throwable> clazz = exception.getClass();
try {
- Constructor<? extends Throwable> ctor = clazz.getConstructor(String.class);
- Throwable t = ctor.newInstance(msg);
- return (T)(t.initCause(exception));
+ try {
+ DynConstructors.Ctor<T> ctor =
+ new DynConstructors.Builder()
+ .impl(clazz, String.class, Throwable.class)
+ .buildChecked();
+ return ctor.newInstance(msg, exception);
+ } catch (NoSuchMethodException e) {
+ // no matching constructor - try next approach below
+ }
+ DynConstructors.Ctor<T> ctor =
+ new DynConstructors.Builder()
+ .impl(clazz, String.class)
+ .buildChecked();
+ T newException = ctor.newInstance(msg);
+ newException.initCause(exception);
+ return newException;
} catch (NoSuchMethodException e) {
return exception;
} catch (Throwable e) {
@@ -1114,7 +1175,7 @@ public static Set<Integer> getFreeSocketPorts(int numOfPorts) {
/**
* Return an @{@link InetAddress} to bind to. If bindWildCardAddress is true
- * than returns null.
+ * then returns null.
*
* @param localAddr local addr.
* @param bindWildCardAddress bind wildcard address.
diff --git a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/net/TestNetUtils.java b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/net/TestNetUtils.java
index 0b2d0b8abc8..7a2dc0cc194 100644
--- a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/net/TestNetUtils.java
+++ b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/net/TestNetUtils.java
@@ -21,6 +21,7 @@
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertSame;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.Assertions.fail;
@@ -44,6 +45,7 @@
import java.util.Enumeration;
import java.util.List;
import java.util.concurrent.TimeUnit;
+import java.util.zip.ZipException;
import org.apache.commons.lang3.StringUtils;
import org.apache.hadoop.conf.Configuration;
@@ -801,9 +803,57 @@ public void testBindToLocalAddress() throws Exception {
.bindToLocalAddress(NetUtils.getLocalInetAddress("127.0.0.1"), true));
}
+ public static class WrappedIOException extends IOException {
+ public WrappedIOException(String msg, Throwable cause) {
+ super(msg, cause);
+ }
+ }
+
+ private static class PrivateIOException extends IOException {
+ PrivateIOException(String msg, Throwable cause) {
+ super(msg, cause);
+ }
+ }
+
+ @Test
+ public void testAddNodeNameToIOException() {
+ IOException e0 = new IOException("test123");
+ assertNullCause(e0);
+ IOException new0 = NetUtils.addNodeNameToIOException(e0, "node123");
+ assertNullCause(new0);
+ assertEquals("node123: test123", new0.getMessage());
+
+ IOException e1 = new IOException("test456", new IllegalStateException("deliberate"));
+ IOException new1 = NetUtils.addNodeNameToIOException(e1, "node456");
+ assertSame(e1.getCause(), new1.getCause());
+ assertEquals("node456: test456", new1.getMessage());
+
+ ZipException e2 = new ZipException("test789");
+ assertNullCause(e2);
+ IOException new2 = NetUtils.addNodeNameToIOException(e2, "node789");
+ assertNullCause(new2);
+ assertEquals("node789: test789", new2.getMessage());
+
+ WrappedIOException e3 = new WrappedIOException("test987",
+ new IllegalStateException("deliberate"));
+ IOException new3 = NetUtils.addNodeNameToIOException(e3, "node987");
+ assertSame(e3.getCause(), new3.getCause());
+ assertEquals("node987: test987", new3.getMessage());
+
+ // addNodeNameToIOException will return the original exception if the class is not accessible
+ PrivateIOException e4 = new PrivateIOException("test654",
+ new IllegalStateException("deliberate"));
+ IOException new4 = NetUtils.addNodeNameToIOException(e4, "node654");
+ assertSame(e4, new4);
+ }
+
private <T> void assertBetterArrayEquals(T[] expect, T[]got) {
String expectStr = StringUtils.join(expect, ", ");
String gotStr = StringUtils.join(got, ", ");
assertEquals(expectStr, gotStr);
}
+
+ private void assertNullCause(Exception e) {
+ assertNull(e.getCause(), "Expected exception to have null cause");
+ }
}
diff --git a/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/WebHdfsFileSystem.java b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/WebHdfsFileSystem.java
index d0607e96dc4..29d7fbed896 100644
--- a/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/WebHdfsFileSystem.java
+++ b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/WebHdfsFileSystem.java
@@ -31,7 +31,6 @@
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
-import java.lang.reflect.InvocationTargetException;
import java.net.HttpURLConnection;
import java.net.InetSocketAddress;
import java.net.MalformedURLException;
@@ -845,16 +844,7 @@ private T runWithRetry() throws IOException {
if (node == null) {
node = url.getAuthority();
}
- try {
- IOException newIoe = ioe.getClass().getConstructor(String.class)
- .newInstance(node + ": " + ioe.getMessage());
- newIoe.initCause(ioe.getCause());
- newIoe.setStackTrace(ioe.getStackTrace());
- ioe = newIoe;
- } catch (NoSuchMethodException | SecurityException
- | InstantiationException | IllegalAccessException
- | IllegalArgumentException | InvocationTargetException e) {
- }
+ ioe = NetUtils.addNodeNameToIOException(ioe, node);
shouldRetry(ioe, retry);
}
}
diff --git a/hadoop-project/pom.xml b/hadoop-project/pom.xml
index 223b8f04f0e..b957a6a148c 100644
--- a/hadoop-project/pom.xml
+++ b/hadoop-project/pom.xml
@@ -69,8 +69,8 @@
<jersey2.version>2.46</jersey2.version>
<!-- jackson versions -->
- <jackson2.version>2.12.7</jackson2.version>
- <jackson2.databind.version>2.12.7.1</jackson2.databind.version>
+ <jackson2.version>2.14.3</jackson2.version>
+ <jackson2.databind.version>2.14.3</jackson2.databind.version>
<!-- httpcomponents versions -->
<httpclient.version>4.5.13</httpclient.version>
---------------------------------------------------------------------
To unsubscribe, e-mail: common-commits-unsubscribe@hadoop.apache.org
For additional commands, e-mail: common-commits-help@hadoop.apache.org