提交 3e065028 编写于 作者: A Allen Wang

Ensure zone stats and metrics do not contain stale data for zones that no longer have servers.

上级 d352f863
......@@ -17,6 +17,7 @@
*/
package com.netflix.loadbalancer;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
......@@ -30,6 +31,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.collect.Sets;
import com.netflix.client.ClientFactory;
import com.netflix.config.DynamicBooleanProperty;
import com.netflix.config.DynamicDoubleProperty;
......@@ -84,6 +86,14 @@ public class ZoneAwareLoadBalancer<T extends Server> extends DynamicServerListLo
String zone = entry.getKey().toLowerCase();
getLoadBalancer(zone).setServersList(entry.getValue());
}
// check if there is any zone that no longer has a server
// and set the list to empty so that the zone related metrics does not
// contain stale data
for (Map.Entry<String, BaseLoadBalancer> existingLBEntry: balancers.entrySet()) {
if (!zoneServersMap.keySet().contains(existingLBEntry.getKey())) {
existingLBEntry.getValue().setServersList(Collections.emptyList());
}
}
}
private Map<String, ZoneSnapshot> createSnapshot() {
......
......@@ -275,6 +275,15 @@ public class ZoneAwareLoadBalancerTest {
result.add(server);
}
assertEquals(expected, result);
servers = new ArrayList<Server>();
servers.add(createServer(1, "a"));
servers.add(createServer(2, "a"));
servers.add(createServer(1, "b"));
servers.add(createServer(2, "b"));
balancer.setServersList(servers);
assertTrue(balancer.getLoadBalancer("us-east-1c").getServerList(false).isEmpty());
AvailabilityFilteringRule rule = (AvailabilityFilteringRule) balancer.getLoadBalancer("us-east-1c").getRule();
assertEquals(0, rule.getAvailableServersCount());
}
@Test
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册