Simple check to avoid duplicate add subscriber calls

Change-Id: I30b9968e13eacd5a35b3ba9e0992e7c3d82abdd7
(cherry picked from commit 026650fcb2fef97440233eeb648b6f94211989aa)
diff --git a/app/src/main/java/org/opencord/olt/impl/Olt.java b/app/src/main/java/org/opencord/olt/impl/Olt.java
index 766dffa..d572657 100644
--- a/app/src/main/java/org/opencord/olt/impl/Olt.java
+++ b/app/src/main/java/org/opencord/olt/impl/Olt.java
@@ -291,11 +291,16 @@
         log.info("Call to provision subscriber at {}", connectPoint);
         DeviceId deviceId = connectPoint.deviceId();
         PortNumber subscriberPortNo = connectPoint.port();
-
         checkNotNull(deviceService.getPort(deviceId, subscriberPortNo),
                      "Invalid connect point:" + connectPoint);
 
-        // Find the subscriber on this connect point
+        if (isSubscriberInstalled(connectPoint)) {
+            log.warn("Subscriber at {} already provisioned or in the process .."
+                    + " not taking any more action", connectPoint);
+            return true;
+        }
+
+        // Find the subscriber config at this connect point
         SubscriberAndDeviceInformation sub = getSubscriber(connectPoint);
         if (sub == null) {
             log.warn("No subscriber found for {}", connectPoint);
@@ -317,6 +322,24 @@
         return true;
     }
 
+    // returns true if subscriber is programmed or in the process of being programmed
+    private boolean isSubscriberInstalled(ConnectPoint connectPoint) {
+        Collection<? extends UniTagInformation> uniTagInformationSet =
+                programmedSubs.get(connectPoint).value();
+        if (!uniTagInformationSet.isEmpty()) {
+            return true;
+        }
+
+        for (SubscriberFlowInfo fi : pendingSubscribers) {
+            if (fi.getDevId().equals(connectPoint.deviceId())
+                    && fi.getUniPort().equals(connectPoint.port())) {
+                return true;
+            }
+        }
+
+        return false;
+    }
+
     private class DeleteEapolInstallSub implements Runnable {
         ConnectPoint cp;
         Port uplinkPort;