Fixes for ONOS-4192
- Do not include known peers in heartbeat message and instead each node relies on cluster metadata to add/remove nodes from inventory
- Ignore heartbeats from nodes that are removed
Change-Id: Ia20ce84ad88aa6c723a21af1fe7f6899821181ed
diff --git a/core/store/dist/src/main/java/org/onosproject/store/cluster/impl/DistributedClusterStore.java b/core/store/dist/src/main/java/org/onosproject/store/cluster/impl/DistributedClusterStore.java
index fb0626c..e6163a9 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/cluster/impl/DistributedClusterStore.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/cluster/impl/DistributedClusterStore.java
@@ -18,6 +18,7 @@
import com.google.common.base.MoreObjects;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Maps;
+
import org.apache.felix.scr.annotations.Activate;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Deactivate;
@@ -234,7 +235,7 @@
.filter(node -> !(node.id().equals(localNode.id())))
.collect(Collectors.toSet());
State state = nodeStates.get(localNode.id());
- byte[] hbMessagePayload = SERIALIZER.encode(new HeartbeatMessage(localNode, state, peers));
+ byte[] hbMessagePayload = SERIALIZER.encode(new HeartbeatMessage(localNode, state));
peers.forEach((node) -> {
heartbeatToPeer(hbMessagePayload, node);
State currentState = nodeStates.get(node.id());
@@ -277,32 +278,25 @@
@Override
public void accept(Endpoint sender, byte[] message) {
HeartbeatMessage hb = SERIALIZER.decode(message);
- failureDetector.report(hb.source().id());
- updateState(hb.source().id(), hb.state);
- hb.knownPeers().forEach(node -> {
- allNodes.put(node.id(), node);
- });
+ if (clusterMetadataService.getClusterMetadata().getNodes().contains(hb.source())) {
+ failureDetector.report(hb.source().id());
+ updateState(hb.source().id(), hb.state);
+ }
}
}
private static class HeartbeatMessage {
private ControllerNode source;
private State state;
- private Set<ControllerNode> knownPeers;
- public HeartbeatMessage(ControllerNode source, State state, Set<ControllerNode> members) {
+ public HeartbeatMessage(ControllerNode source, State state) {
this.source = source;
this.state = state != null ? state : State.ACTIVE;
- this.knownPeers = ImmutableSet.copyOf(members);
}
public ControllerNode source() {
return source;
}
-
- public Set<ControllerNode> knownPeers() {
- return knownPeers;
- }
}
@Override
@@ -371,7 +365,6 @@
/**
* Restarts heartbeatSender executor.
- *
*/
private void restartHeartbeatSender() {
try {
@@ -385,23 +378,4 @@
log.warn(e.getMessage());
}
}
-
- /**
- * Gets current heartbeat interval.
- *
- * @return heartbeatInterval
- */
- private int getHeartbeatInterval() {
- return heartbeatInterval;
- }
-
- /**
- * Gets current Phi failure threshold for Accrual Failure Detector.
- *
- * @return phiFailureThreshold
- */
- private int getPhiFailureThreshold() {
- return phiFailureThreshold;
- }
-
}
\ No newline at end of file