Search in sources :

Example 1 with DarkClusterConfigMap

use of com.linkedin.d2.DarkClusterConfigMap 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;
    }
}
Also used : HashMap(java.util.HashMap) DarkClusterStrategyNameArray(com.linkedin.d2.DarkClusterStrategyNameArray) DarkClusterStrategyName(com.linkedin.d2.DarkClusterStrategyName) DarkClusterConfig(com.linkedin.d2.DarkClusterConfig) ArrayList(java.util.ArrayList) DarkClusterConfigMap(com.linkedin.d2.DarkClusterConfigMap) HashMap(java.util.HashMap) Map(java.util.Map)

Example 2 with DarkClusterConfigMap

use of com.linkedin.d2.DarkClusterConfigMap in project rest.li by linkedin.

the class DarkClustersConverterTest method testDarkClustersConverter.

@Test(dataProvider = "provideKeys")
public void testDarkClustersConverter(boolean successExpected, DarkClusterConfig darkClusterConfig) {
    DarkClusterConfigMap configMap = new DarkClusterConfigMap();
    configMap.put(DARK_CLUSTER_KEY, darkClusterConfig);
    try {
        Assert.assertEquals(DarkClustersConverter.toConfig(DarkClustersConverter.toProperties(configMap)), configMap);
    } catch (Exception | AssertionError e) {
        if (successExpected) {
            Assert.fail("expected success for conversion of: " + darkClusterConfig, e);
        }
    }
}
Also used : DarkClusterConfigMap(com.linkedin.d2.DarkClusterConfigMap) Test(org.testng.annotations.Test)

Example 3 with DarkClusterConfigMap

use of com.linkedin.d2.DarkClusterConfigMap 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");
}
Also used : DarkClusterConfigMap(com.linkedin.d2.DarkClusterConfigMap) DarkClusterStrategyNameArray(com.linkedin.d2.DarkClusterStrategyNameArray) DarkClusterConfig(com.linkedin.d2.DarkClusterConfig) Test(org.testng.annotations.Test)

Example 4 with DarkClusterConfigMap

use of com.linkedin.d2.DarkClusterConfigMap in project rest.li by linkedin.

the class DarkClustersConverterTest method testDarkClustersConverterEmpty.

@Test
public void testDarkClustersConverterEmpty() {
    DarkClusterConfigMap configMap = new DarkClusterConfigMap();
    DarkClusterConfigMap resultConfigMap = DarkClustersConverter.toConfig(DarkClustersConverter.toProperties(configMap));
    Assert.assertEquals(resultConfigMap, configMap);
}
Also used : DarkClusterConfigMap(com.linkedin.d2.DarkClusterConfigMap) Test(org.testng.annotations.Test)

Example 5 with DarkClusterConfigMap

use of com.linkedin.d2.DarkClusterConfigMap in project rest.li by linkedin.

the class ClusterPropertiesSerializerTest method testEmptyDarkClusterJsonSerializer.

@Test
public void testEmptyDarkClusterJsonSerializer() throws PropertySerializationException {
    ClusterPropertiesJsonSerializer jsonSerializer = new ClusterPropertiesJsonSerializer();
    DarkClusterConfigMap darkClusterConfigMap = new DarkClusterConfigMap();
    ClusterProperties property = new ClusterProperties("test", new ArrayList<>(), new HashMap<>(), new HashSet<>(), NullPartitionProperties.getInstance(), Arrays.asList("principal1", "principal2"), DarkClustersConverter.toProperties(darkClusterConfigMap), false);
    assertEquals(jsonSerializer.fromBytes(jsonSerializer.toBytes(property)), property);
}
Also used : DarkClusterConfigMap(com.linkedin.d2.DarkClusterConfigMap) Test(org.testng.annotations.Test)

Aggregations

DarkClusterConfigMap (com.linkedin.d2.DarkClusterConfigMap)17 Test (org.testng.annotations.Test)10 DarkClusterConfig (com.linkedin.d2.DarkClusterConfig)8 DarkClusterStrategyNameArray (com.linkedin.d2.DarkClusterStrategyNameArray)5 ClusterProperties (com.linkedin.d2.balancer.properties.ClusterProperties)3 ArrayList (java.util.ArrayList)3 HashMap (java.util.HashMap)3 D2TransportClientProperties (com.linkedin.d2.D2TransportClientProperties)2 ServiceProperties (com.linkedin.d2.balancer.properties.ServiceProperties)2 UriProperties (com.linkedin.d2.balancer.properties.UriProperties)2 MockStore (com.linkedin.d2.discovery.stores.mock.MockStore)2 Map (java.util.Map)2 FutureCallback (com.linkedin.common.callback.FutureCallback)1 DarkClusterStrategyName (com.linkedin.d2.DarkClusterStrategyName)1 DarkClusterStrategy (com.linkedin.darkcluster.api.DarkClusterStrategy)1 DataList (com.linkedin.data.DataList)1 RequestContext (com.linkedin.r2.message.RequestContext)1 RestRequest (com.linkedin.r2.message.rest.RestRequest)1 TimeoutCallback (com.linkedin.r2.transport.http.client.TimeoutCallback)1 List (java.util.List)1