aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSébastien Lesaint <sebastien.lesaint@sonarsource.com>2017-09-05 10:53:55 +0200
committerSébastien Lesaint <sebastien.lesaint@sonarsource.com>2017-09-13 15:50:53 +0200
commit3505076a63179b48a4b3350e7bc295e7e665ee42 (patch)
treeba02a422f04eb0754d96803f220993e32be9f516
parentbe21b375ed3a05b021e8c538d4423ebe623fa07d (diff)
downloadsonarqube-3505076a63179b48a4b3350e7bc295e7e665ee42.tar.gz
sonarqube-3505076a63179b48a4b3350e7bc295e7e665ee42.zip
SONAR-9741 add detail TRACE logs SharedHealthStateImpl
-rw-r--r--server/sonar-cluster/src/main/java/org/sonar/cluster/health/SharedHealthStateImpl.java14
-rw-r--r--server/sonar-cluster/src/test/java/org/sonar/cluster/health/SharedHealthStateImplTest.java26
2 files changed, 36 insertions, 4 deletions
diff --git a/server/sonar-cluster/src/main/java/org/sonar/cluster/health/SharedHealthStateImpl.java b/server/sonar-cluster/src/main/java/org/sonar/cluster/health/SharedHealthStateImpl.java
index 2957fc297e7..a045598d234 100644
--- a/server/sonar-cluster/src/main/java/org/sonar/cluster/health/SharedHealthStateImpl.java
+++ b/server/sonar-cluster/src/main/java/org/sonar/cluster/health/SharedHealthStateImpl.java
@@ -23,6 +23,7 @@ import com.google.common.collect.ImmutableSet;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
+import java.util.function.Predicate;
import java.util.stream.Collectors;
import org.sonar.api.utils.log.Logger;
import org.sonar.api.utils.log.Loggers;
@@ -33,6 +34,7 @@ import static java.util.Objects.requireNonNull;
public class SharedHealthStateImpl implements SharedHealthState {
private static final String SQ_HEALTH_STATE_REPLICATED_MAP_IDENTIFIER = "sq_health_state";
private static final Logger LOG = Loggers.get(SharedHealthStateImpl.class);
+ private static final int TIMEOUT_30_SECONDS = 30 * 60 * 1000;
private final HazelcastClient hazelcastClient;
@@ -66,7 +68,7 @@ public class SharedHealthStateImpl implements SharedHealthState {
Map<String, TimestampedNodeHealth> sqHealthState = readReplicatedMap();
Set<String> hzMemberUUIDs = hazelcastClient.getMemberUuids();
Set<NodeHealth> existingNodeHealths = sqHealthState.entrySet().stream()
- .filter(entry -> hzMemberUUIDs.contains(entry.getKey()))
+ .filter(ofNonExistentMember(hzMemberUUIDs))
.map(entry -> entry.getValue().getNodeHealth())
.collect(Collectors.toSet());
if (LOG.isTraceEnabled()) {
@@ -75,6 +77,16 @@ public class SharedHealthStateImpl implements SharedHealthState {
return ImmutableSet.copyOf(existingNodeHealths);
}
+ private static Predicate<Map.Entry<String, TimestampedNodeHealth>> ofNonExistentMember(Set<String> hzMemberUUIDs) {
+ return entry -> {
+ boolean res = hzMemberUUIDs.contains(entry.getKey());
+ if (!res && LOG.isTraceEnabled()) {
+ LOG.trace("Ignoring NodeHealth of member {} because it is not part of the cluster at the moment", entry.getKey());
+ }
+ return res;
+ };
+ }
+
private Map<String, TimestampedNodeHealth> readReplicatedMap() {
return hazelcastClient.getReplicatedMap(SQ_HEALTH_STATE_REPLICATED_MAP_IDENTIFIER);
}
diff --git a/server/sonar-cluster/src/test/java/org/sonar/cluster/health/SharedHealthStateImplTest.java b/server/sonar-cluster/src/test/java/org/sonar/cluster/health/SharedHealthStateImplTest.java
index bef109c26b5..5c4eecc07e6 100644
--- a/server/sonar-cluster/src/test/java/org/sonar/cluster/health/SharedHealthStateImplTest.java
+++ b/server/sonar-cluster/src/test/java/org/sonar/cluster/health/SharedHealthStateImplTest.java
@@ -19,6 +19,7 @@
*/
package org.sonar.cluster.health;
+import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
@@ -92,7 +93,6 @@ public class SharedHealthStateImplTest {
assertThat(logTester.logs()).hasSize(1);
assertThat(logTester.logs(LoggerLevel.TRACE).iterator().next()).isEqualTo("Reading " + map + " and adding " + newNodeHealth);
-
}
@Test
@@ -121,14 +121,34 @@ public class SharedHealthStateImplTest {
public void readAll_logs_map_sq_health_state_content_and_the_content_effectively_returned_if_TRACE() {
logTester.setLevel(LoggerLevel.TRACE);
Map<String, TimestampedNodeHealth> map = new HashMap<>();
- map.put(randomAlphanumeric(44), new TimestampedNodeHealth(randomNodeHealth(), random.nextLong()));
+ String uuid = randomAlphanumeric(44);
+ NodeHealth nodeHealth = randomNodeHealth();
+ map.put(uuid, new TimestampedNodeHealth(nodeHealth, random.nextLong()));
when(hazelcastClient.getClusterTime()).thenReturn(random.nextLong());
+ when(hazelcastClient.getMemberUuids()).thenReturn(Collections.singleton(uuid));
doReturn(map).when(hazelcastClient).getReplicatedMap(MAP_SQ_HEALTH_STATE);
underTest.readAll();
assertThat(logTester.logs()).hasSize(1);
- assertThat(logTester.logs(LoggerLevel.TRACE).iterator().next()).isEqualTo("Reading " + map + " and keeping []");
+ assertThat(logTester.logs(LoggerLevel.TRACE)).containsOnly("Reading " + new HashMap<>(map) + " and keeping " + Collections.singleton(nodeHealth));
+ }
+
+ @Test
+ public void readAll_logs_content_of_non_existing_member_was_ignored_if_TRACE() {
+ logTester.setLevel(LoggerLevel.TRACE);
+ Map<String, TimestampedNodeHealth> map = new HashMap<>();
+ String memberUuid = randomAlphanumeric(44);
+ map.put(memberUuid, new TimestampedNodeHealth(randomNodeHealth(), random.nextLong()));
+ when(hazelcastClient.getClusterTime()).thenReturn(random.nextLong());
+ doReturn(map).when(hazelcastClient).getReplicatedMap(MAP_SQ_HEALTH_STATE);
+
+ underTest.readAll();
+
+ assertThat(logTester.logs()).hasSize(2);
+ assertThat(logTester.logs(LoggerLevel.TRACE)).containsOnly(
+ "Reading " + map + " and keeping []",
+ "Ignoring NodeHealth of member " + memberUuid + " because it is not part of the cluster at the moment");
}
@Test