Bill commented on a change in pull request #6037:
URL: https://github.com/apache/geode/pull/6037#discussion_r580636410
##########
File path:
geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/GMSMembership.java
##########
@@ -1231,23 +1197,16 @@ public void shutdownMessageReceived(ID id, String
reason) {
if (logger.isDebugEnabled()) {
logger.debug("Membership: recording shutdown status of {}", id);
}
- synchronized (this.shutdownMembers) {
- this.shutdownMembers.put(id, id);
- services.getHealthMonitor()
- .memberShutdown(id, reason);
- services.getJoinLeave().memberShutdown(id, reason);
- }
+ this.shutdownMembers.add(id);
+ services.getJoinLeave().memberShutdown(id, reason);
}
@Override
public Set<ID> getMembersNotShuttingDown() {
- latestViewReadLock.lock();
- try {
- return latestView.getMembers().stream().filter(id ->
!shutdownMembers.containsKey(id))
+ synchronized (shutdownMembers) {
Review comment:
Previously reading threads waited for the `latestViewReadLock`.
But also there was previously a latent bug here, to wit, puts to the
non-concurrent collection `shutdownMembers` were protected (via synchronization
on the collection) whereas the read access to that collection by the `filter()`
loop here was not protected via synchronization.
I think synchronization here is a valid fix for that problem.
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]