[VOL-3148] Only one meter creation is attempted for a given bandwidth profile.
Achieved through coordination of subscribers and meters.

Change-Id: I0377633a4ff5f34e817ec53382431d4a74d974c1
diff --git a/app/src/main/java/org/opencord/olt/impl/OltMeterService.java b/app/src/main/java/org/opencord/olt/impl/OltMeterService.java
index 3e3962c..80aae4a 100644
--- a/app/src/main/java/org/opencord/olt/impl/OltMeterService.java
+++ b/app/src/main/java/org/opencord/olt/impl/OltMeterService.java
@@ -157,6 +157,8 @@
     }
 
     void addMeterIdToBpMapping(DeviceId deviceId, MeterId meterId, String bandwidthProfile) {
+        log.debug("adding bp {} to meter {} mapping for device {}",
+                 bandwidthProfile, meterId, deviceId);
         bpInfoToMeter.put(bandwidthProfile, MeterKey.key(deviceId, meterId));
     }
 
@@ -177,8 +179,8 @@
                     meterKeyForDevice.get().meterId(), bandwidthProfile);
             return meterKeyForDevice.get().meterId();
         } else {
-            log.warn("Bandwidth profile '{}' is not currently mapped to a meter",
-                    bandwidthProfile);
+            log.warn("Bandwidth Profile '{}' is not currently mapped to a meter in {}",
+                     bandwidthProfile, bpInfoToMeter.get(bandwidthProfile).value());
             return null;
         }
     }
@@ -215,6 +217,9 @@
                 .withContext(new MeterContext() {
                     @Override
                     public void onSuccess(MeterRequest op) {
+                        log.debug("Meter {} is installed on the device {}",
+                                 meterId, deviceId);
+                        addMeterIdToBpMapping(deviceId, meterIdRef.get(), bpInfo.id());
                         meterFuture.complete(null);
                     }
 
@@ -232,7 +237,6 @@
 
         Meter meter = meterService.submit(meterRequest);
         meterIdRef.set(meter.id());
-        addMeterIdToBpMapping(deviceId, meterIdRef.get(), bpInfo.id());
         log.info("Meter is created. Meter Id {}", meter.id());
         return meter.id();
     }