alshabib

Implemented a globally unique next id generator in FlowObjectStore

Change-Id: Ib98b2996e1ebcca56ad816ea94f25d838c5f4d44
...@@ -348,7 +348,7 @@ public class BgpRouter { ...@@ -348,7 +348,7 @@ public class BgpRouter {
348 groupService.addGroup(groupDescription); 348 groupService.addGroup(groupDescription);
349 */ 349 */
350 350
351 - nextHops.put(nextHop.ip(), entry.hashCode()); 351 + nextHops.put(nextHop.ip(), flowObjectiveService.allocateNextId());
352 352
353 } 353 }
354 354
......
...@@ -47,4 +47,10 @@ public interface FlowObjectiveService { ...@@ -47,4 +47,10 @@ public interface FlowObjectiveService {
47 */ 47 */
48 void next(DeviceId deviceId, NextObjective nextObjective); 48 void next(DeviceId deviceId, NextObjective nextObjective);
49 49
50 + /**
51 + * Obtains a globally unique next objective.
52 + * @return an integer
53 + */
54 + int allocateNextId();
55 +
50 } 56 }
......
...@@ -38,4 +38,11 @@ public interface FlowObjectiveStore ...@@ -38,4 +38,11 @@ public interface FlowObjectiveStore
38 * @return a next group 38 * @return a next group
39 */ 39 */
40 NextGroup getNextGroup(Integer nextId); 40 NextGroup getNextGroup(Integer nextId);
41 +
42 + /**
43 + * Allocates a next objective id. This id is globally unique
44 + *
45 + * @return an integer
46 + */
47 + int allocateNextId();
41 } 48 }
......
...@@ -170,6 +170,11 @@ public class FlowObjectiveManager implements FlowObjectiveService { ...@@ -170,6 +170,11 @@ public class FlowObjectiveManager implements FlowObjectiveService {
170 } 170 }
171 } 171 }
172 172
173 + @Override
174 + public int allocateNextId() {
175 + return flowObjectiveStore.allocateNextId();
176 + }
177 +
173 private boolean queueObjective(DeviceId deviceId, ForwardingObjective fwd) { 178 private boolean queueObjective(DeviceId deviceId, ForwardingObjective fwd) {
174 if (fwd.nextId() != null && 179 if (fwd.nextId() != null &&
175 flowObjectiveStore.getNextGroup(fwd.nextId()) == null) { 180 flowObjectiveStore.getNextGroup(fwd.nextId()) == null) {
......
...@@ -28,6 +28,7 @@ import org.onosproject.net.flowobjective.FlowObjectiveStore; ...@@ -28,6 +28,7 @@ import org.onosproject.net.flowobjective.FlowObjectiveStore;
28 import org.onosproject.net.flowobjective.FlowObjectiveStoreDelegate; 28 import org.onosproject.net.flowobjective.FlowObjectiveStoreDelegate;
29 import org.onosproject.net.flowobjective.ObjectiveEvent; 29 import org.onosproject.net.flowobjective.ObjectiveEvent;
30 import org.onosproject.store.AbstractStore; 30 import org.onosproject.store.AbstractStore;
31 +import org.onosproject.store.service.AtomicCounter;
31 import org.onosproject.store.service.ConsistentMap; 32 import org.onosproject.store.service.ConsistentMap;
32 import org.onosproject.store.service.Serializer; 33 import org.onosproject.store.service.Serializer;
33 import org.onosproject.store.service.StorageService; 34 import org.onosproject.store.service.StorageService;
...@@ -52,6 +53,8 @@ public class DistributedFlowObjectiveStore ...@@ -52,6 +53,8 @@ public class DistributedFlowObjectiveStore
52 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) 53 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
53 protected StorageService storageService; 54 protected StorageService storageService;
54 55
56 + private AtomicCounter nextIds;
57 +
55 @Activate 58 @Activate
56 public void activate() { 59 public void activate() {
57 nextGroups = storageService.<Integer, byte[]>consistentMapBuilder() 60 nextGroups = storageService.<Integer, byte[]>consistentMapBuilder()
...@@ -62,6 +65,10 @@ public class DistributedFlowObjectiveStore ...@@ -62,6 +65,10 @@ public class DistributedFlowObjectiveStore
62 .build())) 65 .build()))
63 .build(); 66 .build();
64 67
68 + nextIds = storageService.atomicCounterBuilder()
69 + .withName("next-objective-counter")
70 + .build();
71 +
65 log.info("Started"); 72 log.info("Started");
66 } 73 }
67 74
...@@ -86,4 +93,9 @@ public class DistributedFlowObjectiveStore ...@@ -86,4 +93,9 @@ public class DistributedFlowObjectiveStore
86 } 93 }
87 return null; 94 return null;
88 } 95 }
96 +
97 + @Override
98 + public int allocateNextId() {
99 + return (int) nextIds.incrementAndGet();
100 + }
89 } 101 }
......