Yuta HIGUCHI

Add missing synchronized

Change-Id: Ie391feb6ef0fa79ea859e89e8a2fd51d59f03cea
...@@ -106,10 +106,11 @@ public class DistributedFlowRuleStore ...@@ -106,10 +106,11 @@ public class DistributedFlowRuleStore
106 106
107 private final Logger log = getLogger(getClass()); 107 private final Logger log = getLogger(getClass());
108 108
109 + // primary data:
110 + // read/write needs to be synchronized
109 // store entries as a pile of rules, no info about device tables 111 // store entries as a pile of rules, no info about device tables
110 - private final Multimap<DeviceId, StoredFlowEntry> flowEntries = 112 + private final Multimap<DeviceId, StoredFlowEntry> flowEntries
111 - ArrayListMultimap.<DeviceId, StoredFlowEntry>create(); 113 + = ArrayListMultimap.<DeviceId, StoredFlowEntry>create();
112 -
113 114
114 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) 115 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
115 protected ReplicaInfoService replicaInfoManager; 116 protected ReplicaInfoService replicaInfoManager;
...@@ -135,6 +136,7 @@ public class DistributedFlowRuleStore ...@@ -135,6 +136,7 @@ public class DistributedFlowRuleStore
135 //.removalListener(listener) 136 //.removalListener(listener)
136 .build(); 137 .build();
137 138
139 + // Cache of SMaps used for backup data. each SMap contain device flow table
138 private LoadingCache<DeviceId, SMap<FlowId, ImmutableList<StoredFlowEntry>>> smaps; 140 private LoadingCache<DeviceId, SMap<FlowId, ImmutableList<StoredFlowEntry>>> smaps;
139 141
140 142
...@@ -311,7 +313,7 @@ public class DistributedFlowRuleStore ...@@ -311,7 +313,7 @@ public class DistributedFlowRuleStore
311 } 313 }
312 } 314 }
313 315
314 - private Set<FlowEntry> getFlowEntriesInternal(DeviceId deviceId) { 316 + private synchronized Set<FlowEntry> getFlowEntriesInternal(DeviceId deviceId) {
315 Collection<? extends FlowEntry> rules = flowEntries.get(deviceId); 317 Collection<? extends FlowEntry> rules = flowEntries.get(deviceId);
316 if (rules == null) { 318 if (rules == null) {
317 return Collections.emptySet(); 319 return Collections.emptySet();
...@@ -365,7 +367,9 @@ public class DistributedFlowRuleStore ...@@ -365,7 +367,9 @@ public class DistributedFlowRuleStore
365 } 367 }
366 } 368 }
367 369
368 - private ListenableFuture<CompletedBatchOperation> storeBatchInternal(FlowRuleBatchOperation operation) { 370 + private synchronized ListenableFuture<CompletedBatchOperation>
371 + storeBatchInternal(FlowRuleBatchOperation operation) {
372 +
369 final List<StoredFlowEntry> toRemove = new ArrayList<>(); 373 final List<StoredFlowEntry> toRemove = new ArrayList<>();
370 final List<StoredFlowEntry> toAdd = new ArrayList<>(); 374 final List<StoredFlowEntry> toAdd = new ArrayList<>();
371 DeviceId did = null; 375 DeviceId did = null;
......