making the olt pipeline support distributed cookie values.

Change-Id: I8e9d1c2736c0b62b887ef621e148a2bce6fe620e
diff --git a/drivers/default/src/main/java/org/onosproject/driver/pipeline/OltPipeline.java b/drivers/default/src/main/java/org/onosproject/driver/pipeline/OltPipeline.java
index 810ff1c..1ce9782 100644
--- a/drivers/default/src/main/java/org/onosproject/driver/pipeline/OltPipeline.java
+++ b/drivers/default/src/main/java/org/onosproject/driver/pipeline/OltPipeline.java
@@ -72,6 +72,8 @@
 import org.onosproject.net.group.GroupListener;
 import org.onosproject.net.group.GroupService;
 import org.onosproject.store.serializers.KryoNamespaces;
+import org.onosproject.store.service.AtomicCounter;
+import org.onosproject.store.service.StorageService;
 import org.slf4j.Logger;
 
 import java.util.Collection;
@@ -79,7 +81,6 @@
 import java.util.List;
 import java.util.Optional;
 import java.util.concurrent.TimeUnit;
-import java.util.concurrent.atomic.AtomicLong;
 import java.util.stream.Collectors;
 
 import static org.slf4j.LoggerFactory.getLogger;
@@ -92,18 +93,20 @@
 
     private static final Integer QQ_TABLE = 1;
     private static final short MCAST_VLAN = 4000;
+    private static final String OLTCOOKIES = "olt-cookies-must-be-unique";
     private final Logger log = getLogger(getClass());
 
     private ServiceDirectory serviceDirectory;
     private FlowRuleService flowRuleService;
     private GroupService groupService;
     private CoreService coreService;
+    private StorageService storageService;
 
     private DeviceId deviceId;
     private ApplicationId appId;
     // NOTE: OLT currently has some issue with cookie 0. Pick something larger
     //       to avoid collision
-    private AtomicLong counter = new AtomicLong(123);
+    private AtomicCounter counter;
 
     protected FlowObjectiveStore flowObjectiveStore;
 
@@ -127,6 +130,18 @@
         coreService = serviceDirectory.get(CoreService.class);
         groupService = serviceDirectory.get(GroupService.class);
         flowObjectiveStore = context.store();
+        storageService = serviceDirectory.get(StorageService.class);
+
+        counter = storageService.atomicCounterBuilder()
+                .withName(String.format(OLTCOOKIES, deviceId))
+                .build()
+                .asAtomicCounter();
+
+        /*
+        magic olt number to make sure we don't collide with it's internal
+        processing
+         */
+        counter.set(123);
 
 
         appId = coreService.registerApplication(