Updates to GossipIntentStore and IntentPerfInstaller
Change-Id: If350a6276d758222f9b6ea25ab78d055321eecac
diff --git a/core/store/dist/src/main/java/org/onosproject/store/intent/impl/GossipIntentStore.java b/core/store/dist/src/main/java/org/onosproject/store/intent/impl/GossipIntentStore.java
index 2b59fae..8ff462e 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/intent/impl/GossipIntentStore.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/intent/impl/GossipIntentStore.java
@@ -16,6 +16,7 @@
package org.onosproject.store.intent.impl;
import com.google.common.collect.ImmutableList;
+import org.apache.commons.lang.math.RandomUtils;
import org.apache.felix.scr.annotations.Activate;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Deactivate;
@@ -45,9 +46,7 @@
import org.onosproject.store.serializers.KryoNamespaces;
import org.slf4j.Logger;
-import java.util.ArrayList;
import java.util.Collection;
-import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
@@ -102,7 +101,7 @@
pendingMap = new EventuallyConsistentMapImpl<>("intent-pending",
clusterService,
clusterCommunicator,
- intentSerializer, // TODO
+ intentSerializer,
new IntentDataClockManager<>(),
(key, intentData) -> getPeerNodes(key, intentData));
@@ -254,29 +253,36 @@
private Collection<NodeId> getPeerNodes(Key key, IntentData data) {
NodeId master = partitionService.getLeader(key);
NodeId origin = (data != null) ? data.origin() : null;
+ if (master == null || origin == null) {
+ log.warn("Intent {} has no home; master = {}, origin = {}",
+ data.key(), master, origin);
+ }
+
NodeId me = clusterService.getLocalNode().id();
boolean isMaster = Objects.equals(master, me);
boolean isOrigin = Objects.equals(origin, me);
if (isMaster && isOrigin) {
- return ImmutableList.of(getRandomNode());
+ return getRandomNode();
} else if (isMaster) {
- return origin != null ? ImmutableList.of(origin) : ImmutableList.of(getRandomNode());
+ return origin != null ? ImmutableList.of(origin) : getRandomNode();
} else if (isOrigin) {
- return ImmutableList.of(master);
+ return master != null ? ImmutableList.of(master) : getRandomNode();
} else {
- // FIXME: why are we here? log error?
+ log.warn("Not master or origin for intent {}", data.key());
return ImmutableList.of(master);
}
}
- private NodeId getRandomNode() {
+ private List<NodeId> getRandomNode() {
+ NodeId me = clusterService.getLocalNode().id();
List<NodeId> nodes = clusterService.getNodes().stream()
- .map(ControllerNode::id)
- .collect(Collectors.toCollection(ArrayList::new));
- Collections.shuffle(nodes);
- // FIXME check if self
- // FIXME verify nodes.size() > 0
- return nodes.get(0);
+ .map(ControllerNode::id)
+ .filter(node -> !Objects.equals(node, me))
+ .collect(Collectors.toList());
+ if (nodes.size() == 0) {
+ return null;
+ }
+ return ImmutableList.of(nodes.get(RandomUtils.nextInt(nodes.size())));
}
@Override