From 688de884b62d161092dee93dbbb58bfbcb94aae2 Mon Sep 17 00:00:00 2001 From: sancar Date: Fri, 14 Jun 2019 10:51:56 +0300 Subject: [PATCH] AliasedDiscoveryConfig for Xml Generator is Added fixes https://github.com/hazelcast/hazelcast/issues/15010 (cherry picked from commit 74b0709c6e6f19109c3839da48f38dad2bf9ed06) --- .../ClientAliasedDiscoveryConfigUtils.java | 5 +- .../config/ClientConfigXmlGenerator.java | 31 ++++++------ .../config/ClientDomConfigProcessor.java | 2 +- .../ClientDiscoveryServiceBuilder.java | 2 +- .../config/ClientConfigXmlGeneratorTest.java | 48 ++++++++----------- .../client/test/TestHazelcastFactory.java | 11 +++-- 6 files changed, 47 insertions(+), 52 deletions(-) diff --git a/hazelcast-client/src/main/java/com/hazelcast/client/config/ClientAliasedDiscoveryConfigUtils.java b/hazelcast-client/src/main/java/com/hazelcast/client/config/ClientAliasedDiscoveryConfigUtils.java index 5d4dc54caed4a..7363bb2a0dbd0 100644 --- a/hazelcast-client/src/main/java/com/hazelcast/client/config/ClientAliasedDiscoveryConfigUtils.java +++ b/hazelcast-client/src/main/java/com/hazelcast/client/config/ClientAliasedDiscoveryConfigUtils.java @@ -37,7 +37,7 @@ private ClientAliasedDiscoveryConfigUtils() { * Extracts aliased discovery configs from {@code config} and creates a list of {@link DiscoveryStrategyConfig} out of them. */ public static List createDiscoveryStrategyConfigs(ClientConfig config) { - return AliasedDiscoveryConfigUtils.map(aliasedDiscoveryConfigsFrom(config)); + return AliasedDiscoveryConfigUtils.map(aliasedDiscoveryConfigsFrom(config.getNetworkConfig())); } /** @@ -62,8 +62,7 @@ public static AliasedDiscoveryConfig getConfigByTag(ClientNetworkConfig config, /** * Gets a list of all aliased discovery configs from {@code config}. */ - public static List> aliasedDiscoveryConfigsFrom(ClientConfig config) { - ClientNetworkConfig networkConfig = config.getNetworkConfig(); + public static List> aliasedDiscoveryConfigsFrom(ClientNetworkConfig networkConfig) { return Arrays.>asList(networkConfig.getAwsConfig(), networkConfig.getGcpConfig(), networkConfig.getAzureConfig(), networkConfig.getKubernetesConfig(), networkConfig.getEurekaConfig()); } diff --git a/hazelcast-client/src/main/java/com/hazelcast/client/config/ClientConfigXmlGenerator.java b/hazelcast-client/src/main/java/com/hazelcast/client/config/ClientConfigXmlGenerator.java index 424c05c710ff2..ab797e147de44 100644 --- a/hazelcast-client/src/main/java/com/hazelcast/client/config/ClientConfigXmlGenerator.java +++ b/hazelcast-client/src/main/java/com/hazelcast/client/config/ClientConfigXmlGenerator.java @@ -19,6 +19,8 @@ import com.hazelcast.client.LoadBalancer; import com.hazelcast.client.util.RandomLB; import com.hazelcast.client.util.RoundRobinLB; +import com.hazelcast.config.AliasedDiscoveryConfig; +import com.hazelcast.config.AliasedDiscoveryConfigUtils; import com.hazelcast.config.ConfigXmlGenerator.XmlGenerator; import com.hazelcast.config.DiscoveryConfig; import com.hazelcast.config.DiscoveryStrategyConfig; @@ -56,6 +58,7 @@ import java.util.List; import java.util.Map; +import static com.hazelcast.client.config.ClientAliasedDiscoveryConfigUtils.aliasedDiscoveryConfigsFrom; import static com.hazelcast.nio.IOUtil.closeResource; import static com.hazelcast.util.StringUtil.isNullOrEmpty; @@ -214,7 +217,7 @@ private static void network(XmlGenerator gen, ClientNetworkConfig network) { socketOptions(gen, network.getSocketOptions()); socketInterceptor(gen, network.getSocketInterceptorConfig()); ssl(gen, network.getSSLConfig()); - aws(gen, network.getAwsConfig()); + aliasedDiscoveryConfigsGenerator(gen, aliasedDiscoveryConfigsFrom(network)); discovery(gen, network.getDiscoveryConfig()); outboundPort(gen, network.getOutboundPortDefinitions()); icmp(gen, network.getClientIcmpPingConfig()); @@ -497,22 +500,20 @@ private static void ssl(XmlGenerator gen, SSLConfig ssl) { .close(); } - private static void aws(XmlGenerator gen, ClientAwsConfig aws) { - if (aws == null) { + private static void aliasedDiscoveryConfigsGenerator(XmlGenerator gen, List> configs) { + if (configs == null) { return; } - gen.open("aws", "enabled", aws.isEnabled(), - "connection-timeout-seconds", aws.getConnectionTimeoutSeconds()) - .node("inside-aws", aws.isInsideAws()) - .node("access-key", aws.getAccessKey()) - .node("secret-key", aws.getSecretKey()) - .node("iam-role", aws.getIamRole()) - .node("region", aws.getRegion()) - .node("host-header", aws.getHostHeader()) - .node("security-group-name", aws.getSecurityGroupName()) - .node("tag-key", aws.getTagKey()) - .node("tag-value", aws.getTagValue()) - .close(); + for (AliasedDiscoveryConfig c : configs) { + gen.open(AliasedDiscoveryConfigUtils.tagFor(c), "enabled", c.isEnabled()); + if (c.isUsePublicIp()) { + gen.node("use-public-ip", "true"); + } + for (String key : c.getProperties().keySet()) { + gen.node(key, c.getProperties().get(key)); + } + gen.close(); + } } private static void discovery(XmlGenerator gen, DiscoveryConfig discovery) { diff --git a/hazelcast-client/src/main/java/com/hazelcast/client/config/ClientDomConfigProcessor.java b/hazelcast-client/src/main/java/com/hazelcast/client/config/ClientDomConfigProcessor.java index a463058f4cf14..51cd5bfede31b 100644 --- a/hazelcast-client/src/main/java/com/hazelcast/client/config/ClientDomConfigProcessor.java +++ b/hazelcast-client/src/main/java/com/hazelcast/client/config/ClientDomConfigProcessor.java @@ -519,7 +519,7 @@ private void handleAliasedDiscoveryStrategy(Node node, ClientNetworkConfig clien } } for (Node n : childElements(node)) { - String key = cleanNodeName(n); + String key = n.getLocalName(); String value = getTextContent(n).trim(); config.setProperty(key, value); } diff --git a/hazelcast-client/src/main/java/com/hazelcast/client/impl/clientside/ClientDiscoveryServiceBuilder.java b/hazelcast-client/src/main/java/com/hazelcast/client/impl/clientside/ClientDiscoveryServiceBuilder.java index c2fdca0556df3..5cb2c9af143a8 100644 --- a/hazelcast-client/src/main/java/com/hazelcast/client/impl/clientside/ClientDiscoveryServiceBuilder.java +++ b/hazelcast-client/src/main/java/com/hazelcast/client/impl/clientside/ClientDiscoveryServiceBuilder.java @@ -193,7 +193,7 @@ private boolean discoverySpiEnabled(ClientNetworkConfig networkConfig) { private boolean usePublicAddress(ClientConfig config) { return properties.getBoolean(ClientProperty.DISCOVERY_SPI_PUBLIC_IP_ENABLED) - || allUsePublicAddress(ClientAliasedDiscoveryConfigUtils.aliasedDiscoveryConfigsFrom(config)); + || allUsePublicAddress(ClientAliasedDiscoveryConfigUtils.aliasedDiscoveryConfigsFrom(config.getNetworkConfig())); } @SuppressWarnings({"checkstyle:booleanexpressioncomplexity", "checkstyle:npathcomplexity"}) diff --git a/hazelcast-client/src/test/java/com/hazelcast/client/config/ClientConfigXmlGeneratorTest.java b/hazelcast-client/src/test/java/com/hazelcast/client/config/ClientConfigXmlGeneratorTest.java index 106dffed9e6ab..43ce99c726f70 100644 --- a/hazelcast-client/src/test/java/com/hazelcast/client/config/ClientConfigXmlGeneratorTest.java +++ b/hazelcast-client/src/test/java/com/hazelcast/client/config/ClientConfigXmlGeneratorTest.java @@ -18,6 +18,7 @@ import com.hazelcast.client.LoadBalancer; import com.hazelcast.client.util.RandomLB; +import com.hazelcast.config.AliasedDiscoveryConfig; import com.hazelcast.config.DiscoveryConfig; import com.hazelcast.config.DiscoveryStrategyConfig; import com.hazelcast.config.EntryListenerConfig; @@ -55,6 +56,7 @@ import java.util.Random; import java.util.Set; +import static com.hazelcast.client.config.ClientAliasedDiscoveryConfigUtils.aliasedDiscoveryConfigsFrom; import static com.hazelcast.client.config.ClientConnectionStrategyConfig.ReconnectMode.ASYNC; import static com.hazelcast.config.EvictionConfig.MaxSizePolicy.USED_NATIVE_MEMORY_SIZE; import static com.hazelcast.config.EvictionPolicy.LFU; @@ -192,34 +194,21 @@ public void networkSsl() { assertProperties(expected.getProperties(), actual.getProperties()); } - @Test - public void networkAws() { - ClientAwsConfig expected = new ClientAwsConfig(); - expected.setInsideAws(true) - .setEnabled(true) - .setTagValue(randomString()) - .setTagKey(randomString()) - .setSecurityGroupName(randomString()) - .setHostHeader(randomString()) - .setRegion(randomString()) - .setIamRole(randomString()) - .setSecretKey(randomString()) - .setAccessKey(randomString()) - .setConnectionTimeoutSeconds(randomInt()); - clientConfig.getNetworkConfig().setAwsConfig(expected); - - ClientAwsConfig actual = newConfigViaGenerator().getNetworkConfig().getAwsConfig(); - assertEquals(expected.isInsideAws(), actual.isInsideAws()); - assertEquals(expected.isEnabled(), actual.isEnabled()); - assertEquals(expected.getTagValue(), actual.getTagValue()); - assertEquals(expected.getTagKey(), actual.getTagKey()); - assertEquals(expected.getSecurityGroupName(), actual.getSecurityGroupName()); - assertEquals(expected.getHostHeader(), actual.getHostHeader()); - assertEquals(expected.getRegion(), actual.getRegion()); - assertEquals(expected.getIamRole(), actual.getIamRole()); - assertEquals(expected.getSecretKey(), actual.getSecretKey()); - assertEquals(expected.getAccessKey(), actual.getAccessKey()); - assertEquals(expected.getConnectionTimeoutSeconds(), actual.getConnectionTimeoutSeconds()); + public void networkAliasedDiscoveryConfigs() { + List> aliasedDiscoveryConfigs = aliasedDiscoveryConfigsFrom(clientConfig.getNetworkConfig()); + for (AliasedDiscoveryConfig aliasedDiscoveryConfig : aliasedDiscoveryConfigs) { + aliasedDiscoveryConfig.setUsePublicIp(true).setEnabled(true); + aliasedDiscoveryConfig.setProperty("testKey", "testValue"); + } + ClientConfig actualConfig = newConfigViaGenerator(); + List> generatedConfigs = aliasedDiscoveryConfigsFrom(actualConfig.getNetworkConfig()); + + for (AliasedDiscoveryConfig generatedDiscoveryConfig : generatedConfigs) { + assertTrue(generatedDiscoveryConfig.isEnabled()); + assertTrue(generatedDiscoveryConfig.isUsePublicIp()); + String testKey = generatedDiscoveryConfig.getProperty("testKey"); + assertEquals("testValue", testKey); + } } @Test @@ -255,7 +244,8 @@ public void discovery() { assertEquals(expected.getNodeFilterClass(), actual.getNodeFilterClass()); assertCollection(expected.getDiscoveryStrategyConfigs(), actual.getDiscoveryStrategyConfigs(), new Comparator() { - @Override public int compare(DiscoveryStrategyConfig o1, DiscoveryStrategyConfig o2) { + @Override + public int compare(DiscoveryStrategyConfig o1, DiscoveryStrategyConfig o2) { assertMap(o1.getProperties(), o2.getProperties()); return o1.getClassName().equals(o2.getClassName()) ? 0 : -1; } diff --git a/hazelcast-client/src/test/java/com/hazelcast/client/test/TestHazelcastFactory.java b/hazelcast-client/src/test/java/com/hazelcast/client/test/TestHazelcastFactory.java index 97f389803effa..475deb742ae12 100644 --- a/hazelcast-client/src/test/java/com/hazelcast/client/test/TestHazelcastFactory.java +++ b/hazelcast-client/src/test/java/com/hazelcast/client/test/TestHazelcastFactory.java @@ -18,6 +18,7 @@ import com.hazelcast.client.HazelcastClient; import com.hazelcast.client.config.ClientAwsConfig; +import com.hazelcast.client.config.ClientAliasedDiscoveryConfigUtils; import com.hazelcast.client.config.ClientConfig; import com.hazelcast.client.config.XmlClientConfigBuilder; import com.hazelcast.client.connection.AddressProvider; @@ -26,6 +27,7 @@ import com.hazelcast.client.impl.clientside.HazelcastClientProxy; import com.hazelcast.client.spi.properties.ClientProperty; import com.hazelcast.client.util.AddressHelper; +import com.hazelcast.config.DiscoveryStrategyConfig; import com.hazelcast.core.HazelcastInstance; import com.hazelcast.instance.OutOfMemoryErrorDispatcher; import com.hazelcast.nio.Address; @@ -89,11 +91,14 @@ public HazelcastInstance newHazelcastClient(ClientConfig config) { private AddressProvider createAddressProvider(ClientConfig config) { boolean discoveryEnabled = new HazelcastProperties(config.getProperties()) .getBoolean(ClientProperty.DISCOVERY_SPI_ENABLED); - ClientAwsConfig awsConfig = config.getNetworkConfig().getAwsConfig(); + + List aliasedDiscoveryConfigs = + ClientAliasedDiscoveryConfigUtils.createDiscoveryStrategyConfigs(config); + List userConfiguredAddresses = config.getNetworkConfig().getAddresses(); - boolean isAtLeastAProviderConfigured - = discoveryEnabled || (awsConfig != null && awsConfig.isEnabled()) || !userConfiguredAddresses.isEmpty(); + boolean isAtLeastAProviderConfigured = discoveryEnabled || !aliasedDiscoveryConfigs.isEmpty() + || !userConfiguredAddresses.isEmpty(); if (isAtLeastAProviderConfigured) { // address providers or addresses are configured explicitly, don't add more addresses