From 39609772b3a84a9761bd15073198d45b51c5fca6 Mon Sep 17 00:00:00 2001 From: jinranran Date: Thu, 20 Apr 2023 15:22:27 +0800 Subject: [PATCH] fix maybeReadTimeOut throw NullPointerException this commit fix issue: NullPointerException in maybeReadTimeOut() method can cause Eureka cluster registration inconsistency #1497 --- .../cluster/ReplicationTaskProcessor.java | 20 ++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/eureka-core/src/main/java/com/netflix/eureka/cluster/ReplicationTaskProcessor.java b/eureka-core/src/main/java/com/netflix/eureka/cluster/ReplicationTaskProcessor.java index 961385b31a..fb3d45f4cd 100644 --- a/eureka-core/src/main/java/com/netflix/eureka/cluster/ReplicationTaskProcessor.java +++ b/eureka-core/src/main/java/com/netflix/eureka/cluster/ReplicationTaskProcessor.java @@ -192,14 +192,20 @@ private static boolean isNetworkConnectException(Throwable e) { */ private static boolean maybeReadTimeOut(Throwable e) { do { - if (IOException.class.isInstance(e)) { - String message = e.getMessage().toLowerCase(); - Matcher matcher = READ_TIME_OUT_PATTERN.matcher(message); - if(matcher.find()) { - return true; - } + try { + if (IOException.class.isInstance(e)) { + # !!!this line may occurs NullPointerException in some scenarios. + String message = e.getMessage().toLowerCase(); + Matcher matcher = READ_TIME_OUT_PATTERN.matcher(message); + if(matcher.find()) { + return true; + } + } + e = e.getCause(); + } catch (Exception ex) { + logger.error("Unexpected other exception occurs when check if the income param e is socket read time out exception ", ex); + return false; } - e = e.getCause(); } while (e != null); return false; }