[AETHER-72] Refactoring RouteService
- to use bulk updates interface
- to use new getRoutesForNextHops API
- to use multi-thread resolver
- to use multi-thread hostexec
- to use a concurrent hashmap instead of synchronized
- to use a non-blocking resolved store
Additionally updates unit tests
Change-Id: Id960abd0f2a1b03066ce34b6a2f72b76566bb58c
diff --git a/apps/route-service/app/src/main/java/org/onosproject/routeservice/impl/DefaultResolvedRouteStore.java b/apps/route-service/app/src/main/java/org/onosproject/routeservice/impl/DefaultResolvedRouteStore.java
index 725a7a9..51ef8c7 100644
--- a/apps/route-service/app/src/main/java/org/onosproject/routeservice/impl/DefaultResolvedRouteStore.java
+++ b/apps/route-service/app/src/main/java/org/onosproject/routeservice/impl/DefaultResolvedRouteStore.java
@@ -17,7 +17,6 @@
package org.onosproject.routeservice.impl;
import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.Maps;
import com.googlecode.concurrenttrees.common.KeyValuePair;
import com.googlecode.concurrenttrees.radix.node.concrete.DefaultByteArrayNodeFactory;
import com.googlecode.concurrenttrees.radixinverted.ConcurrentInvertedRadixTree;
@@ -121,7 +120,7 @@
routeTable = new ConcurrentInvertedRadixTree<>(
new DefaultByteArrayNodeFactory());
- alternativeRoutes = Maps.newHashMap();
+ alternativeRoutes = new ConcurrentHashMap<>();
}
/**
@@ -133,7 +132,6 @@
public RouteEvent update(ResolvedRoute route, Set<ResolvedRoute> alternatives) {
Set<ResolvedRoute> immutableAlternatives = checkAlternatives(route, alternatives);
- synchronized (this) {
ResolvedRoute oldRoute = routeTable.put(createBinaryString(route.prefix()), route);
Set<ResolvedRoute> oldRoutes = alternativeRoutes.put(route.prefix(), immutableAlternatives);
@@ -153,7 +151,6 @@
}
return null;
- }
}
/**
@@ -181,18 +178,16 @@
* @param prefix prefix to remove
*/
public RouteEvent remove(IpPrefix prefix) {
- synchronized (this) {
- String key = createBinaryString(prefix);
+ String key = createBinaryString(prefix);
- ResolvedRoute route = routeTable.getValueForExactKey(key);
- Set<ResolvedRoute> alternatives = alternativeRoutes.remove(prefix);
+ ResolvedRoute route = routeTable.getValueForExactKey(key);
+ Set<ResolvedRoute> alternatives = alternativeRoutes.remove(prefix);
- if (route != null) {
- routeTable.remove(key);
- return new RouteEvent(RouteEvent.Type.ROUTE_REMOVED, route, alternatives);
- }
- return null;
+ if (route != null) {
+ routeTable.remove(key);
+ return new RouteEvent(RouteEvent.Type.ROUTE_REMOVED, route, alternatives);
}
+ return null;
}
/**