diff options
author | Lukasz Jarocki <lukasz.jarocki@sonarsource.com> | 2025-02-13 14:40:42 +0100 |
---|---|---|
committer | Lukasz Jarocki <lukasz.jarocki@sonarsource.com> | 2025-02-28 09:57:47 +0100 |
commit | 7da26548175ead56eda412ea1cba74e12ced2e0b (patch) | |
tree | 633d17200b27010d5f260621d86df4d147365c12 /server | |
parent | e92997c55428117bb54d6edaa5d35f889c9986a6 (diff) | |
download | sonarqube-7da26548175ead56eda412ea1cba74e12ced2e0b.tar.gz sonarqube-7da26548175ead56eda412ea1cba74e12ced2e0b.zip |
SONAR-23456 allowing users to set IPv6 address in square brackets for property 'sonar.cluster.node.host'
Diffstat (limited to 'server')
2 files changed, 29 insertions, 4 deletions
diff --git a/server/sonar-process/src/it/java/org/sonar/process/cluster/hz/HazelcastMemberBuilderIT.java b/server/sonar-process/src/it/java/org/sonar/process/cluster/hz/HazelcastMemberBuilderIT.java index fddb17aad1c..2109ef4d3b0 100644 --- a/server/sonar-process/src/it/java/org/sonar/process/cluster/hz/HazelcastMemberBuilderIT.java +++ b/server/sonar-process/src/it/java/org/sonar/process/cluster/hz/HazelcastMemberBuilderIT.java @@ -26,6 +26,7 @@ import org.sonar.process.NetworkUtilsImpl; import org.sonar.process.ProcessId; import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatCode; import static org.assertj.core.api.Assertions.assertThatThrownBy; @@ -58,6 +59,18 @@ class HazelcastMemberBuilderIT { } @Test + void strip_square_brackets_from_ipv6_address_when_building_a_member() { + HazelcastMemberBuilder memberBuilder = new HazelcastMemberBuilder(JoinConfigurationType.TCP_IP) + .setMembers(loopback.getHostAddress()) + .setProcessId(ProcessId.COMPUTE_ENGINE) + .setNodeName("bar") + .setPort(NetworkUtilsImpl.INSTANCE.getNextLoopbackAvailablePort()) + .setNetworkInterface("[" + loopback.getHostAddress() + "]"); + + assertThatCode(memberBuilder::build).doesNotThrowAnyException(); + } + + @Test void build_tcp_ip_member_hostname() { HazelcastMember member = new HazelcastMemberBuilder(JoinConfigurationType.TCP_IP) .setMembers(loopback.getHostName()) diff --git a/server/sonar-process/src/main/java/org/sonar/process/cluster/hz/HazelcastMemberBuilder.java b/server/sonar-process/src/main/java/org/sonar/process/cluster/hz/HazelcastMemberBuilder.java index cb136d04c01..8627327ac64 100644 --- a/server/sonar-process/src/main/java/org/sonar/process/cluster/hz/HazelcastMemberBuilder.java +++ b/server/sonar-process/src/main/java/org/sonar/process/cluster/hz/HazelcastMemberBuilder.java @@ -27,6 +27,7 @@ import com.hazelcast.config.NetworkConfig; import com.hazelcast.core.Hazelcast; import java.util.List; import java.util.stream.Stream; +import org.jetbrains.annotations.NotNull; import org.sonar.process.ProcessId; import org.sonar.process.cluster.hz.HazelcastMember.Attribute; @@ -94,7 +95,7 @@ public class HazelcastMemberBuilder { .setReuseAddress(true); netConfig.getInterfaces() .setEnabled(true) - .setInterfaces(singletonList(requireNonNull(networkInterface, "Network interface is missing"))); + .setInterfaces(provideNetworkInterfaceForHazelcastConfig()); JoinConfig joinConfig = netConfig.getJoin(); joinConfig.getAwsConfig().setEnabled(false); @@ -130,10 +131,9 @@ public class HazelcastMemberBuilder { .setProperty("hazelcast.phone.home.enabled", "false") // Use slf4j for logging .setProperty("hazelcast.logging.type", "slf4j") - //support ip v6 + // support ip v6 .setProperty("hazelcast.prefer.ipv4.stack", "false") - .setProperty("hazelcast.partial.member.disconnection.resolution.heartbeat.count", "5") - ; + .setProperty("hazelcast.partial.member.disconnection.resolution.heartbeat.count", "5"); MemberAttributeConfig attributes = config.getMemberAttributeConfig(); attributes.setAttribute(Attribute.NODE_NAME.getKey(), requireNonNull(nodeName, "Node name is missing")); @@ -141,4 +141,16 @@ public class HazelcastMemberBuilder { return new HazelcastMemberImpl(Hazelcast.newHazelcastInstance(config)); } + + /** + * Hazelcast doesn't recognize IPv6 address in the square brackets so we remove in case user provided us with the IP with square brackets + */ + @NotNull + private List<String> provideNetworkInterfaceForHazelcastConfig() { + String hazelcastNetworkInterface = requireNonNull(networkInterface, "Network interface is missing"); + if (hazelcastNetworkInterface.startsWith("[") && hazelcastNetworkInterface.endsWith("]")) { + hazelcastNetworkInterface = hazelcastNetworkInterface.replace("[", "").replace("]", ""); + } + return singletonList(hazelcastNetworkInterface); + } } |