Yuta HIGUCHI
Committed by Yuta Higuchi

LinkStores: Concurrent readable {src, dst}Links

resolves ONOS-473

Change-Id: Id9c684ded610b30b059c3d83097b0fe4a7f7350b
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
16 package org.onosproject.store.link.impl; 16 package org.onosproject.store.link.impl;
17 17
18 import java.io.IOException; 18 import java.io.IOException;
19 +import java.util.Collection;
19 import java.util.Collections; 20 import java.util.Collections;
20 import java.util.HashMap; 21 import java.util.HashMap;
21 import java.util.HashSet; 22 import java.util.HashSet;
...@@ -71,9 +72,10 @@ import org.slf4j.Logger; ...@@ -71,9 +72,10 @@ import org.slf4j.Logger;
71 72
72 import com.google.common.base.Function; 73 import com.google.common.base.Function;
73 import com.google.common.collect.FluentIterable; 74 import com.google.common.collect.FluentIterable;
74 -import com.google.common.collect.HashMultimap;
75 import com.google.common.collect.ImmutableList; 75 import com.google.common.collect.ImmutableList;
76 +import com.google.common.collect.Multimaps;
76 import com.google.common.collect.SetMultimap; 77 import com.google.common.collect.SetMultimap;
78 +import com.google.common.collect.Sets;
77 79
78 import static com.google.common.base.Preconditions.checkNotNull; 80 import static com.google.common.base.Preconditions.checkNotNull;
79 import static com.google.common.base.Predicates.notNull; 81 import static com.google.common.base.Predicates.notNull;
...@@ -502,8 +504,15 @@ public class GossipLinkStore ...@@ -502,8 +504,15 @@ public class GossipLinkStore
502 } 504 }
503 } 505 }
504 506
507 + /**
508 + * Creates concurrent readable, synchronized HashMultimap.
509 + *
510 + * @return SetMultimap
511 + */
505 private static <K, V> SetMultimap<K, V> createSynchronizedHashMultiMap() { 512 private static <K, V> SetMultimap<K, V> createSynchronizedHashMultiMap() {
506 - return synchronizedSetMultimap(HashMultimap.<K, V>create()); 513 + return synchronizedSetMultimap(
514 + Multimaps.newSetMultimap(new ConcurrentHashMap<K, Collection<V>>(),
515 + () -> Sets.newConcurrentHashSet()));
507 } 516 }
508 517
509 /** 518 /**
......
...@@ -17,8 +17,10 @@ package org.onosproject.store.trivial.impl; ...@@ -17,8 +17,10 @@ package org.onosproject.store.trivial.impl;
17 17
18 import com.google.common.base.Function; 18 import com.google.common.base.Function;
19 import com.google.common.collect.FluentIterable; 19 import com.google.common.collect.FluentIterable;
20 -import com.google.common.collect.HashMultimap; 20 +import com.google.common.collect.Multimaps;
21 import com.google.common.collect.SetMultimap; 21 import com.google.common.collect.SetMultimap;
22 +import com.google.common.collect.Sets;
23 +
22 import org.apache.felix.scr.annotations.Activate; 24 import org.apache.felix.scr.annotations.Activate;
23 import org.apache.felix.scr.annotations.Component; 25 import org.apache.felix.scr.annotations.Component;
24 import org.apache.felix.scr.annotations.Deactivate; 26 import org.apache.felix.scr.annotations.Deactivate;
...@@ -42,6 +44,7 @@ import org.onosproject.net.provider.ProviderId; ...@@ -42,6 +44,7 @@ import org.onosproject.net.provider.ProviderId;
42 import org.onosproject.store.AbstractStore; 44 import org.onosproject.store.AbstractStore;
43 import org.slf4j.Logger; 45 import org.slf4j.Logger;
44 46
47 +import java.util.Collection;
45 import java.util.Collections; 48 import java.util.Collections;
46 import java.util.HashMap; 49 import java.util.HashMap;
47 import java.util.HashSet; 50 import java.util.HashSet;
...@@ -266,8 +269,15 @@ public class SimpleLinkStore ...@@ -266,8 +269,15 @@ public class SimpleLinkStore
266 } 269 }
267 } 270 }
268 271
272 + /**
273 + * Creates concurrent readable, synchronized HashMultimap.
274 + *
275 + * @return SetMultimap
276 + */
269 private static <K, V> SetMultimap<K, V> createSynchronizedHashMultiMap() { 277 private static <K, V> SetMultimap<K, V> createSynchronizedHashMultiMap() {
270 - return synchronizedSetMultimap(HashMultimap.<K, V>create()); 278 + return synchronizedSetMultimap(
279 + Multimaps.newSetMultimap(new ConcurrentHashMap<K, Collection<V>>(),
280 + () -> Sets.newConcurrentHashSet()));
271 } 281 }
272 282
273 /** 283 /**
......