Fixed typo in group service. Modified Group and Meter flow Impl 49/3149/1
authorPrasanna Huddar <prasanna.huddar@ericsson.com>
Wed, 27 Nov 2013 18:55:05 +0000 (00:25 +0530)
committerPrasanna Huddar <prasanna.huddar@ericsson.com>
Wed, 27 Nov 2013 18:56:47 +0000 (00:26 +0530)
Signed-off-by: Prasanna Huddar <prasanna.huddar@ericsson.com>
Change-Id: Ie77e9f6ac4dead4a337dd16cf5cd5c891b5981bd

opendaylight/md-sal/forwardingrules-manager/src/main/java/org/opendaylight/controller/forwardingrulesmanager/consumer/impl/GroupConsumerImpl.java
opendaylight/md-sal/forwardingrules-manager/src/main/java/org/opendaylight/controller/forwardingrulesmanager/consumer/impl/MeterConsumerImpl.java
opendaylight/md-sal/model/model-flow-service/src/main/yang/group-service.yang

index 851e7d9b2685420b5093d8771770a64a3fe52250..714ac89ba13ccf66f3de6e211276d2aace61aba9 100644 (file)
@@ -2,6 +2,7 @@ package org.opendaylight.controller.forwardingrulesmanager.consumer.impl;
 
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.EnumSet;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -33,6 +34,8 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.Add
 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.GroupAdded;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.GroupRemoved;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.GroupUpdated;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.RemoveGroupInputBuilder;
+
 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.SalGroupListener;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.SalGroupService;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.UpdateGroupInputBuilder;
@@ -40,10 +43,12 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.gro
 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupTypes.GroupType;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.Buckets;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.buckets.Bucket;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.config.rev131024.meters.Meter;
 import org.opendaylight.yangtools.concepts.Registration;
 import org.opendaylight.yangtools.yang.binding.DataObject;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.binding.NotificationListener;
+import org.opendaylight.yangtools.yang.common.RpcError;
 import org.opendaylight.yangtools.yang.common.RpcResult;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -225,7 +230,7 @@ public class GroupConsumerImpl implements IForwardingRulesManager {
                 return new Status(StatusCode.BADREQUEST, "Group Name is invalid");
             }
 
-            returnResult = doesGroupEntryExists(group.getKey(), groupName, containerName);
+           /* returnResult = doesGroupEntryExists(group.getKey(), groupName, containerName);
 
             if (FRMUtil.operation.ADD == operation && returnResult) {
                 logger.error("Record with same Group Name exists");
@@ -233,7 +238,7 @@ public class GroupConsumerImpl implements IForwardingRulesManager {
             } else if (!returnResult) {
                 logger.error("Group record does not exist");
                 return new Status(StatusCode.BADREQUEST, "Group record does not exist");
-            }
+            }*/
 
             if (!(group.getGroupType().getIntValue() >= GroupType.GroupAll.getIntValue() && group.getGroupType()
                     .getIntValue() <= GroupType.GroupFf.getIntValue())) {
@@ -259,7 +264,7 @@ public class GroupConsumerImpl implements IForwardingRulesManager {
 
     }
 
-    private boolean doesGroupEntryExists(GroupKey key, String groupName, String containerName) {
+   /* private boolean doesGroupEntryExists(GroupKey key, String groupName, String containerName) {
         if (!originalSwGroupView.containsKey(key)) {
             return false;
         }
@@ -271,8 +276,8 @@ public class GroupConsumerImpl implements IForwardingRulesManager {
                 }
             }
         }
-        return false;
-    }
+        return true;
+    }*/
 
     /**
      * Update Group entries to the southbound plugin/inventory and our internal
@@ -292,11 +297,11 @@ public class GroupConsumerImpl implements IForwardingRulesManager {
             return groupOperationStatus;
         }
 
-        if (originalSwGroupView.containsKey(groupKey)) {
+        /*if (originalSwGroupView.containsKey(groupKey)) {
             originalSwGroupView.remove(groupKey);
             originalSwGroupView.put(groupKey, groupUpdateDataObject);
         }
-
+*/
         if (groupUpdateDataObject.isInstall()) {
             UpdateGroupInputBuilder groupData = new UpdateGroupInputBuilder();
             updateGroupBuilder = new UpdatedGroupBuilder();
@@ -304,10 +309,10 @@ public class GroupConsumerImpl implements IForwardingRulesManager {
             groupData.setUpdatedGroup(updateGroupBuilder.build());
             // TODO how to get original group and modified group.
 
-            if (installedSwGroupView.containsKey(groupKey)) {
+          /*  if (installedSwGroupView.containsKey(groupKey)) {
                 installedSwGroupView.remove(groupKey);
                 installedSwGroupView.put(groupKey, groupUpdateDataObject);
-            }
+            }*/
 
             groupService.updateGroup(groupData.build());
         }
@@ -330,7 +335,7 @@ public class GroupConsumerImpl implements IForwardingRulesManager {
             return groupOperationStatus;
         }
 
-        originalSwGroupView.put(groupKey, groupAddDataObject);
+        //originalSwGroupView.put(groupKey, groupAddDataObject);
 
         if (groupAddDataObject.isInstall()) {
             AddGroupInputBuilder groupData = new AddGroupInputBuilder();
@@ -339,19 +344,49 @@ public class GroupConsumerImpl implements IForwardingRulesManager {
             groupData.setGroupId(groupAddDataObject.getGroupId());
             groupData.setGroupType(groupAddDataObject.getGroupType());
             groupData.setNode(groupAddDataObject.getNode());
-            installedSwGroupView.put(groupKey, groupAddDataObject);
+        //   installedSwGroupView.put(groupKey, groupAddDataObject);
             groupService.addGroup(groupData.build());
         }
 
         return groupOperationStatus;
     }
 
-    private RpcResult<Void> commitToPlugin(internalTransaction transaction) {
+    /**
+     * Remove Group to the southbound plugin and our internal database
+     *
+     * @param path
+     * @param dataObject
+     */
+    private Status removeGroup(InstanceIdentifier<?> path, Group groupRemoveDataObject) {
+        GroupKey groupKey = groupRemoveDataObject.getKey();
+        Status groupOperationStatus = validateGroup(groupRemoveDataObject, FRMUtil.operation.ADD);
+
+        if (!groupOperationStatus.isSuccess()) {
+            logger.error("Group data object validation failed %s" + groupRemoveDataObject.getGroupName());
+            return groupOperationStatus;
+        }
+        //originalSwGroupView.put(groupKey, groupAddDataObject);
+
+        if (groupRemoveDataObject.isInstall()) {
+            RemoveGroupInputBuilder groupData = new RemoveGroupInputBuilder();
+            groupData.setBuckets(groupRemoveDataObject.getBuckets());
+            groupData.setContainerName(groupRemoveDataObject.getContainerName());
+            groupData.setGroupId(groupRemoveDataObject.getGroupId());
+            groupData.setGroupType(groupRemoveDataObject.getGroupType());
+            groupData.setNode(groupRemoveDataObject.getNode());
+        //   installedSwGroupView.put(groupKey, groupAddDataObject);
+            groupService.removeGroup(groupData.build());
+        }
+
+        return groupOperationStatus;
+    }
+    
+    private RpcResult<Void> commitToPlugin(InternalTransaction transaction) {
         for (Entry<InstanceIdentifier<?>, Group> entry : transaction.additions.entrySet()) {
 
             if (!addGroup(entry.getKey(), entry.getValue()).isSuccess()) {
                 transaction.additions.remove(entry.getKey());
-                return Rpcs.getRpcResult(false, null, null);
+                return Rpcs.getRpcResult(false, null, Collections.<RpcError>emptySet());
             }
         }
 
@@ -359,12 +394,18 @@ public class GroupConsumerImpl implements IForwardingRulesManager {
 
             if (!updateGroup(entry.getKey(), entry.getValue()).isSuccess()) {
                 transaction.updates.remove(entry.getKey());
-                return Rpcs.getRpcResult(false, null, null);
+                return Rpcs.getRpcResult(false, null, Collections.<RpcError>emptySet());
             }
         }
 
-        for (InstanceIdentifier<?> removal : transaction.removals) {
-            // removeFlow(removal);
+        for (InstanceIdentifier<?> groupId : transaction.removals) {
+                       DataObject removeValue = transaction.getModification().getOriginalConfigurationData().get(groupId);     
+                
+                       if(removeValue instanceof Group) {
+                           if(!removeGroup(groupId, (Group)removeValue).isSuccess()) {
+                               return Rpcs.getRpcResult(false, null, Collections.<RpcError>emptySet()); 
+                           }             
+                       }
         }
 
         return Rpcs.getRpcResult(true, null, null);
@@ -372,19 +413,18 @@ public class GroupConsumerImpl implements IForwardingRulesManager {
 
     private final class GroupDataCommitHandler implements DataCommitHandler<InstanceIdentifier<?>, DataObject> {
 
-        @SuppressWarnings("unchecked")
         @Override
         public DataCommitTransaction<InstanceIdentifier<?>, DataObject> requestCommit(
                 DataModification<InstanceIdentifier<?>, DataObject> modification) {
             // We should verify transaction
             System.out.println("Coming in GroupDatacommitHandler");
-            internalTransaction transaction = new internalTransaction(modification);
+            InternalTransaction transaction = new InternalTransaction(modification);
             transaction.prepareUpdate();
             return transaction;
         }
     }
 
-    private final class internalTransaction implements DataCommitTransaction<InstanceIdentifier<?>, DataObject> {
+    private final class InternalTransaction implements DataCommitTransaction<InstanceIdentifier<?>, DataObject> {
 
         private final DataModification<InstanceIdentifier<?>, DataObject> modification;
 
@@ -393,7 +433,7 @@ public class GroupConsumerImpl implements IForwardingRulesManager {
             return modification;
         }
 
-        public internalTransaction(DataModification<InstanceIdentifier<?>, DataObject> modification) {
+        public InternalTransaction(DataModification<InstanceIdentifier<?>, DataObject> modification) {
             this.modification = modification;
         }
 
@@ -407,33 +447,31 @@ public class GroupConsumerImpl implements IForwardingRulesManager {
          *
          */
         void prepareUpdate() {
-
-            Set<Entry<InstanceIdentifier<?>, DataObject>> puts = modification.getUpdatedConfigurationData().entrySet();
-            for (Entry<InstanceIdentifier<?>, DataObject> entry : puts) {
+               
+                Set<Entry<InstanceIdentifier<?>, DataObject>> groupAdded = modification.getCreatedConfigurationData().entrySet();
+             for (Entry<InstanceIdentifier<?>, DataObject> entry : groupAdded) {
+                 if (entry.getValue() instanceof Group) {
+                     Group group = (Group) entry.getValue();
+                     additions.put(entry.getKey(), group);                     
+                 }
+
+             }
+
+            Set<Entry<InstanceIdentifier<?>, DataObject>> groupUpdate = modification.getUpdatedConfigurationData().entrySet();
+            for (Entry<InstanceIdentifier<?>, DataObject> entry : groupUpdate) {
                 if (entry.getValue() instanceof Group) {
                     Group group = (Group) entry.getValue();
-                    preparePutEntry(entry.getKey(), group);
+                    ///will be fixed once getUpdatedConfigurationData returns only updated data not created data with it.
+                    if (additions.containsKey(entry.getKey())) {
+                       updates.put(entry.getKey(), group);
+                    }
                 }
 
             }
 
             removals = modification.getRemovedConfigurationData();
         }
-
-        private void preparePutEntry(InstanceIdentifier<?> key, Group group) {
-
-            Group original = originalSwGroupView.get(key);
-            if (original != null) {
-                // It is update for us
-
-                updates.put(key, group);
-            } else {
-                // It is addition for us
-
-                additions.put(key, group);
-            }
-        }
-
+        
         /**
          * We are OK to go with execution of plan
          *
@@ -457,7 +495,7 @@ public class GroupConsumerImpl implements IForwardingRulesManager {
             // NOOP - we did not modified any internal state during
             // requestCommit phase
             // return Rpcs.getRpcResult(true, null, Collections.emptySet());
-            return Rpcs.getRpcResult(true, null, null);
+            return Rpcs.getRpcResult(true, null, Collections.<RpcError>emptySet());
 
         }
 
index bd0ceb3fea8011aaa575dea0e71e4cbb8a1032c9..483b9a47196580a2b16c9e0c63b2e41be7a40e9f 100644 (file)
@@ -2,6 +2,7 @@ package org.opendaylight.controller.forwardingrulesmanager.consumer.impl;
 
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.EnumSet;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -33,6 +34,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.Add
 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.MeterAdded;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.MeterRemoved;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.MeterUpdated;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.RemoveMeterInputBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.SalMeterListener;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.SalMeterService;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.UpdateMeterInputBuilder;
@@ -45,6 +47,7 @@ import org.opendaylight.yangtools.concepts.Registration;
 import org.opendaylight.yangtools.yang.binding.DataObject;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.binding.NotificationListener;
+import org.opendaylight.yangtools.yang.common.RpcError;
 import org.opendaylight.yangtools.yang.common.RpcResult;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -57,13 +60,17 @@ public class MeterConsumerImpl implements IForwardingRulesManager {
     private MeterDataCommitHandler commitHandler;
 
     private ConcurrentMap<MeterKey, Meter> originalSwMeterView;
+    @SuppressWarnings("unused")
     private ConcurrentMap<MeterKey, Meter> installedSwMeterView;
-
+    @SuppressWarnings("unused")
     private ConcurrentMap<Node, List<Meter>> nodeMeters;
+    @SuppressWarnings("unused")
     private ConcurrentMap<MeterKey, Meter> inactiveMeters;
+    @SuppressWarnings("unused")
+    private IContainer container;
 
     private IClusterContainerServices clusterMeterContainerService = null;
-    private IContainer container;
+    
 
     public MeterConsumerImpl() {
         InstanceIdentifier<? extends DataObject> path = InstanceIdentifier.builder(Meters.class).child(Meter.class)
@@ -218,11 +225,11 @@ public class MeterConsumerImpl implements IForwardingRulesManager {
                 meterBuilder.setMeterBandHeaders(meterAddDataObject.getMeterBandHeaders());
                 meterBuilder.setMeterId(meterAddDataObject.getMeterId());
                 meterBuilder.setNode(meterAddDataObject.getNode());
-                originalSwMeterView.put(meterKey, meterAddDataObject);
+               // originalSwMeterView.put(meterKey, meterAddDataObject);
                 meterService.addMeter(meterBuilder.build());
             }
 
-            originalSwMeterView.put(meterKey, meterAddDataObject);
+           // originalSwMeterView.put(meterKey, meterAddDataObject);
         } else {
             return new Status(StatusCode.BADREQUEST, "Meter Key or attribute validation failed");
         }
@@ -243,10 +250,10 @@ public class MeterConsumerImpl implements IForwardingRulesManager {
 
         if (null != meterKey && validateMeter(meterUpdateDataObject, FRMUtil.operation.UPDATE).isSuccess()) {
 
-            if (originalSwMeterView.containsKey(meterKey)) {
+           /* if (originalSwMeterView.containsKey(meterKey)) {
                 originalSwMeterView.remove(meterKey);
                 originalSwMeterView.put(meterKey, meterUpdateDataObject);
-            }
+            }*/
 
             if (meterUpdateDataObject.isInstall()) {
                 UpdateMeterInputBuilder updateMeterInputBuilder = new UpdateMeterInputBuilder();
@@ -254,10 +261,10 @@ public class MeterConsumerImpl implements IForwardingRulesManager {
                 updateMeterBuilder.fieldsFrom(meterUpdateDataObject);
                 updateMeterInputBuilder.setUpdatedMeter(updateMeterBuilder.build());
 
-                if (installedSwMeterView.containsKey(meterKey)) {
+              /*  if (installedSwMeterView.containsKey(meterKey)) {
                     installedSwMeterView.remove(meterKey);
                     installedSwMeterView.put(meterKey, meterUpdateDataObject);
-                }
+                }*/
 
                 meterService.updateMeter(updateMeterInputBuilder.build());
             }
@@ -276,18 +283,23 @@ public class MeterConsumerImpl implements IForwardingRulesManager {
      *
      * @param dataObject
      */
-    private Status RemoveMeter(InstanceIdentifier<?> path, Meter meterUpdateDataObject) {
-        MeterKey meterKey = meterUpdateDataObject.getKey();
-
-        if (null != meterKey && validateMeter(meterUpdateDataObject, FRMUtil.operation.ADD).isSuccess()) {
-            if (meterUpdateDataObject.isInstall()) {
-                UpdateMeterInputBuilder updateMeterBuilder = new UpdateMeterInputBuilder();
-
-                installedSwMeterView.put(meterKey, meterUpdateDataObject);
-                meterService.updateMeter(updateMeterBuilder.build());
+    private Status removeMeter(InstanceIdentifier<?> path, Meter meterRemoveDataObject) {
+        MeterKey meterKey = meterRemoveDataObject.getKey();
+
+        if (null != meterKey && validateMeter(meterRemoveDataObject, FRMUtil.operation.DELETE).isSuccess()) {
+            if (meterRemoveDataObject.isInstall()) {
+                RemoveMeterInputBuilder meterBuilder = new RemoveMeterInputBuilder();
+                meterBuilder.setContainerName(meterRemoveDataObject.getContainerName());
+                meterBuilder.setNode(meterRemoveDataObject.getNode());
+                meterBuilder.setFlags(meterRemoveDataObject.getFlags());
+                meterBuilder.setMeterBandHeaders(meterRemoveDataObject.getMeterBandHeaders());
+                meterBuilder.setMeterId(meterRemoveDataObject.getMeterId());
+                meterBuilder.setNode(meterRemoveDataObject.getNode());
+               // originalSwMeterView.put(meterKey, meterAddDataObject);
+                meterService.removeMeter(meterBuilder.build());
             }
 
-            originalSwMeterView.put(meterKey, meterUpdateDataObject);
+           // originalSwMeterView.put(meterKey, meterAddDataObject);
         } else {
             return new Status(StatusCode.BADREQUEST, "Meter Key or attribute validation failed");
         }
@@ -299,7 +311,6 @@ public class MeterConsumerImpl implements IForwardingRulesManager {
         String containerName;
         String meterName;
         Status returnStatus = null;
-        boolean returnResult;
 
         if (null != meter) {
             containerName = meter.getContainerName();
@@ -319,7 +330,7 @@ public class MeterConsumerImpl implements IForwardingRulesManager {
                 return returnStatus;
             }
 
-            returnResult = doesMeterEntryExists(meter.getKey(), meterName, containerName);
+         /*   returnResult = doesMeterEntryExists(meter.getKey(), meterName, containerName);
 
             if (FRMUtil.operation.ADD == operation && returnResult) {
                 logger.error("Record with same Meter Name exists");
@@ -329,7 +340,7 @@ public class MeterConsumerImpl implements IForwardingRulesManager {
                 logger.error("Group record does not exist");
                 returnStatus = new Status(StatusCode.BADREQUEST, "Meter record does not exist");
                 return returnStatus;
-            }
+            }*/
 
             for (int i = 0; i < meter.getMeterBandHeaders().getMeterBandHeader().size(); i++) {
                 if (!meter.getFlags().isMeterBurst()) {
@@ -367,7 +378,7 @@ public class MeterConsumerImpl implements IForwardingRulesManager {
         return new Status(StatusCode.SUCCESS);
     }
 
-    private boolean doesMeterEntryExists(MeterKey key, String meterName, String containerName) {
+    /*private boolean doesMeterEntryExists(MeterKey key, String meterName, String containerName) {
         if (!originalSwMeterView.containsKey(key)) {
             return false;
         }
@@ -380,34 +391,9 @@ public class MeterConsumerImpl implements IForwardingRulesManager {
             }
         }
         return false;
-    }
-
-    private RpcResult<Void> commitToPlugin(internalTransaction transaction) {
-        for (Entry<InstanceIdentifier<?>, Meter> entry : transaction.additions.entrySet()) {
-
-            if (!addMeter(entry.getKey(), entry.getValue()).isSuccess()) {
-                return Rpcs.getRpcResult(false, null, null);
-            }
-        }
-        for (@SuppressWarnings("unused")
-        Entry<InstanceIdentifier<?>, Meter> entry : transaction.updates.entrySet()) {
-
-            if (!updateMeter(entry.getKey(), entry.getValue()).isSuccess()) {
-                return Rpcs.getRpcResult(false, null, null);
-            }
-        }
-
-        for (InstanceIdentifier<?> removal : transaction.removals) {
-            /*
-             * if (!removeMeter(entry.getKey(),entry.getValue()).isSuccess()) {
-             * return Rpcs.getRpcResult(false, null, null); }
-             */
-        }
-
-        return Rpcs.getRpcResult(true, null, null);
-    }
+    }*/
 
-    private final class internalTransaction implements DataCommitTransaction<InstanceIdentifier<?>, DataObject> {
+    private final class InternalTransaction implements DataCommitTransaction<InstanceIdentifier<?>, DataObject> {
 
         private final DataModification<InstanceIdentifier<?>, DataObject> modification;
 
@@ -416,7 +402,7 @@ public class MeterConsumerImpl implements IForwardingRulesManager {
             return modification;
         }
 
-        public internalTransaction(DataModification<InstanceIdentifier<?>, DataObject> modification) {
+        public InternalTransaction(DataModification<InstanceIdentifier<?>, DataObject> modification) {
             this.modification = modification;
         }
 
@@ -430,33 +416,30 @@ public class MeterConsumerImpl implements IForwardingRulesManager {
          *
          */
         void prepareUpdate() {
-
-            Set<Entry<InstanceIdentifier<?>, DataObject>> puts = modification.getUpdatedConfigurationData().entrySet();
-            for (Entry<InstanceIdentifier<?>, DataObject> entry : puts) {
+            
+            Set<Entry<InstanceIdentifier<?>, DataObject>> addMeter = modification.getCreatedConfigurationData().entrySet();
+            for (Entry<InstanceIdentifier<?>, DataObject> entry : addMeter) {
                 if (entry.getValue() instanceof Meter) {
-                    Meter Meter = (Meter) entry.getValue();
-                    preparePutEntry(entry.getKey(), Meter);
+                    Meter meter = (Meter) entry.getValue();
+                    additions.put(entry.getKey(), meter);                    
                 }
 
             }
+            
+            Set<Entry<InstanceIdentifier<?>, DataObject>> updateMeter = modification.getUpdatedConfigurationData().entrySet();
+            for (Entry<InstanceIdentifier<?>, DataObject> entry : updateMeter) {
+                if (entry.getValue() instanceof Meter) {
+                    Meter meter = (Meter) entry.getValue();
+                  ///will be fixed once getUpdatedConfigurationData returns only updated data not created data with it.
+                    if (!additions.containsKey(entry.getKey())) {
+                       updates.put(entry.getKey(), meter);       
+                    }
+                }
+            }
 
             removals = modification.getRemovedConfigurationData();
         }
 
-        private void preparePutEntry(InstanceIdentifier<?> key, Meter meter) {
-
-            Meter original = originalSwMeterView.get(key);
-            if (original != null) {
-                // It is update for us
-
-                updates.put(key, meter);
-            } else {
-                // It is addition for us
-
-                additions.put(key, meter);
-            }
-        }
-
         /**
          * We are OK to go with execution of plan
          *
@@ -480,10 +463,37 @@ public class MeterConsumerImpl implements IForwardingRulesManager {
             // NOOP - we did not modified any internal state during
             // requestCommit phase
             // return Rpcs.getRpcResult(true, null, Collections.emptySet());
-            return Rpcs.getRpcResult(true, null, null);
+            return Rpcs.getRpcResult(true, null, Collections.<RpcError>emptySet());
+
+        }
+
+    }
+    
+    private RpcResult<Void> commitToPlugin(InternalTransaction transaction) {
+        for (Entry<InstanceIdentifier<?>, Meter> entry : transaction.additions.entrySet()) {
+
+            if (!addMeter(entry.getKey(), entry.getValue()).isSuccess()) {
+                return Rpcs.getRpcResult(false, null, Collections.<RpcError>emptySet());
+            }
+        }
+        for (Entry<InstanceIdentifier<?>, Meter> entry : transaction.updates.entrySet()) {
+
+            if (!updateMeter(entry.getKey(), entry.getValue()).isSuccess()) {
+                return Rpcs.getRpcResult(false, null, Collections.<RpcError>emptySet());
+            }
+        }
 
+        for (InstanceIdentifier<?> meterId : transaction.removals) {
+            DataObject removeValue = transaction.getModification().getOriginalConfigurationData().get(meterId);        
+                
+                if(removeValue instanceof Meter) {
+                    if(!removeMeter(meterId, (Meter)removeValue).isSuccess()) {
+                        return Rpcs.getRpcResult(false, null, Collections.<RpcError>emptySet());
+                        }
+                }    
         }
 
+        return Rpcs.getRpcResult(true, null, Collections.<RpcError>emptySet());
     }
 
     private final class MeterDataCommitHandler implements DataCommitHandler<InstanceIdentifier<?>, DataObject> {
@@ -492,7 +502,7 @@ public class MeterConsumerImpl implements IForwardingRulesManager {
                 DataModification<InstanceIdentifier<?>, DataObject> modification) {
             // We should verify transaction
             System.out.println("Coming in MeterDataCommitHandler");
-            internalTransaction transaction = new internalTransaction(modification);
+            InternalTransaction transaction = new InternalTransaction(modification);
             transaction.prepareUpdate();
             return transaction;
         }
index bb010353280b8fa281c0901dde2e8d771f62ac13..b21423b7d4d94d6db1a850a3cbac99bf5547a2d3 100644 (file)
@@ -41,7 +41,7 @@ module sal-group {
 
     rpc remove-group {
         input {
-            uses group-update;
+            uses node-group;
             uses tr:transaction-aware;            
         }
         output {