From 33876a34d07c02d043235b2ef39c1909ae05a643 Mon Sep 17 00:00:00 2001 From: souvikree Date: Sat, 1 Nov 2025 00:03:50 +0530 Subject: [PATCH] Fix: differentiate ADDED and MODIFIED instance actions (#1602) --- .../netflix/discovery/DiscoveryClient.java | 21 ++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/eureka-client/src/main/java/com/netflix/discovery/DiscoveryClient.java b/eureka-client/src/main/java/com/netflix/discovery/DiscoveryClient.java index e04a778b1a..ea2a8c77e1 100644 --- a/eureka-client/src/main/java/com/netflix/discovery/DiscoveryClient.java +++ b/eureka-client/src/main/java/com/netflix/discovery/DiscoveryClient.java @@ -1255,16 +1255,31 @@ private void updateDelta(Applications delta) { if (existingApp == null) { applications.addApplication(app); } - logger.debug("Added instance {} to the existing apps in region {}", instance.getId(), instanceRegion); applications.getRegisteredApplications(instance.getAppName()).addInstance(instance); + logger.debug("Added instance {} to the existing apps in region {}", instance.getId(), instanceRegion); } else if (ActionType.MODIFIED.equals(instance.getActionType())) { Application existingApp = applications.getRegisteredApplications(instance.getAppName()); if (existingApp == null) { applications.addApplication(app); + } else { + InstanceInfo existingInstance = existingApp.getByInstanceId(instance.getId()); + if (existingInstance != null) { + existingInstance.setStatus(instance.getStatus()); + + // To prevents NullPointerException or any unnecessary map merges + if (instance.getMetadata() != null && !instance.getMetadata().isEmpty()) { + existingInstance.getMetadata().putAll(instance.getMetadata()); + } + } else { + existingApp.addInstance(instance); + } } - logger.debug("Modified instance {} to the existing apps ", instance.getId()); + logger.debug("Modified instance {} in the existing apps", instance.getId()); - applications.getRegisteredApplications(instance.getAppName()).addInstance(instance); + + + +// applications.getRegisteredApplications(instance.getAppName()).addInstance(instance); } else if (ActionType.DELETED.equals(instance.getActionType())) { Application existingApp = applications.getRegisteredApplications(instance.getAppName());