From 10fd1abb375804bbf514b52c7f49f8b38f21fbbf Mon Sep 17 00:00:00 2001 From: Prasanna Huddar Date: Tue, 3 Dec 2013 19:49:39 +0530 Subject: [PATCH] Fixed as per comments group and meter Signed-off-by: Prasanna Huddar Change-Id: Ib1592784e9441afa4b9989dc65a852ee38edf411 --- .../consumer/impl/FRMConsumerImpl.java | 70 +++++------ .../consumer/impl/GroupConsumerImpl.java | 114 +++++------------- .../consumer/impl/MeterConsumerImpl.java | 114 +++++------------- 3 files changed, 92 insertions(+), 206 deletions(-) diff --git a/opendaylight/md-sal/forwardingrules-manager/src/main/java/org/opendaylight/controller/forwardingrulesmanager/consumer/impl/FRMConsumerImpl.java b/opendaylight/md-sal/forwardingrules-manager/src/main/java/org/opendaylight/controller/forwardingrulesmanager/consumer/impl/FRMConsumerImpl.java index d42e067334..bbe771fd9c 100644 --- a/opendaylight/md-sal/forwardingrules-manager/src/main/java/org/opendaylight/controller/forwardingrulesmanager/consumer/impl/FRMConsumerImpl.java +++ b/opendaylight/md-sal/forwardingrules-manager/src/main/java/org/opendaylight/controller/forwardingrulesmanager/consumer/impl/FRMConsumerImpl.java @@ -29,14 +29,13 @@ public class FRMConsumerImpl extends AbstractBindingAwareProvider implements Com private static NotificationService notificationService; private FlowConsumerImpl flowImplRef; private GroupConsumerImpl groupImplRef; + private MeterConsumerImpl meterImplRef; private static DataProviderService dataProviderService; - - private static IClusterContainerServices clusterContainerService = null; - private static IContainer container; - - @Override + private static IClusterContainerServices clusterContainerService = null; + private static IContainer container; + + @Override public void onSessionInitiated(ProviderContext session) { - FRMConsumerImpl.p_session = session; if (!getDependentModule()) { @@ -56,7 +55,8 @@ public class FRMConsumerImpl extends AbstractBindingAwareProvider implements Com if (null != dataProviderService) { flowImplRef = new FlowConsumerImpl(); - // groupImplRef = new GroupConsumerImpl(); + groupImplRef = new GroupConsumerImpl(); + meterImplRef = new MeterConsumerImpl(); registerWithOSGIConsole(); } else { logger.error("Data Provider Service is down or NULL. " @@ -99,35 +99,32 @@ public class FRMConsumerImpl extends AbstractBindingAwareProvider implements Com BundleContext bundleContext = FrameworkUtil.getBundle(this.getClass()).getBundleContext(); bundleContext.registerService(CommandProvider.class.getName(), this, null); } - - private boolean getDependentModule() { - do { - clusterContainerService = (IClusterContainerServices) ServiceHelper.getGlobalInstance(IClusterContainerServices.class, this); - try { - Thread.sleep(4); - } catch (InterruptedException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } while(clusterContainerService == null); - - do { - - - container = (IContainer) ServiceHelper.getGlobalInstance(IContainer.class, this); - try { - Thread.sleep(5); - } catch (InterruptedException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } while (container == null); - - - return true; - } - + private boolean getDependentModule() { + do { + clusterContainerService = (IClusterContainerServices) ServiceHelper.getGlobalInstance( + IClusterContainerServices.class, this); + try { + Thread.sleep(4); + } catch (InterruptedException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } while (clusterContainerService == null); + + do { + + container = (IContainer) ServiceHelper.getGlobalInstance(IContainer.class, this); + try { + Thread.sleep(5); + } catch (InterruptedException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } while (container == null); + + return true; + } public static DataProviderService getDataProviderService() { return dataProviderService; @@ -138,9 +135,8 @@ public class FRMConsumerImpl extends AbstractBindingAwareProvider implements Com } public GroupConsumerImpl getGroupImplRef() { - return groupImplRef; + return groupImplRef; } - public static ProviderContext getProviderSession() { return p_session; diff --git a/opendaylight/md-sal/forwardingrules-manager/src/main/java/org/opendaylight/controller/forwardingrulesmanager/consumer/impl/GroupConsumerImpl.java b/opendaylight/md-sal/forwardingrules-manager/src/main/java/org/opendaylight/controller/forwardingrulesmanager/consumer/impl/GroupConsumerImpl.java index 381faa41b0..7d16cb5b42 100644 --- a/opendaylight/md-sal/forwardingrules-manager/src/main/java/org/opendaylight/controller/forwardingrulesmanager/consumer/impl/GroupConsumerImpl.java +++ b/opendaylight/md-sal/forwardingrules-manager/src/main/java/org/opendaylight/controller/forwardingrulesmanager/consumer/impl/GroupConsumerImpl.java @@ -58,7 +58,7 @@ public class GroupConsumerImpl implements IForwardingRulesManager { private final GroupEventListener groupEventListener = new GroupEventListener(); private Registration groupListener; private SalGroupService groupService; - private GroupDataCommitHandler commitHandler; + private GroupDataCommitHandler groupCommitHandler; private ConcurrentMap originalSwGroupView; private ConcurrentMap installedSwGroupView; @@ -74,9 +74,6 @@ public class GroupConsumerImpl implements IForwardingRulesManager { InstanceIdentifier path = InstanceIdentifier.builder(Groups.class).toInstance(); groupService = FRMConsumerImpl.getProviderSession().getRpcService(SalGroupService.class); - clusterGroupContainerService = FRMConsumerImpl.getClusterContainerService(); - container = FRMConsumerImpl.getContainer(); - if (!(cacheStartup())) { logger.error("Unanle to allocate/retrieve group cache"); System.out.println("Unable to allocate/retrieve group cache"); @@ -97,8 +94,10 @@ public class GroupConsumerImpl implements IForwardingRulesManager { return; } - commitHandler = new GroupDataCommitHandler(); - FRMConsumerImpl.getDataProviderService().registerCommitHandler(path, commitHandler); + groupCommitHandler = new GroupDataCommitHandler(); + FRMConsumerImpl.getDataProviderService().registerCommitHandler(path, groupCommitHandler); + clusterGroupContainerService = FRMConsumerImpl.getClusterContainerService(); + container = FRMConsumerImpl.getContainer(); } private boolean allocateGroupCaches() { @@ -220,23 +219,13 @@ public class GroupConsumerImpl implements IForwardingRulesManager { logger.error("Container Name is invalid %s" + containerName); return new Status(StatusCode.BADREQUEST, "Container Name is invalid"); } - + groupName = group.getGroupName(); if (!FRMUtil.isNameValid(groupName)) { logger.error("Group Name is invalid %s" + groupName); return new Status(StatusCode.BADREQUEST, "Group Name is invalid"); } - - /* returnResult = doesGroupEntryExists(group.getKey(), groupName, containerName); - - if (FRMUtil.operation.ADD == operation && returnResult) { - logger.error("Record with same Group Name exists"); - return new Status(StatusCode.BADREQUEST, "Group record exists"); - } else if (!returnResult) { - logger.error("Group record does not exist"); - return new Status(StatusCode.BADREQUEST, "Group record does not exist"); - }*/ - + if (!(group.getGroupType().getIntValue() >= GroupTypes.GroupAll.getIntValue() && group.getGroupType() .getIntValue() <= GroupTypes.GroupFf.getIntValue())) { logger.error("Invalid Group type %d" + group.getGroupType().getIntValue()); @@ -258,24 +247,8 @@ public class GroupConsumerImpl implements IForwardingRulesManager { } return new Status(StatusCode.SUCCESS); - } - /* private boolean doesGroupEntryExists(GroupKey key, String groupName, String containerName) { - if (!originalSwGroupView.containsKey(key)) { - return false; - } - - for (ConcurrentMap.Entry entry : originalSwGroupView.entrySet()) { - if (entry.getValue().getGroupName().equals(groupName)) { - if (entry.getValue().getContainerName().equals(containerName)) { - return true; - } - } - } - return true; - }*/ - /** * Update Group entries to the southbound plugin/inventory and our internal * database @@ -293,27 +266,12 @@ public class GroupConsumerImpl implements IForwardingRulesManager { logger.error("Group data object validation failed %s" + groupUpdateDataObject.getGroupName()); return groupOperationStatus; } - - /*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); - }*/ - - groupService.updateGroup(groupData.build()); - } - + + UpdateGroupInputBuilder groupData = new UpdateGroupInputBuilder(); + updateGroupBuilder = new UpdatedGroupBuilder(); + updateGroupBuilder.fieldsFrom(groupUpdateDataObject); + groupData.setUpdatedGroup(updateGroupBuilder.build()); + groupService.updateGroup(groupData.build()); return groupOperationStatus; } @@ -331,20 +289,14 @@ public class GroupConsumerImpl implements IForwardingRulesManager { logger.error("Group data object validation failed %s" + groupAddDataObject.getGroupName()); return groupOperationStatus; } - - //originalSwGroupView.put(groupKey, groupAddDataObject); - - if (groupAddDataObject.isInstall()) { - AddGroupInputBuilder groupData = new AddGroupInputBuilder(); - groupData.setBuckets(groupAddDataObject.getBuckets()); - groupData.setContainerName(groupAddDataObject.getContainerName()); - groupData.setGroupId(groupAddDataObject.getGroupId()); - groupData.setGroupType(groupAddDataObject.getGroupType()); - groupData.setNode(groupAddDataObject.getNode()); - // installedSwGroupView.put(groupKey, groupAddDataObject); - groupService.addGroup(groupData.build()); - } - + + AddGroupInputBuilder groupData = new AddGroupInputBuilder(); + groupData.setBuckets(groupAddDataObject.getBuckets()); + groupData.setContainerName(groupAddDataObject.getContainerName()); + groupData.setGroupId(groupAddDataObject.getGroupId()); + groupData.setGroupType(groupAddDataObject.getGroupType()); + groupData.setNode(groupAddDataObject.getNode()); + groupService.addGroup(groupData.build()); return groupOperationStatus; } @@ -362,19 +314,14 @@ public class GroupConsumerImpl implements IForwardingRulesManager { 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()); - } - + + RemoveGroupInputBuilder groupData = new RemoveGroupInputBuilder(); + groupData.setBuckets(groupRemoveDataObject.getBuckets()); + groupData.setContainerName(groupRemoveDataObject.getContainerName()); + groupData.setGroupId(groupRemoveDataObject.getGroupId()); + groupData.setGroupType(groupRemoveDataObject.getGroupType()); + groupData.setNode(groupRemoveDataObject.getNode()); + groupService.removeGroup(groupData.build()); return groupOperationStatus; } @@ -405,7 +352,7 @@ public class GroupConsumerImpl implements IForwardingRulesManager { } } - return Rpcs.getRpcResult(true, null, null); + return Rpcs.getRpcResult(true, null, Collections.emptySet()); } private final class GroupDataCommitHandler implements DataCommitHandler, DataObject> { @@ -506,7 +453,6 @@ public class GroupConsumerImpl implements IForwardingRulesManager { @Override public void onGroupAdded(GroupAdded notification) { - System.out.println("added Group.........................."); addedGroups.add(notification); } diff --git a/opendaylight/md-sal/forwardingrules-manager/src/main/java/org/opendaylight/controller/forwardingrulesmanager/consumer/impl/MeterConsumerImpl.java b/opendaylight/md-sal/forwardingrules-manager/src/main/java/org/opendaylight/controller/forwardingrulesmanager/consumer/impl/MeterConsumerImpl.java index cef259b395..aa9d572d79 100644 --- a/opendaylight/md-sal/forwardingrules-manager/src/main/java/org/opendaylight/controller/forwardingrulesmanager/consumer/impl/MeterConsumerImpl.java +++ b/opendaylight/md-sal/forwardingrules-manager/src/main/java/org/opendaylight/controller/forwardingrulesmanager/consumer/impl/MeterConsumerImpl.java @@ -39,6 +39,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.Sal import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.SalMeterService; import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.UpdateMeterInputBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.meter.update.UpdatedMeterBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterId; import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.band.type.BandType; import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.band.type.band.type.Drop; import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.band.type.band.type.DscpRemark; @@ -68,15 +69,12 @@ public class MeterConsumerImpl implements IForwardingRulesManager { private ConcurrentMap inactiveMeters; @SuppressWarnings("unused") private IContainer container; - - private IClusterContainerServices clusterMeterContainerService = null; - + private IClusterContainerServices clusterMeterContainerService = null; public MeterConsumerImpl() { InstanceIdentifier path = InstanceIdentifier.builder(Meters.class).toInstance(); meterService = FRMConsumerImpl.getProviderSession().getRpcService(SalMeterService.class); clusterMeterContainerService = FRMConsumerImpl.getClusterContainerService(); - container = FRMConsumerImpl.getContainer(); if (!(cacheStartup())) { @@ -214,22 +212,16 @@ public class MeterConsumerImpl implements IForwardingRulesManager { */ private Status addMeter(InstanceIdentifier path, Meter meterAddDataObject) { MeterKey meterKey = meterAddDataObject.getKey(); - - if (null != meterKey && validateMeter(meterAddDataObject, FRMUtil.operation.ADD).isSuccess()) { - if (meterAddDataObject.isInstall()) { - AddMeterInputBuilder meterBuilder = new AddMeterInputBuilder(); - - meterBuilder.setContainerName(meterAddDataObject.getContainerName()); - meterBuilder.setFlags(meterAddDataObject.getFlags()); - meterBuilder.setMeterBandHeaders(meterAddDataObject.getMeterBandHeaders()); - meterBuilder.setMeterId(meterAddDataObject.getMeterId()); - meterBuilder.setNode(meterAddDataObject.getNode()); - // originalSwMeterView.put(meterKey, meterAddDataObject); - meterService.addMeter(meterBuilder.build()); - } - - // originalSwMeterView.put(meterKey, meterAddDataObject); - } else { + + if (null != meterKey && validateMeter(meterAddDataObject, FRMUtil.operation.ADD).isSuccess()) { + AddMeterInputBuilder meterBuilder = new AddMeterInputBuilder(); + meterBuilder.setContainerName(meterAddDataObject.getContainerName()); + meterBuilder.setFlags(meterAddDataObject.getFlags()); + meterBuilder.setMeterBandHeaders(meterAddDataObject.getMeterBandHeaders()); + meterBuilder.setMeterId(new MeterId(meterAddDataObject.getId())); + meterBuilder.setNode(meterAddDataObject.getNode()); + meterService.addMeter(meterBuilder.build()); + } else { return new Status(StatusCode.BADREQUEST, "Meter Key or attribute validation failed"); } @@ -246,28 +238,12 @@ public class MeterConsumerImpl implements IForwardingRulesManager { private Status updateMeter(InstanceIdentifier path, Meter meterUpdateDataObject) { MeterKey meterKey = meterUpdateDataObject.getKey(); UpdatedMeterBuilder updateMeterBuilder = null; - - if (null != meterKey && validateMeter(meterUpdateDataObject, FRMUtil.operation.UPDATE).isSuccess()) { - - /* if (originalSwMeterView.containsKey(meterKey)) { - originalSwMeterView.remove(meterKey); - originalSwMeterView.put(meterKey, meterUpdateDataObject); - }*/ - - if (meterUpdateDataObject.isInstall()) { - UpdateMeterInputBuilder updateMeterInputBuilder = new UpdateMeterInputBuilder(); - updateMeterBuilder = new UpdatedMeterBuilder(); - updateMeterBuilder.fieldsFrom(meterUpdateDataObject); - updateMeterInputBuilder.setUpdatedMeter(updateMeterBuilder.build()); - - /* if (installedSwMeterView.containsKey(meterKey)) { - installedSwMeterView.remove(meterKey); - installedSwMeterView.put(meterKey, meterUpdateDataObject); - }*/ - - meterService.updateMeter(updateMeterInputBuilder.build()); - } - + + if (null != meterKey && validateMeter(meterUpdateDataObject, FRMUtil.operation.UPDATE).isSuccess()) { UpdateMeterInputBuilder updateMeterInputBuilder = new UpdateMeterInputBuilder(); + updateMeterBuilder = new UpdatedMeterBuilder(); + updateMeterBuilder.fieldsFrom(meterUpdateDataObject); + updateMeterInputBuilder.setUpdatedMeter(updateMeterBuilder.build()); + meterService.updateMeter(updateMeterInputBuilder.build()); } else { return new Status(StatusCode.BADREQUEST, "Meter Key or attribute validation failed"); } @@ -285,20 +261,15 @@ public class MeterConsumerImpl implements IForwardingRulesManager { 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, meterAddDataObject); + if (null != meterKey && validateMeter(meterRemoveDataObject, FRMUtil.operation.DELETE).isSuccess()) { + 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()); + meterService.removeMeter(meterBuilder.build()); } else { return new Status(StatusCode.BADREQUEST, "Meter Key or attribute validation failed"); } @@ -329,18 +300,6 @@ public class MeterConsumerImpl implements IForwardingRulesManager { return returnStatus; } - /* returnResult = doesMeterEntryExists(meter.getKey(), meterName, containerName); - - if (FRMUtil.operation.ADD == operation && returnResult) { - logger.error("Record with same Meter Name exists"); - returnStatus = new Status(StatusCode.BADREQUEST, "Meter record exists"); - return returnStatus; - } else if (!returnResult) { - 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()) { if (0 < meter.getMeterBandHeaders().getMeterBandHeader().get(i).getBurstSize()) { @@ -377,22 +336,7 @@ public class MeterConsumerImpl implements IForwardingRulesManager { return new Status(StatusCode.SUCCESS); } - /*private boolean doesMeterEntryExists(MeterKey key, String meterName, String containerName) { - if (!originalSwMeterView.containsKey(key)) { - return false; - } - - for (Entry entry : originalSwMeterView.entrySet()) { - if (entry.getValue().getMeterName().equals(meterName)) { - if (entry.getValue().getContainerName().equals(containerName)) { - return true; - } - } - } - return false; - }*/ - - private final class InternalTransaction implements DataCommitTransaction, DataObject> { + final class InternalTransaction implements DataCommitTransaction, DataObject> { private final DataModification, DataObject> modification; @@ -500,7 +444,6 @@ public class MeterConsumerImpl implements IForwardingRulesManager { public org.opendaylight.controller.md.sal.common.api.data.DataCommitHandler.DataCommitTransaction, DataObject> requestCommit( DataModification, DataObject> modification) { // We should verify transaction - System.out.println("Coming in MeterDataCommitHandler"); InternalTransaction transaction = new InternalTransaction(modification); transaction.prepareUpdate(); return transaction; @@ -555,6 +498,7 @@ public class MeterConsumerImpl implements IForwardingRulesManager { } } } + return null; } } -- 2.36.6