Always use mastershipService for querying device mastership in FlowRuleStore
Change-Id: I68051153e9555bd0e5b632fa30e7c4d844cf2163
diff --git a/core/store/dist/src/main/java/org/onosproject/store/flow/impl/NewDistributedFlowRuleStore.java b/core/store/dist/src/main/java/org/onosproject/store/flow/impl/NewDistributedFlowRuleStore.java
index 56c4dfb..88820b6 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/flow/impl/NewDistributedFlowRuleStore.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/flow/impl/NewDistributedFlowRuleStore.java
@@ -61,7 +61,6 @@
import org.onosproject.store.cluster.messaging.ClusterCommunicationService;
import org.onosproject.store.cluster.messaging.ClusterMessage;
import org.onosproject.store.cluster.messaging.ClusterMessageHandler;
-import org.onosproject.store.flow.ReplicaInfo;
import org.onosproject.store.flow.ReplicaInfoEvent;
import org.onosproject.store.flow.ReplicaInfoEventListener;
import org.onosproject.store.flow.ReplicaInfoService;
@@ -320,9 +319,7 @@
@Override
public FlowEntry getFlowEntry(FlowRule rule) {
-
- ReplicaInfo replicaInfo = replicaInfoManager.getReplicaInfoFor(rule.deviceId());
- NodeId master = replicaInfo.master().orNull();
+ NodeId master = mastershipService.getMasterFor(rule.deviceId());
if (master == null) {
log.warn("Failed to getFlowEntry: No master for {}", rule.deviceId());
@@ -348,9 +345,7 @@
@Override
public Iterable<FlowEntry> getFlowEntries(DeviceId deviceId) {
-
- ReplicaInfo replicaInfo = replicaInfoManager.getReplicaInfoFor(deviceId);
- NodeId master = replicaInfo.master().orNull();
+ NodeId master = mastershipService.getMasterFor(deviceId);
if (master == null) {
log.warn("Failed to getFlowEntries: No master for {}", deviceId);
@@ -391,9 +386,7 @@
}
DeviceId deviceId = operation.deviceId();
-
- ReplicaInfo replicaInfo = replicaInfoManager.getReplicaInfoFor(deviceId);
- NodeId master = replicaInfo.master().orNull();
+ NodeId master = mastershipService.getMasterFor(deviceId);
if (master == null) {
log.warn("No master for {} : flows will be marked for removal", deviceId);
@@ -418,7 +411,7 @@
APPLY_BATCH_FLOWS,
SERIALIZER::encode,
master)) {
- log.warn("Failed to storeBatch: {} to {}", operation, replicaInfo.master());
+ log.warn("Failed to storeBatch: {} to {}", operation, master);
Set<FlowRule> allFailures = operation.getOperations().stream()
.map(op -> op.target())
@@ -491,8 +484,8 @@
@Override
public FlowRuleEvent addOrUpdateFlowRule(FlowEntry rule) {
- ReplicaInfo replicaInfo = replicaInfoManager.getReplicaInfoFor(rule.deviceId());
- if (Objects.equal(local, replicaInfo.master().orNull())) {
+ NodeId master = mastershipService.getMasterFor(rule.deviceId());
+ if (Objects.equal(local, master)) {
return addOrUpdateFlowRuleInternal(rule);
}
@@ -524,8 +517,7 @@
@Override
public FlowRuleEvent removeFlowRule(FlowEntry rule) {
final DeviceId deviceId = rule.deviceId();
- ReplicaInfo replicaInfo = replicaInfoManager.getReplicaInfoFor(deviceId);
- NodeId master = replicaInfo.master().orNull();
+ NodeId master = mastershipService.getMasterFor(deviceId);
if (Objects.equal(local, master)) {
// bypass and handle it locally
@@ -580,9 +572,8 @@
log.debug("received batch request {}", operation);
final DeviceId deviceId = operation.deviceId();
- ReplicaInfo replicaInfo = replicaInfoManager.getReplicaInfoFor(deviceId);
- if (!local.equals(replicaInfo.master().orNull())) {
-
+ NodeId master = mastershipService.getMasterFor(deviceId);
+ if (!Objects.equal(local, master)) {
Set<FlowRule> failures = new HashSet<>(operation.size());
for (FlowRuleBatchEntry op : operation.getOperations()) {
failures.add(op.target());
@@ -618,7 +609,8 @@
public void event(ReplicaInfoEvent event) {
if (event.type() == ReplicaInfoEvent.Type.BACKUPS_CHANGED) {
DeviceId deviceId = event.subject();
- if (!Objects.equal(local, replicaInfoManager.getReplicaInfoFor(deviceId).master())) {
+ NodeId master = mastershipService.getMasterFor(deviceId);
+ if (!Objects.equal(local, master)) {
// ignore since this event is for a device this node does not manage.
return;
}
diff --git a/core/store/dist/src/main/java/org/onosproject/store/flow/impl/ReplicaInfoManager.java b/core/store/dist/src/main/java/org/onosproject/store/flow/impl/ReplicaInfoManager.java
index 9ec7d18..ebb487b 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/flow/impl/ReplicaInfoManager.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/flow/impl/ReplicaInfoManager.java
@@ -15,9 +15,7 @@
*/
package org.onosproject.store.flow.impl;
-import com.google.common.base.Objects;
import com.google.common.collect.ImmutableList;
-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;
@@ -40,8 +38,6 @@
import java.util.Collections;
import java.util.List;
-import java.util.Map;
-
import static com.google.common.base.Preconditions.checkNotNull;
import static org.onosproject.store.flow.ReplicaInfoEvent.Type.BACKUPS_CHANGED;
import static org.onosproject.store.flow.ReplicaInfoEvent.Type.MASTER_CHANGED;
@@ -67,8 +63,6 @@
protected final ListenerRegistry<ReplicaInfoEvent, ReplicaInfoEventListener>
listenerRegistry = new ListenerRegistry<>();
- private final Map<DeviceId, ReplicaInfo> deviceReplicaInfoMap = Maps.newConcurrentMap();
-
@Activate
public void activate() {
eventDispatcher.addSink(ReplicaInfoEvent.class, listenerRegistry);
@@ -85,9 +79,7 @@
@Override
public ReplicaInfo getReplicaInfoFor(DeviceId deviceId) {
- return deviceReplicaInfoMap.computeIfAbsent(
- deviceId,
- id -> buildFromRoleInfo(mastershipService.getNodesFor(deviceId)));
+ return buildFromRoleInfo(mastershipService.getNodesFor(deviceId));
}
@Override
@@ -110,12 +102,7 @@
@Override
public void event(MastershipEvent event) {
- final DeviceId deviceId = event.subject();
final ReplicaInfo replicaInfo = buildFromRoleInfo(event.roleInfo());
- ReplicaInfo oldReplicaInfo = deviceReplicaInfoMap.put(deviceId, replicaInfo);
- if (Objects.equal(oldReplicaInfo, replicaInfo)) {
- return;
- }
switch (event.type()) {
case MASTER_CHANGED:
eventDispatcher.post(new ReplicaInfoEvent(MASTER_CHANGED,