X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fforwardingrules-manager%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fforwardingrulesmanager%2Fconsumer%2Fimpl%2FMeterConsumerImpl.java;h=aa9d572d79724b27031b3aaa31193ec6d9d2577c;hb=cdeca662c72dd78f39d7503c3c06ccfde9e4c51b;hp=bd0ceb3fea8011aaa575dea0e71e4cbb8a1032c9;hpb=f062dc05cc7caaf0c1811856370f1c9e2f1e5c34;p=controller.git 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 bd0ceb3fea..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 @@ -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,10 +34,12 @@ 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; 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; @@ -45,6 +48,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,20 +61,20 @@ public class MeterConsumerImpl implements IForwardingRulesManager { private MeterDataCommitHandler commitHandler; private ConcurrentMap originalSwMeterView; + @SuppressWarnings("unused") private ConcurrentMap installedSwMeterView; - + @SuppressWarnings("unused") private ConcurrentMap> nodeMeters; + @SuppressWarnings("unused") private ConcurrentMap inactiveMeters; - - private IClusterContainerServices clusterMeterContainerService = null; + @SuppressWarnings("unused") private IContainer container; + private IClusterContainerServices clusterMeterContainerService = null; public MeterConsumerImpl() { - InstanceIdentifier path = InstanceIdentifier.builder(Meters.class).child(Meter.class) - .toInstance(); + InstanceIdentifier path = InstanceIdentifier.builder(Meters.class).toInstance(); meterService = FRMConsumerImpl.getProviderSession().getRpcService(SalMeterService.class); clusterMeterContainerService = FRMConsumerImpl.getClusterContainerService(); - container = FRMConsumerImpl.getContainer(); if (!(cacheStartup())) { @@ -208,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"); } @@ -240,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"); } @@ -276,18 +258,18 @@ 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()); - } - - originalSwMeterView.put(meterKey, meterUpdateDataObject); + private Status removeMeter(InstanceIdentifier path, Meter meterRemoveDataObject) { + MeterKey meterKey = meterRemoveDataObject.getKey(); + + 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"); } @@ -299,7 +281,6 @@ public class MeterConsumerImpl implements IForwardingRulesManager { String containerName; String meterName; Status returnStatus = null; - boolean returnResult; if (null != meter) { containerName = meter.getContainerName(); @@ -319,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()) { @@ -367,47 +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 RpcResult commitToPlugin(internalTransaction transaction) { - for (Entry, Meter> entry : transaction.additions.entrySet()) { - - if (!addMeter(entry.getKey(), entry.getValue()).isSuccess()) { - return Rpcs.getRpcResult(false, null, null); - } - } - for (@SuppressWarnings("unused") - Entry, 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, DataObject> { + final class InternalTransaction implements DataCommitTransaction, DataObject> { private final DataModification, DataObject> modification; @@ -416,7 +345,7 @@ public class MeterConsumerImpl implements IForwardingRulesManager { return modification; } - public internalTransaction(DataModification, DataObject> modification) { + public InternalTransaction(DataModification, DataObject> modification) { this.modification = modification; } @@ -430,33 +359,30 @@ public class MeterConsumerImpl implements IForwardingRulesManager { * */ void prepareUpdate() { - - Set, DataObject>> puts = modification.getUpdatedConfigurationData().entrySet(); - for (Entry, DataObject> entry : puts) { + + Set, DataObject>> addMeter = modification.getCreatedConfigurationData().entrySet(); + for (Entry, 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, DataObject>> updateMeter = modification.getUpdatedConfigurationData().entrySet(); + for (Entry, 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 +406,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.emptySet()); + + } + + } + + private RpcResult commitToPlugin(InternalTransaction transaction) { + for (Entry, Meter> entry : transaction.additions.entrySet()) { + + if (!addMeter(entry.getKey(), entry.getValue()).isSuccess()) { + return Rpcs.getRpcResult(false, null, Collections.emptySet()); + } + } + for (Entry, Meter> entry : transaction.updates.entrySet()) { + + if (!updateMeter(entry.getKey(), entry.getValue()).isSuccess()) { + return Rpcs.getRpcResult(false, null, Collections.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.emptySet()); + } + } } + return Rpcs.getRpcResult(true, null, Collections.emptySet()); } private final class MeterDataCommitHandler implements DataCommitHandler, DataObject> { @@ -491,8 +444,7 @@ 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); + InternalTransaction transaction = new InternalTransaction(modification); transaction.prepareUpdate(); return transaction; } @@ -546,6 +498,7 @@ public class MeterConsumerImpl implements IForwardingRulesManager { } } } + return null; } }