Skip to content

Commit

Permalink
Merge pull request #240 from Knewton/fix-shuffleVirtualHostNameMap
Browse files Browse the repository at this point in the history
Fix bug where shuffleVirtualHostNameMap isn't updated
  • Loading branch information
tbak committed Nov 6, 2014
2 parents 28562af + 9f0308b commit 65e0ef9
Show file tree
Hide file tree
Showing 2 changed files with 53 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -396,6 +396,8 @@ private void shuffleInstances(boolean filterUpInstances, boolean indexByRemoteRe
@Nullable InstanceRegionChecker instanceRegionChecker) {
this.virtualHostNameAppMap.clear();
this.secureVirtualHostNameAppMap.clear();
this.shuffleVirtualHostNameMap.clear();
this.shuffledSecureVirtualHostNameMap.clear();
for (Application application : appNameApplicationMap.values()) {
if (indexByRemoteRegions) {
application.shuffleAndStoreInstances(remoteRegionsRegistry, clientConfig, instanceRegionChecker);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
package com.netflix.discovery.shared;


import com.google.common.collect.Iterables;
import com.netflix.appinfo.DataCenterInfo;
import com.netflix.appinfo.InstanceInfo;

import org.junit.Test;

import java.util.List;

import static junit.framework.Assert.assertNull;
import static junit.framework.Assert.assertTrue;
import static org.junit.Assert.assertEquals;

public class ApplicationsTest {

/**
* Test that instancesMap in Application and shuffleVirtualHostNameMap in Applications are
* correctly updated when the last instance is removed from an application and shuffleInstances
* has been run.
*/
@Test
public void shuffleVirtualHostNameMapLastInstanceTest() {
DataCenterInfo myDCI = new DataCenterInfo(){
public DataCenterInfo.Name getName(){return DataCenterInfo.Name.MyOwn;}
};
InstanceInfo instanceInfo = InstanceInfo.Builder.newBuilder()
.setAppName("test")
.setVIPAddress("test.testname:1")
.setDataCenterInfo(myDCI)
.setHostName("test.hostname").build();

Application application = new Application("TestApp");
application.addInstance(instanceInfo);
Applications applications = new Applications();
applications.addApplication(application);
applications.shuffleInstances(true);
List<InstanceInfo> testApp = applications.getInstancesByVirtualHostName("test.testname:1");

assertEquals(Iterables.getOnlyElement(testApp),
application.getByInstanceId("test.hostname"));

application.removeInstance(instanceInfo);
applications.shuffleInstances(true);
testApp = applications.getInstancesByVirtualHostName("test.testname:1");

assertNull(application.getByInstanceId("test.hostname"));
assertTrue(testApp.isEmpty());
}
}

0 comments on commit 65e0ef9

Please sign in to comment.