From afe8f4d0ef6b3064df655453f941c61c1a8769a4 Mon Sep 17 00:00:00 2001 From: Spencer Gibb Date: Fri, 13 May 2016 15:43:45 -0600 Subject: [PATCH] Fix so brixton eureka clients can use angel eureka servers. see #978 --- .../DataCenterAwareMarshallingStrategy.java | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/eureka/DataCenterAwareMarshallingStrategy.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/eureka/DataCenterAwareMarshallingStrategy.java index b6d36b37f..2b8bb085e 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/eureka/DataCenterAwareMarshallingStrategy.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/eureka/DataCenterAwareMarshallingStrategy.java @@ -177,8 +177,7 @@ public class DataCenterAwareMarshallingStrategy implements MarshallingStrategy { String instanceId = info.getMetadata().get("instanceId"); DataCenterInfo dataCenter = info.getDataCenterInfo(); if (instanceId != null && Name.Amazon != dataCenter.getName()) { - String old = info.getId(); - String id = old.endsWith(instanceId) ? old : old + ":" + instanceId; + String id = calculateId(info, instanceId); info = new InstanceInfo.Builder(info).setDataCenterInfo( new InstanceIdDataCenterInfo(id)).build(); source = info; @@ -186,6 +185,17 @@ public class DataCenterAwareMarshallingStrategy implements MarshallingStrategy { super.marshal(source, writer, context); } + String calculateId(InstanceInfo info, String instanceId) { + String old = info.getId(); + if (old.endsWith(instanceId)) { + return old; + } + if (instanceId.startsWith(old)) { + return instanceId; + } + return old + ":" + instanceId; + } + @Override public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context) { @@ -194,8 +204,7 @@ public class DataCenterAwareMarshallingStrategy implements MarshallingStrategy { String instanceId = info.getMetadata().get("instanceId"); DataCenterInfo dataCenter = info.getDataCenterInfo(); if (instanceId != null && Name.Amazon != dataCenter.getName()) { - String old = info.getId(); - String id = old.endsWith(instanceId) ? old : old + ":" + instanceId; + String id = calculateId(info, instanceId); info = new InstanceInfo.Builder(info).setDataCenterInfo( new InstanceIdDataCenterInfo(id)).build(); obj = info;