From a0c1b4c05d9c98d98a863b248608b2fff1177b7f Mon Sep 17 00:00:00 2001 From: Dave Syer Date: Wed, 18 May 2016 17:32:26 +0200 Subject: [PATCH] Align instanceId calculation with the one done on the client The Angel client has an idiosyncratic way of calculating an instance id, and the Brixton client aligned with that already, but the Brixton server did not. This change should make Brixton Eureka Servers work with Angel clients. See gh-978 --- .../cloud/netflix/eureka/server/CloudJacksonJson.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/spring-cloud-netflix-eureka-server/src/main/java/org/springframework/cloud/netflix/eureka/server/CloudJacksonJson.java b/spring-cloud-netflix-eureka-server/src/main/java/org/springframework/cloud/netflix/eureka/server/CloudJacksonJson.java index d5a26ace..d0eb04c1 100644 --- a/spring-cloud-netflix-eureka-server/src/main/java/org/springframework/cloud/netflix/eureka/server/CloudJacksonJson.java +++ b/spring-cloud-netflix-eureka-server/src/main/java/org/springframework/cloud/netflix/eureka/server/CloudJacksonJson.java @@ -123,12 +123,21 @@ public class CloudJacksonJson extends LegacyJacksonJson { SerializerProvider provider) throws IOException { if (info.getInstanceId() == null && info.getMetadata() != null) { - String instanceId = info.getMetadata().get("instanceId"); + String instanceId = calculateInstanceId(info); info = new InstanceInfo.Builder(info).setInstanceId(instanceId).build(); } super.serialize(info, jgen, provider); } + + private String calculateInstanceId(InstanceInfo info) { + String instanceId = info.getMetadata().get("instanceId"); + String hostName = info.getHostName(); + if (instanceId != null && !instanceId.startsWith(hostName)) { + instanceId = hostName + ":" + instanceId; + } + return instanceId == null ? hostName : instanceId; + } } static class CloudInstanceInfoDeserializer extends InstanceInfoDeserializer {