GossipHostStore: Added listeners for handling peer messages
diff --git a/core/store/dist/src/main/java/org/onlab/onos/store/host/impl/GossipHostStore.java b/core/store/dist/src/main/java/org/onlab/onos/store/host/impl/GossipHostStore.java
index a1d6c72..39bc770 100644
--- a/core/store/dist/src/main/java/org/onlab/onos/store/host/impl/GossipHostStore.java
+++ b/core/store/dist/src/main/java/org/onlab/onos/store/host/impl/GossipHostStore.java
@@ -30,6 +30,7 @@
import org.onlab.onos.store.Timestamp;
import org.onlab.onos.store.cluster.messaging.ClusterCommunicationService;
import org.onlab.onos.store.cluster.messaging.ClusterMessage;
+import org.onlab.onos.store.cluster.messaging.ClusterMessageHandler;
import org.onlab.onos.store.cluster.messaging.MessageSubject;
import org.onlab.onos.store.common.impl.Timestamped;
import org.onlab.onos.store.serializers.DistributedStoreSerializers;
@@ -95,6 +96,11 @@
@Activate
public void activate() {
+ clusterCommunicator.addSubscriber(
+ GossipHostStoreMessageSubjects.HOST_UPDATED, new InternalHostEventListener());
+ clusterCommunicator.addSubscriber(
+ GossipHostStoreMessageSubjects.HOST_REMOVED, new InternalHostRemovedEventListener());
+
log.info("Started");
}
@@ -392,4 +398,40 @@
SERIALIZER.encode(event));
clusterCommunicator.broadcast(message);
}
+
+ private void notifyDelegateIfNotNull(HostEvent event) {
+ if (event != null) {
+ notifyDelegate(event);
+ }
+ }
+
+ private class InternalHostEventListener implements ClusterMessageHandler {
+ @Override
+ public void handle(ClusterMessage message) {
+
+ log.info("Received host update event from peer: {}", message.sender());
+ InternalHostEvent event = (InternalHostEvent) SERIALIZER.decode(message.payload());
+
+ ProviderId providerId = event.providerId();
+ HostId hostId = event.hostId();
+ HostDescription hostDescription = event.hostDescription();
+ Timestamp timestamp = event.timestamp();
+
+ notifyDelegateIfNotNull(createOrUpdateHostInternal(providerId, hostId, hostDescription, timestamp));
+ }
+ }
+
+ private class InternalHostRemovedEventListener implements ClusterMessageHandler {
+ @Override
+ public void handle(ClusterMessage message) {
+
+ log.info("Received host removed event from peer: {}", message.sender());
+ InternalHostRemovedEvent event = (InternalHostRemovedEvent) SERIALIZER.decode(message.payload());
+
+ HostId hostId = event.hostId();
+ Timestamp timestamp = event.timestamp();
+
+ notifyDelegateIfNotNull(removeHostInternal(hostId, timestamp));
+ }
+ }
}