use of com.linkedin.d2.DarkClusterStrategyNameArray in project rest.li by linkedin.
the class DarkClustersConverter method toProperties.
@SuppressWarnings("unchecked")
public static Map<String, Object> toProperties(DarkClusterConfigMap config) {
if (config == null) {
return Collections.emptyMap();
} else {
Map<String, Object> darkProps = new HashMap<>();
for (Map.Entry<String, DarkClusterConfig> entry : config.entrySet()) {
String darkClusterName = entry.getKey();
DarkClusterConfig darkClusterConfig = entry.getValue();
Map<String, Object> prop = new HashMap<>();
if (darkClusterConfig.hasMultiplier()) {
prop.put(PropertyKeys.DARK_CLUSTER_MULTIPLIER, darkClusterConfig.getMultiplier().toString());
}
if (darkClusterConfig.hasDispatcherOutboundTargetRate()) {
prop.put(PropertyKeys.DARK_CLUSTER_OUTBOUND_TARGET_RATE, darkClusterConfig.getDispatcherOutboundTargetRate().toString());
}
if (darkClusterConfig.hasDispatcherMaxRequestsToBuffer()) {
prop.put(PropertyKeys.DARK_CLUSTER_MAX_REQUESTS_TO_BUFFER, darkClusterConfig.getDispatcherMaxRequestsToBuffer().toString());
}
if (darkClusterConfig.hasDispatcherBufferedRequestExpiryInSeconds()) {
prop.put(PropertyKeys.DARK_CLUSTER_BUFFERED_REQUEST_EXPIRY_IN_SECONDS, darkClusterConfig.getDispatcherBufferedRequestExpiryInSeconds().toString());
}
if (darkClusterConfig.hasDarkClusterStrategyPrioritizedList()) {
DarkClusterStrategyNameArray strategyNameArray = darkClusterConfig.getDarkClusterStrategyPrioritizedList();
List<String> strategyList = new ArrayList<>();
for (DarkClusterStrategyName type : strategyNameArray) {
strategyList.add(type.toString());
}
prop.put(PropertyKeys.DARK_CLUSTER_STRATEGY_LIST, strategyList);
}
if (darkClusterConfig.hasTransportClientProperties()) {
prop.put(PropertyKeys.DARK_CLUSTER_TRANSPORT_CLIENT_PROPERTIES, TransportClientPropertiesConverter.toProperties(darkClusterConfig.getTransportClientProperties()));
}
darkProps.put(darkClusterName, prop);
}
return darkProps;
}
}
use of com.linkedin.d2.DarkClusterStrategyNameArray in project rest.li by linkedin.
the class DarkClustersConverterTest method testMultipleStrategies.
@Test
public void testMultipleStrategies() {
DarkClusterConfigMap configMap = new DarkClusterConfigMap();
DarkClusterStrategyNameArray darkClusterStrategyNameArray = new DarkClusterStrategyNameArray();
darkClusterStrategyNameArray.add(DarkClusterStrategyName.RELATIVE_TRAFFIC);
darkClusterStrategyNameArray.add(DarkClusterStrategyName.CONSTANT_QPS);
DarkClusterConfig config = new DarkClusterConfig().setDarkClusterStrategyPrioritizedList(darkClusterStrategyNameArray);
configMap.put(DARK_CLUSTER_KEY, config);
// these are defaults that will be set if the fields are missing.
config.setMultiplier(DARK_CLUSTER_DEFAULT_MULTIPLIER);
DarkClusterConfigMap expectedConfigMap = new DarkClusterConfigMap();
DarkClusterConfig expectedConfig = new DarkClusterConfig(config.data());
expectedConfig.setMultiplier(0);
expectedConfig.setDispatcherOutboundTargetRate(0);
expectedConfig.setDispatcherMaxRequestsToBuffer(1);
expectedConfig.setDispatcherBufferedRequestExpiryInSeconds(1);
expectedConfigMap.put(DARK_CLUSTER_KEY, expectedConfig);
DarkClusterConfigMap resultConfigMap = DarkClustersConverter.toConfig(DarkClustersConverter.toProperties(configMap));
Assert.assertEquals(resultConfigMap, expectedConfigMap);
Assert.assertEquals(resultConfigMap.get(DARK_CLUSTER_KEY).getDarkClusterStrategyPrioritizedList().get(0), DarkClusterStrategyName.RELATIVE_TRAFFIC, "expected first strategy to be RELATIVE_TRAFFIC");
Assert.assertEquals(resultConfigMap.get(DARK_CLUSTER_KEY).getDarkClusterStrategyPrioritizedList().get(1), DarkClusterStrategyName.CONSTANT_QPS, "expected first strategy to be CONSTANT_QPS");
}
use of com.linkedin.d2.DarkClusterStrategyNameArray in project rest.li by linkedin.
the class TestDarkClusterStrategyFactory method testStrategyFallThruWithNoFallback.
@Test
public void testStrategyFallThruWithNoFallback() {
DarkClusterConfig darkClusterConfig1 = createRelativeTrafficMultiplierConfig(0.5f);
DarkClusterStrategyNameArray darkClusterStrategyList = new DarkClusterStrategyNameArray();
// Only ConstantQPS strategy is present, with no alternative.
darkClusterStrategyList.addAll(Collections.singletonList(CONSTANT_QPS));
darkClusterConfig1.setDarkClusterStrategyPrioritizedList(darkClusterStrategyList);
_clusterInfoProvider.addDarkClusterConfig(SOURCE_CLUSTER_NAME, DARK_CLUSTER_NAME, darkClusterConfig1);
_clusterInfoProvider.notifyListenersClusterAdded(SOURCE_CLUSTER_NAME);
DarkClusterStrategy strategy = _strategyFactory.get(DARK_CLUSTER_NAME);
// test that we didn't find a strategy corresponding to Constant QPS and fell through. It will end up with the NoOpStrategy.
Assert.assertTrue(strategy instanceof NoOpDarkClusterStrategy);
}
use of com.linkedin.d2.DarkClusterStrategyNameArray in project rest.li by linkedin.
the class DarkClusterTestUtil method createRelativeTrafficMultiplierConfig.
/**
* This creates the RelativeTrafficMultiplierConfig, which justs consists of
* setting the multiplier.
*/
public static DarkClusterConfig createRelativeTrafficMultiplierConfig(float multiplier) {
DarkClusterStrategyNameArray darkClusterStrategyArray = new DarkClusterStrategyNameArray();
darkClusterStrategyArray.add(DarkClusterStrategyName.RELATIVE_TRAFFIC);
return new DarkClusterConfig().setDarkClusterStrategyPrioritizedList(darkClusterStrategyArray).setMultiplier(multiplier);
}
use of com.linkedin.d2.DarkClusterStrategyNameArray in project rest.li by linkedin.
the class TestDarkClusterStrategyFactory method testStrategyFallThru.
@Test
public void testStrategyFallThru() {
DarkClusterConfig darkClusterConfig1 = createRelativeTrafficMultiplierConfig(0.5f);
DarkClusterStrategyNameArray darkClusterStrategyList = new DarkClusterStrategyNameArray();
darkClusterStrategyList.addAll(Arrays.asList(CONSTANT_QPS, RELATIVE_TRAFFIC));
darkClusterConfig1.setDarkClusterStrategyPrioritizedList(darkClusterStrategyList);
_clusterInfoProvider.addDarkClusterConfig(SOURCE_CLUSTER_NAME, DARK_CLUSTER_NAME, darkClusterConfig1);
_clusterInfoProvider.notifyListenersClusterAdded(SOURCE_CLUSTER_NAME);
DarkClusterStrategy strategy = _strategyFactory.get(DARK_CLUSTER_NAME);
// test that we didn't find a strategy corresponding to Constant QPS and fell through to Relative traffic
Assert.assertTrue(strategy instanceof RelativeTrafficMultiplierDarkClusterStrategy);
Assert.assertEquals(((RelativeTrafficMultiplierDarkClusterStrategy) strategy).getMultiplier(), 0.5f, "expected 0.5f multiplier");
}
Aggregations