Added Meter object accounting

Change-Id: I2a3b88ffd1756b738e197943b3e02771f5729e45
diff --git a/incubator/store/src/main/java/org/onosproject/incubator/store/meter/impl/DistributedMeterStore.java b/incubator/store/src/main/java/org/onosproject/incubator/store/meter/impl/DistributedMeterStore.java
index bc8456e..f343d83 100644
--- a/incubator/store/src/main/java/org/onosproject/incubator/store/meter/impl/DistributedMeterStore.java
+++ b/incubator/store/src/main/java/org/onosproject/incubator/store/meter/impl/DistributedMeterStore.java
@@ -198,6 +198,12 @@
                 new MeterData(v.meter(), reason, v.origin()));
     }
 
+    @Override
+    public void deleteMeterNow(Meter m) {
+        futures.remove(m.id());
+        meters.remove(m.id());
+    }
+
     private class InternalMapEventListener implements MapEventListener<MeterId, MeterData> {
         @Override
         public void event(MapEvent<MeterId, MeterData> event) {
@@ -217,12 +223,12 @@
                                 } else if (data.reason().isPresent() && local.equals(data.origin())) {
                                     MeterStoreResult msr = MeterStoreResult.fail(data.reason().get());
                                     //TODO: No future -> no friend
-                                    futures.remove(data.meter().id()).complete(msr);
+                                    futures.get(data.meter().id()).complete(msr);
                                 }
                                 break;
                             case ADDED:
                             case REMOVED:
-                                if (local.equals(data.origin())) {
+                                if (local.equals(data.origin()) && data.meter().state() == MeterState.PENDING_REMOVE) {
                                     futures.remove(data.meter().id()).complete(MeterStoreResult.success());
                                 }
                                 break;