Merge branch 'cassandra-4.0' into cassandra-4.1
diff --git a/CHANGES.txt b/CHANGES.txt
index d477b7f..246ba58 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,5 +1,6 @@
4.1.3
Merged from 4.0:
+ * Remove unnecessary shuffling of GossipDigests in Gossiper#makeRandomGossipDigest (CASSANDRA-18546)
Merged from 3.11:
Merged from 3.0:
diff --git a/src/java/org/apache/cassandra/gms/Gossiper.java b/src/java/org/apache/cassandra/gms/Gossiper.java
index bfd25db..ae213c0 100644
--- a/src/java/org/apache/cassandra/gms/Gossiper.java
+++ b/src/java/org/apache/cassandra/gms/Gossiper.java
@@ -305,7 +305,7 @@
logger.trace("My heartbeat is now {}", endpointStateMap.get(FBUtilities.getBroadcastAddressAndPort()).getHeartBeatState().getHeartBeatVersion());
final List<GossipDigest> gDigests = new ArrayList<>();
- Gossiper.instance.makeRandomGossipDigest(gDigests);
+ Gossiper.instance.makeGossipDigest(gDigests);
if (gDigests.size() > 0)
{
@@ -729,29 +729,29 @@
}
/**
- * The gossip digest is built based on randomization
- * rather than just looping through the collection of live endpoints.
- *
- * @param gDigests list of Gossip Digests.
+ * @param gDigests list of Gossip Digests to be filled
*/
- private void makeRandomGossipDigest(List<GossipDigest> gDigests)
+ private void makeGossipDigest(List<GossipDigest> gDigests)
{
EndpointState epState;
- int generation = 0;
- int maxVersion = 0;
+ int generation;
+ int maxVersion;
// local epstate will be part of endpointStateMap
- List<InetAddressAndPort> endpoints = new ArrayList<>(endpointStateMap.keySet());
- Collections.shuffle(endpoints, random);
- for (InetAddressAndPort endpoint : endpoints)
+ for (Entry<InetAddressAndPort, EndpointState> entry : endpointStateMap.entrySet())
{
- epState = endpointStateMap.get(endpoint);
+ epState = entry.getValue();
if (epState != null)
{
generation = epState.getHeartBeatState().getGeneration();
maxVersion = getMaxEndpointStateVersion(epState);
}
- gDigests.add(new GossipDigest(endpoint, generation, maxVersion));
+ else
+ {
+ generation = 0;
+ maxVersion = 0;
+ }
+ gDigests.add(new GossipDigest(entry.getKey(), generation, maxVersion));
}
if (logger.isTraceEnabled())
@@ -2529,7 +2529,7 @@
}
final List<GossipDigest> gDigests = new ArrayList<GossipDigest>();
- Gossiper.instance.makeRandomGossipDigest(gDigests);
+ Gossiper.instance.makeGossipDigest(gDigests);
GossipDigestSyn digestSynMessage = new GossipDigestSyn(getClusterName(),
getPartitionerName(),