aboutsummaryrefslogtreecommitdiffstats
path: root/server
diff options
context:
space:
mode:
authorLukasz Jarocki <lukasz.jarocki@sonarsource.com>2025-02-13 14:40:42 +0100
committerLukasz Jarocki <lukasz.jarocki@sonarsource.com>2025-02-28 09:57:47 +0100
commit7da26548175ead56eda412ea1cba74e12ced2e0b (patch)
tree633d17200b27010d5f260621d86df4d147365c12 /server
parente92997c55428117bb54d6edaa5d35f889c9986a6 (diff)
downloadsonarqube-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')
-rw-r--r--server/sonar-process/src/it/java/org/sonar/process/cluster/hz/HazelcastMemberBuilderIT.java13
-rw-r--r--server/sonar-process/src/main/java/org/sonar/process/cluster/hz/HazelcastMemberBuilder.java20
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);
+ }
}