Use allocateNextId when building new NextObjective
In order to avoid nextId collisions, all users of the flow objective
service should use the provided allocateNextId() method when
constructing new NextObjectives. I found one instance where this was not
the case: CordMcast.
Solution: removed private id generator from CordMacst and replaced it
with allocateNextId.
Change-Id: I134931b58c524291ae937dd6f0051ee549236734
diff --git a/src/main/java/org/onosproject/cordmcast/CordMcast.java b/src/main/java/org/onosproject/cordmcast/CordMcast.java
index 0981879..6611414 100644
--- a/src/main/java/org/onosproject/cordmcast/CordMcast.java
+++ b/src/main/java/org/onosproject/cordmcast/CordMcast.java
@@ -77,7 +77,6 @@
import java.util.Properties;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.concurrent.atomic.AtomicInteger;
import static com.google.common.base.Preconditions.checkNotNull;
import static com.google.common.base.Strings.isNullOrEmpty;
@@ -129,9 +128,6 @@
//TODO: move this to a ec map
private Map<IpAddress, Integer> groups = Maps.newConcurrentMap();
- //TODO: move this to distributed atomic long
- private AtomicInteger channels = new AtomicInteger(0);
-
private ApplicationId appId;
@Property(name = "mcastVlan", intValue = DEFAULT_MCAST_VLAN,
@@ -331,7 +327,7 @@
final AtomicBoolean sync = new AtomicBoolean(false);
Integer nextId = groups.computeIfAbsent(route.group(), (g) -> {
- Integer id = allocateId();
+ Integer id = flowObjectiveService.allocateNextId();
NextObjective next = DefaultNextObjective.builder()
.fromApp(appId)
@@ -497,10 +493,6 @@
mcastRoutes.forEach(this::removeRemoteRoute);
}
- private Integer allocateId() {
- return channels.getAndIncrement();
- }
-
private WebResource.Builder getClientBuilder(String uri) {
Client client = Client.create();
client.setConnectTimeout(DEFAULT_REST_TIMEOUT_MS);