Skip to content

Commit

Permalink
AliasedDiscoveryConfig for Xml Generator is Added
Browse files Browse the repository at this point in the history
fixes hazelcast#15010

(cherry picked from commit 74b0709)
  • Loading branch information
sancar committed Nov 14, 2019
1 parent c0137b9 commit 688de88
Show file tree
Hide file tree
Showing 6 changed files with 47 additions and 52 deletions.
Expand Up @@ -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<DiscoveryStrategyConfig> createDiscoveryStrategyConfigs(ClientConfig config) {
return AliasedDiscoveryConfigUtils.map(aliasedDiscoveryConfigsFrom(config));
return AliasedDiscoveryConfigUtils.map(aliasedDiscoveryConfigsFrom(config.getNetworkConfig()));
}

/**
Expand All @@ -62,8 +62,7 @@ public static AliasedDiscoveryConfig getConfigByTag(ClientNetworkConfig config,
/**
* Gets a list of all aliased discovery configs from {@code config}.
*/
public static List<AliasedDiscoveryConfig<?>> aliasedDiscoveryConfigsFrom(ClientConfig config) {
ClientNetworkConfig networkConfig = config.getNetworkConfig();
public static List<AliasedDiscoveryConfig<?>> aliasedDiscoveryConfigsFrom(ClientNetworkConfig networkConfig) {
return Arrays.<AliasedDiscoveryConfig<?>>asList(networkConfig.getAwsConfig(), networkConfig.getGcpConfig(),
networkConfig.getAzureConfig(), networkConfig.getKubernetesConfig(), networkConfig.getEurekaConfig());
}
Expand Down
Expand Up @@ -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;
Expand Down Expand Up @@ -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;

Expand Down Expand Up @@ -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());
Expand Down Expand Up @@ -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<AliasedDiscoveryConfig<?>> 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) {
Expand Down
Expand Up @@ -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);
}
Expand Down
Expand Up @@ -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"})
Expand Down
Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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<AliasedDiscoveryConfig<?>> aliasedDiscoveryConfigs = aliasedDiscoveryConfigsFrom(clientConfig.getNetworkConfig());
for (AliasedDiscoveryConfig<?> aliasedDiscoveryConfig : aliasedDiscoveryConfigs) {
aliasedDiscoveryConfig.setUsePublicIp(true).setEnabled(true);
aliasedDiscoveryConfig.setProperty("testKey", "testValue");
}
ClientConfig actualConfig = newConfigViaGenerator();
List<AliasedDiscoveryConfig<?>> generatedConfigs = aliasedDiscoveryConfigsFrom(actualConfig.getNetworkConfig());

for (AliasedDiscoveryConfig<?> generatedDiscoveryConfig : generatedConfigs) {
assertTrue(generatedDiscoveryConfig.isEnabled());
assertTrue(generatedDiscoveryConfig.isUsePublicIp());
String testKey = generatedDiscoveryConfig.getProperty("testKey");
assertEquals("testValue", testKey);
}
}

@Test
Expand Down Expand Up @@ -255,7 +244,8 @@ public void discovery() {
assertEquals(expected.getNodeFilterClass(), actual.getNodeFilterClass());
assertCollection(expected.getDiscoveryStrategyConfigs(), actual.getDiscoveryStrategyConfigs(),
new Comparator<DiscoveryStrategyConfig>() {
@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;
}
Expand Down
Expand Up @@ -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;
Expand All @@ -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;
Expand Down Expand Up @@ -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<DiscoveryStrategyConfig> aliasedDiscoveryConfigs =
ClientAliasedDiscoveryConfigUtils.createDiscoveryStrategyConfigs(config);

List<String> 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
Expand Down

0 comments on commit 688de88

Please sign in to comment.