Fix ONOS-2034 by serializing a immutable copy of the device flow table
Change-Id: Ie129b54bf77172abfe28de0464562ef816a5ec03
Showing
1 changed file
with
4 additions
and
6 deletions
... | @@ -16,6 +16,7 @@ | ... | @@ -16,6 +16,7 @@ |
16 | package org.onosproject.store.flow.impl; | 16 | package org.onosproject.store.flow.impl; |
17 | 17 | ||
18 | import com.google.common.base.Objects; | 18 | import com.google.common.base.Objects; |
19 | +import com.google.common.collect.ImmutableMap; | ||
19 | import com.google.common.collect.Iterables; | 20 | import com.google.common.collect.Iterables; |
20 | import com.google.common.collect.Maps; | 21 | import com.google.common.collect.Maps; |
21 | import com.google.common.collect.Sets; | 22 | import com.google.common.collect.Sets; |
... | @@ -641,11 +642,7 @@ public class NewDistributedFlowRuleStore | ... | @@ -641,11 +642,7 @@ public class NewDistributedFlowRuleStore |
641 | log.debug("Sending flowEntries for devices {} to {} as backup.", deviceIds, nodeId); | 642 | log.debug("Sending flowEntries for devices {} to {} as backup.", deviceIds, nodeId); |
642 | Map<DeviceId, Map<FlowId, Set<StoredFlowEntry>>> deviceFlowEntries = | 643 | Map<DeviceId, Map<FlowId, Set<StoredFlowEntry>>> deviceFlowEntries = |
643 | Maps.newConcurrentMap(); | 644 | Maps.newConcurrentMap(); |
644 | - flowEntries.forEach((key, value) -> { | 645 | + deviceIds.forEach(id -> deviceFlowEntries.put(id, ImmutableMap.copyOf(getFlowTable(id)))); |
645 | - if (deviceIds.contains(key)) { | ||
646 | - deviceFlowEntries.put(key, value); | ||
647 | - } | ||
648 | - }); | ||
649 | clusterCommunicator.<Map<DeviceId, Map<FlowId, Set<StoredFlowEntry>>>, Set<DeviceId>>sendAndReceive( | 646 | clusterCommunicator.<Map<DeviceId, Map<FlowId, Set<StoredFlowEntry>>>, Set<DeviceId>>sendAndReceive( |
650 | deviceFlowEntries, | 647 | deviceFlowEntries, |
651 | FLOW_TABLE_BACKUP, | 648 | FLOW_TABLE_BACKUP, |
... | @@ -657,7 +654,8 @@ public class NewDistributedFlowRuleStore | ... | @@ -657,7 +654,8 @@ public class NewDistributedFlowRuleStore |
657 | deviceFlowEntries.keySet() : | 654 | deviceFlowEntries.keySet() : |
658 | Sets.difference(deviceFlowEntries.keySet(), backedupDevices); | 655 | Sets.difference(deviceFlowEntries.keySet(), backedupDevices); |
659 | if (devicesNotBackedup.size() > 0) { | 656 | if (devicesNotBackedup.size() > 0) { |
660 | - log.warn("Failed to backup devices: {}", devicesNotBackedup, error); | 657 | + log.warn("Failed to backup devices: {}. Reason: {}", |
658 | + devicesNotBackedup, error.getMessage()); | ||
661 | } | 659 | } |
662 | if (backedupDevices != null) { | 660 | if (backedupDevices != null) { |
663 | backedupDevices.forEach(id -> { | 661 | backedupDevices.forEach(id -> { | ... | ... |
-
Please register or login to post a comment