Zsolt Haraszti
Committed by Gerrit Code Review

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
......@@ -77,7 +77,6 @@ import java.util.Map;
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 @@ public class CordMcast {
//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 @@ public class CordMcast {
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 @@ public class CordMcast {
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);
......