X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fforwardingrulesmanager_mdsal%2Fopenflow%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fforwardingrulesmanager_mdsal%2Fconsumer%2Fimpl%2FGroupConsumerImpl.java;h=20ab46d4ad5015a71464176ce2299d87ced25ce9;hb=3b8affd75cc586973d0a98198694a3dc0ae48385;hp=b1aaba4ee5a3d5f183a8213c89406f3b9d177f58;hpb=070eefb2e3ade7d920ea5fe6264ac0f949dbb378;p=controller.git diff --git a/opendaylight/forwardingrulesmanager_mdsal/openflow/src/main/java/org/opendaylight/controller/forwardingrulesmanager_mdsal/consumer/impl/GroupConsumerImpl.java b/opendaylight/forwardingrulesmanager_mdsal/openflow/src/main/java/org/opendaylight/controller/forwardingrulesmanager_mdsal/consumer/impl/GroupConsumerImpl.java index b1aaba4ee5..20ab46d4ad 100644 --- a/opendaylight/forwardingrulesmanager_mdsal/openflow/src/main/java/org/opendaylight/controller/forwardingrulesmanager_mdsal/consumer/impl/GroupConsumerImpl.java +++ b/opendaylight/forwardingrulesmanager_mdsal/openflow/src/main/java/org/opendaylight/controller/forwardingrulesmanager_mdsal/consumer/impl/GroupConsumerImpl.java @@ -1,14 +1,15 @@ package org.opendaylight.controller.forwardingrulesmanager_mdsal.consumer.impl; import java.util.ArrayList; +import java.util.Collection; import java.util.EnumSet; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; -import java.util.Set; import java.util.Map.Entry; +import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; @@ -17,8 +18,8 @@ import org.opendaylight.controller.clustering.services.CacheExistException; import org.opendaylight.controller.clustering.services.IClusterContainerServices; import org.opendaylight.controller.clustering.services.IClusterServices; import org.opendaylight.controller.md.sal.common.api.data.DataCommitHandler; -import org.opendaylight.controller.md.sal.common.api.data.DataModification; import org.opendaylight.controller.md.sal.common.api.data.DataCommitHandler.DataCommitTransaction; +import org.opendaylight.controller.md.sal.common.api.data.DataModification; import org.opendaylight.controller.sal.common.util.Rpcs; import org.opendaylight.controller.sal.core.IContainer; import org.opendaylight.controller.sal.core.Node; @@ -35,6 +36,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.Gro 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; +import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.group.update.UpdatedGroupBuilder; 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; @@ -47,10 +49,10 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; @SuppressWarnings("unused") -public class GroupConsumerImpl { +public class GroupConsumerImpl implements IForwardingRulesManager { protected static final Logger logger = LoggerFactory.getLogger(GroupConsumerImpl.class); - private GroupEventListener groupEventListener = new GroupEventListener(); + private final GroupEventListener groupEventListener = new GroupEventListener(); private Registration groupListener; private SalGroupService groupService; private GroupDataCommitHandler commitHandler; @@ -65,6 +67,7 @@ public class GroupConsumerImpl { private IContainer container; public GroupConsumerImpl() { + InstanceIdentifier path = InstanceIdentifier.builder().node(Groups.class) .node(Group.class).toInstance(); groupService = FRMConsumerImpl.getProviderSession().getRpcService(SalGroupService.class); @@ -280,6 +283,8 @@ public class GroupConsumerImpl { */ private Status updateGroup(InstanceIdentifier path, Group groupUpdateDataObject) { GroupKey groupKey = groupUpdateDataObject.getKey(); + UpdatedGroupBuilder updateGroupBuilder = null; + Status groupOperationStatus = validateGroup(groupUpdateDataObject, FRMUtil.operation.UPDATE); if (!groupOperationStatus.isSuccess()) { @@ -287,18 +292,23 @@ public class GroupConsumerImpl { return groupOperationStatus; } - originalSwGroupView.remove(groupKey); - originalSwGroupView.put(groupKey, groupUpdateDataObject); + if (originalSwGroupView.containsKey(groupKey)) { + originalSwGroupView.remove(groupKey); + originalSwGroupView.put(groupKey, groupUpdateDataObject); + } if (groupUpdateDataObject.isInstall()) { UpdateGroupInputBuilder groupData = new UpdateGroupInputBuilder(); + updateGroupBuilder = new UpdatedGroupBuilder(); + updateGroupBuilder.fieldsFrom(groupUpdateDataObject); + groupData.setUpdatedGroup(updateGroupBuilder.build()); // TODO how to get original group and modified group. if (installedSwGroupView.containsKey(groupKey)) { installedSwGroupView.remove(groupKey); + installedSwGroupView.put(groupKey, groupUpdateDataObject); } - installedSwGroupView.put(groupKey, groupUpdateDataObject); groupService.updateGroup(groupData.build()); } @@ -340,13 +350,15 @@ public class GroupConsumerImpl { for (Entry, Group> entry : transaction.additions.entrySet()) { if (!addGroup(entry.getKey(), entry.getValue()).isSuccess()) { + transaction.additions.remove(entry.getKey()); return Rpcs.getRpcResult(false, null, null); } } - for (@SuppressWarnings("unused") - Entry, Group> entry : transaction.additions.entrySet()) { + + for (Entry, Group> entry : transaction.updates.entrySet()) { if (!updateGroup(entry.getKey(), entry.getValue()).isSuccess()) { + transaction.updates.remove(entry.getKey()); return Rpcs.getRpcResult(false, null, null); } } @@ -362,7 +374,8 @@ public class GroupConsumerImpl { @SuppressWarnings("unchecked") @Override - public DataCommitTransaction, DataObject> requestCommit(DataModification, DataObject> modification) { + public DataCommitTransaction, DataObject> requestCommit( + DataModification, DataObject> modification) { // We should verify transaction System.out.println("Coming in GroupDatacommitHandler"); internalTransaction transaction = new internalTransaction(modification); @@ -474,4 +487,31 @@ public class GroupConsumerImpl { } } + + @Override + public List get() { + + List orderedList = new ArrayList(); + Collection groupList = originalSwGroupView.values(); + for (Iterator iterator = groupList.iterator(); iterator.hasNext();) { + orderedList.add(iterator.next()); + } + return orderedList; + } + + @Override + public DataObject getWithName(String name, Node n) { + + if (this instanceof GroupConsumerImpl) { + Collection groupList = originalSwGroupView.values(); + for (Iterator iterator = groupList.iterator(); iterator.hasNext();) { + Group group = iterator.next(); + if (group.getNode().equals(n) && group.getGroupName().equals(name)) { + + return group; + } + } + } + return null; + } }