You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by br...@apache.org on 2012/09/05 18:16:34 UTC
git commit: Gossiper notifies about states after all states have been
applied. Patch by brandonwilliams, reviewed by eevans for CASSANDRA-4383
Updated Branches:
refs/heads/trunk 3a2faf942 -> b7fdc674a
Gossiper notifies about states after all states have been applied.
Patch by brandonwilliams, reviewed by eevans for CASSANDRA-4383
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/b7fdc674
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/b7fdc674
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/b7fdc674
Branch: refs/heads/trunk
Commit: b7fdc674a9882db9e46078c0532add4493233377
Parents: 3a2faf9
Author: Brandon Williams <br...@apache.org>
Authored: Wed Sep 5 11:16:01 2012 -0500
Committer: Brandon Williams <br...@apache.org>
Committed: Wed Sep 5 11:16:01 2012 -0500
----------------------------------------------------------------------
src/java/org/apache/cassandra/gms/Gossiper.java | 6 +++++-
1 files changed, 5 insertions(+), 1 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/b7fdc674/src/java/org/apache/cassandra/gms/Gossiper.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/gms/Gossiper.java b/src/java/org/apache/cassandra/gms/Gossiper.java
index 2404e40..c9cbf7f 100644
--- a/src/java/org/apache/cassandra/gms/Gossiper.java
+++ b/src/java/org/apache/cassandra/gms/Gossiper.java
@@ -896,6 +896,7 @@ public class Gossiper implements IFailureDetectionEventListener, GossiperMBean
if (logger.isTraceEnabled())
logger.trace("Updating heartbeat state version to " + localState.getHeartBeatState().getHeartBeatVersion() + " from " + oldVersion + " for " + addr + " ...");
+ // we need to make two loops here, one to apply, then another to notify, this way all states in an update are present and current when the notifications are received
for (Entry<ApplicationState, VersionedValue> remoteEntry : remoteState.getApplicationStateMap().entrySet())
{
ApplicationState remoteKey = remoteEntry.getKey();
@@ -903,7 +904,10 @@ public class Gossiper implements IFailureDetectionEventListener, GossiperMBean
assert remoteState.getHeartBeatState().getGeneration() == localState.getHeartBeatState().getGeneration();
localState.addApplicationState(remoteKey, remoteValue);
- doNotifications(addr, remoteKey, remoteValue);
+ }
+ for (Entry<ApplicationState, VersionedValue> remoteEntry : remoteState.getApplicationStateMap().entrySet())
+ {
+ doNotifications(addr, remoteEntry.getKey(), remoteEntry.getValue());
}
}