/** * Note that appsHashCode and versionDelta key names are formatted in a * custom/configurable way. */ @JsonCreator public Applications(@JsonProperty("appsHashCode") String appsHashCode, @JsonProperty("versionDelta") Long versionDelta, @JsonProperty("application") List<Application> registeredApplications) { this.applications = new ConcurrentLinkedQueue<Application>(); this.appNameApplicationMap = new ConcurrentHashMap<String, Application>(); this.virtualHostNameAppMap = new ConcurrentHashMap<String, VipIndexSupport>(); this.secureVirtualHostNameAppMap = new ConcurrentHashMap<String, VipIndexSupport>(); this.appsHashCode = appsHashCode; this.versionDelta = versionDelta; for (Application app : registeredApplications) { this.addApplication(app); } }
public static Applications toApplications(Map<String, Application> applicationMap) { Applications applications = new Applications(); for (Application application : applicationMap.values()) { applications.addApplication(application); } return updateMeta(applications); }
protected void addDeltaApps(boolean includeRemote, Applications apps) { for (Application application : applicationDeltaMap.values()) { apps.addApplication(application); } if (includeRemote) { for (Application application : remoteRegionAppsDelta.values()) { apps.addApplication(application); } } }
public static Applications toApplications(Map<String, Application> applicationMap) { Applications applications = new Applications(); for (Application application : applicationMap.values()) { applications.addApplication(application); } return updateMeta(applications); }
public static Applications mergeApplications(Applications first, Applications second) { Set<String> firstNames = selectApplicationNames(first); Set<String> secondNames = selectApplicationNames(second); Set<String> allNames = new HashSet<String>(firstNames); allNames.addAll(secondNames); Applications merged = new Applications(); for (String appName : allNames) { if (firstNames.contains(appName)) { if (secondNames.contains(appName)) { merged.addApplication(mergeApplication(first.getRegisteredApplications(appName), second.getRegisteredApplications(appName))); } else { merged.addApplication(copyApplication(first.getRegisteredApplications(appName))); } } else { merged.addApplication(copyApplication(second.getRegisteredApplications(appName))); } } return updateMeta(merged); }
public static Applications merge(Applications first, Applications second) { Set<String> firstNames = applicationNames(first); Set<String> secondNames = applicationNames(second); Set<String> allNames = new HashSet<String>(firstNames); allNames.addAll(secondNames); Applications merged = new Applications(); for (String appName : allNames) { if (firstNames.contains(appName)) { if (secondNames.contains(appName)) { merged.addApplication(merge(first.getRegisteredApplications(appName), second.getRegisteredApplications(appName))); } else { merged.addApplication(copyOf(first.getRegisteredApplications(appName))); } } else { merged.addApplication(copyOf(second.getRegisteredApplications(appName))); } } return updateMeta(merged); }
protected String getDeltaAppsHashCode(boolean includeRemote) { Applications allApps = new Applications(); for (Application application : applicationMap.values()) { allApps.addApplication(application); } if (includeRemote) { for (Application application : remoteRegionApps.values()) { allApps.addApplication(application); } } addDeltaApps(includeRemote, allApps); return allApps.getReconcileHashCode(); }
public static void copyApplications(Applications source, Applications result) { if (source != null) { for (Application app : source.getRegisteredApplications()) { result.addApplication(new Application(app.getName(), app.getInstances())); } } }
public static Applications deepCopyApplications(Applications source) { Applications result = new Applications(); for (Application application : source.getRegisteredApplications()) { result.addApplication(deepCopyApplication(application)); } return updateMeta(result); }
@Override public Applications fetchRegistry(String[] includeRemoteRegions) { Applications toReturn = new Applications(); for (Application application : localRegionApps.getRegisteredApplications()) { toReturn.addApplication(application); } for (String region : includeRemoteRegions) { Applications applications = remoteRegionVsApps.get(region); if (null != applications) { for (Application application : applications.getRegisteredApplications()) { toReturn.addApplication(application); } } } return toReturn; }
public static void copyInstances(Collection<InstanceInfo> instances, Applications result) { if (instances != null) { for (InstanceInfo instance : instances) { Application app = result.getRegisteredApplications(instance.getAppName()); if (app == null) { app = new Application(instance.getAppName()); result.addApplication(app); } app.addInstance(instance); } } }
public Applications toApplications() { Map<String, Application> appsByName = new HashMap<>(); Iterator<InstanceInfo> it = serviceIterator(); while (it.hasNext()) { InstanceInfo instanceInfo = it.next(); Application instanceApp = appsByName.get(instanceInfo.getAppName()); if (instanceApp == null) { instanceApp = new Application(instanceInfo.getAppName()); appsByName.put(instanceInfo.getAppName(), instanceApp); } instanceApp.addInstance(instanceInfo); } // Do not pass application list to the constructor, as it does not initialize properly Applications // data structure. Applications applications = new Applications(); for (Application app : appsByName.values()) { applications.addApplication(app); } applications.shuffleInstances(false); applications.setAppsHashCode(applications.getReconcileHashCode()); applications.setVersion(1L); return applications; }
@Override public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context) { Applications apps = new Applications(); while (reader.hasMoreChildren()) { reader.moveDown(); String nodeName = reader.getNodeName(); if (NODE_APP.equals(nodeName)) { apps.addApplication((Application) context.convertAnother( apps, Application.class)); } else if (VERSIONS_DELTA.equals(nodeName)) { apps.setVersion(Long.valueOf(reader.getValue())); } else if (APPS_HASHCODE.equals(nodeName)) { apps.setAppsHashCode(reader.getValue()); } reader.moveUp(); } return apps; } }
private void setupBackupMock() { Application localApp = createLocalApps(); Applications localApps = new Applications(); localApps.addApplication(localApp); backupRegistry.setLocalRegionApps(localApps); Application remoteApp = createRemoteApps(); Applications remoteApps = new Applications(); remoteApps.addApplication(remoteApp); backupRegistry.getRemoteRegionVsApps().put(REMOTE_REGION, remoteApps); }
public static Applications toApplications(List<InstanceInfo> instances) { Applications result = new Applications(); for (InstanceInfo instance : instances) { Application app = result.getRegisteredApplications(instance.getAppName()); if (app == null) { app = new Application(instance.getAppName()); result.addApplication(app); } app.addInstance(instance); } return updateMeta(result); }
@Test public void testNoValidDataFromRemoteServer() { Applications newApplications = new Applications(); for (Application application : applications.getRegisteredApplications()) { if (!application.getInstances().get(0).getVIPAddress().equals(vipAddress)) { newApplications.addApplication(application); } } when(httpClient.getVip(vipAddress)).thenReturn(EurekaHttpResponse.anEurekaHttpResponse(200, newApplications).build()); List<AwsEndpoint> endpoints = resolver.getClusterEndpoints(); assertThat(endpoints.isEmpty(), is(true)); verify(httpClient, times(1)).shutdown(); }
public CodecLoadTester(int instanceCount, int appCount) { Iterator<InstanceInfo> instanceIt = InstanceInfoGenerator.newBuilder(instanceCount, appCount) .withMetaData(true).build().serviceIterator(); applications = new Applications(); int appIdx = 0; while (instanceIt.hasNext()) { InstanceInfo next = instanceIt.next(); instanceInfoList.add(next); if (applicationList.size() <= appIdx) { applicationList.add(new Application(next.getAppName())); } applicationList.get(appIdx).addInstance(next); appIdx = (appIdx + 1) % appCount; } for (Application app : applicationList) { applications.addApplication(app); } applications.setAppsHashCode(applications.getReconcileHashCode()); firstHolder.value = applications; }
@Test public void testPopulateInstanceCount() { DataCenterInfo myDCI = new DataCenterInfo() { public DataCenterInfo.Name getName() { return DataCenterInfo.Name.MyOwn; } }; InstanceInfo instanceInfo = InstanceInfo.Builder.newBuilder() .setAppName("test") .setVIPAddress("test.testname:1") .setSecureVIPAddress("securetest.testname:7102") .setDataCenterInfo(myDCI) .setHostName("test.hostname") .setStatus(InstanceStatus.UP) .build(); Application application = new Application("TestApp"); application.addInstance(instanceInfo); Applications applications = new Applications(); applications.addApplication(application); TreeMap<String, AtomicInteger> instanceCountMap = new TreeMap<>(); applications.populateInstanceCountMap(instanceCountMap); assertEquals(1, instanceCountMap.size()); assertNotNull(instanceCountMap.get(InstanceStatus.UP.name())); assertEquals(1, instanceCountMap.get(InstanceStatus.UP.name()).get()); }
@Test public void testRegisteredApplications() { DataCenterInfo myDCI = new DataCenterInfo() { public DataCenterInfo.Name getName() { return DataCenterInfo.Name.MyOwn; } }; InstanceInfo instanceInfo = InstanceInfo.Builder.newBuilder() .setAppName("test") .setVIPAddress("test.testname:1") .setSecureVIPAddress("securetest.testname:7102") .setDataCenterInfo(myDCI) .setHostName("test.hostname") .build(); Application application = new Application("TestApp"); application.addInstance(instanceInfo); Applications applications = new Applications(); applications.addApplication(application); List<Application> appsList = applications.getRegisteredApplications(); Assert.assertEquals(1, appsList.size()); Assert.assertTrue(appsList.contains(application)); Assert.assertEquals(application, applications.getRegisteredApplications(application.getName())); }
@Test public void testGetNextIndex() { DataCenterInfo myDCI = new DataCenterInfo() { public DataCenterInfo.Name getName() { return DataCenterInfo.Name.MyOwn; } }; InstanceInfo instanceInfo = InstanceInfo.Builder.newBuilder() .setAppName("test") .setVIPAddress("test.testname:1") .setSecureVIPAddress("securetest.testname:7102") .setDataCenterInfo(myDCI) .setHostName("test.hostname") .setStatus(InstanceStatus.UP) .build(); Application application = new Application("TestApp"); application.addInstance(instanceInfo); Applications applications = new Applications(); applications.addApplication(application); assertNotNull(applications.getNextIndex("test.testname:1", false)); assertEquals(0L, applications.getNextIndex("test.testname:1", false).get()); assertNotNull(applications.getNextIndex("securetest.testname:7102", true)); assertEquals(0L, applications.getNextIndex("securetest.testname:7102", true).get()); assertNotSame(applications.getNextIndex("test.testname:1", false), applications.getNextIndex("securetest.testname:7102", true)); }