Github user aweisberg commented on a diff in the pull request:
https://github.com/apache/cassandra/pull/191#discussion_r167020713
--- Diff: src/java/org/apache/cassandra/net/MessagingService.java ---
@@ -1664,4 +1676,113 @@ public static boolean
isEncryptedConnection(InetAddressAndPort address)
}
return true;
}
+
+ public void blockForPeers()
+ {
+ // TODO make these yaml props?
+ int alivePercent = Integer.getInteger(Config.PROPERTY_PREFIX +
"blockForPeers.percent", 70);
+ if (alivePercent < 0)
+ alivePercent = 0;
+ else if (alivePercent > 100)
+ alivePercent = 100;
+
+ int aliveTimeoutSecs = Integer.getInteger(Config.PROPERTY_PREFIX +
"blockForPeers.timeout_in_secs", 10);
+ if (aliveTimeoutSecs < 0)
+ aliveTimeoutSecs = 1;
+ else if (aliveTimeoutSecs > 100)
+ aliveTimeoutSecs = 100;
+
+ if (alivePercent > 0)
+ blockForPeers(alivePercent, aliveTimeoutSecs);
+ }
+
+ private void blockForPeers(int targetAlivePercent, int
aliveTimeoutSecs)
+ {
+ // grab a snapshot of the current cluster from Gossiper. this is
completely prone to race conditions, but it's
+ // good enough for the purposes of blocking until some certain
percentage of nodes are considered 'alive'/connected.
+ Set<Map.Entry<InetAddressAndPort, EndpointState>> peers = new
HashSet<>(Gossiper.instance.getEndpointStates());
+
+ // remove current node from the set
+ peers = peers.stream()
+ .filter(entry ->
!entry.getKey().equals(FBUtilities.getBroadcastAddressAndPort()))
+ .collect(Collectors.toSet());
+
+ final int totalSize = peers.size();
+
+ // don't block if there's no other nodes in the cluster (or we
don't know about them)
+ if (totalSize <= 1)
+ return;
+
+ logger.info("choosing to block until {}% of peers are marked
alive; max time to wait = {} seconds", targetAlivePercent, aliveTimeoutSecs);
+
+ // first, send out a ping message to open up the non-gossip
connections
+ AtomicInteger connectedCount = sendPingMessages(peers);
--- End diff --
Should we also set up the large message connections? We can set up
connections in parallel now with Netty right (sweet!). I think we should up all
of them. Gossip, large, small.
---
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]