X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=applications%2Fforwardingrules-manager%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fopenflowplugin%2Fapplications%2Ffrm%2Fimpl%2FMeterForwarder.java;h=de170988006cc86e2308c8aba6b9de48979352f5;hb=41119d9698fa4872fc011eeed79e426cc3fe31c6;hp=7571964d6f1c6a9928a323e5d10eb7800e5ebbff;hpb=864f9b901d0afa8267f8d91de83ebca978fb3553;p=openflowplugin.git diff --git a/applications/forwardingrules-manager/src/main/java/org/opendaylight/openflowplugin/applications/frm/impl/MeterForwarder.java b/applications/forwardingrules-manager/src/main/java/org/opendaylight/openflowplugin/applications/frm/impl/MeterForwarder.java index 7571964d6f..de17098800 100644 --- a/applications/forwardingrules-manager/src/main/java/org/opendaylight/openflowplugin/applications/frm/impl/MeterForwarder.java +++ b/applications/forwardingrules-manager/src/main/java/org/opendaylight/openflowplugin/applications/frm/impl/MeterForwarder.java @@ -1,5 +1,5 @@ /** - * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved. + * Copyright (c) 2014, 2017 Cisco Systems, Inc. and others. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0 which accompanies this distribution, @@ -8,14 +8,16 @@ package org.opendaylight.openflowplugin.applications.frm.impl; import com.google.common.base.Preconditions; -import com.google.common.util.concurrent.CheckedFuture; import com.google.common.util.concurrent.FutureCallback; import com.google.common.util.concurrent.Futures; +import com.google.common.util.concurrent.ListenableFuture; +import com.google.common.util.concurrent.MoreExecutors; +import java.util.concurrent.Future; import org.opendaylight.controller.md.sal.binding.api.DataBroker; import org.opendaylight.controller.md.sal.binding.api.DataTreeIdentifier; import org.opendaylight.controller.md.sal.binding.api.WriteTransaction; import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; -import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException; +import org.opendaylight.infrautils.utils.concurrent.JdkFutures; import org.opendaylight.openflowplugin.applications.frm.ForwardingRulesManager; import org.opendaylight.openflowplugin.common.wait.SimpleTaskRetryLooper; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Uri; @@ -28,9 +30,11 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeRef import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node; import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.AddMeterInputBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.AddMeterOutput; import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.RemoveMeterInputBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.RemoveMeterOutput; import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.UpdateMeterInputBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.UpdateMeterOutput; import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.meter.update.OriginalMeterBuilder; 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; @@ -41,41 +45,32 @@ import org.opendaylight.yangtools.yang.common.RpcResult; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.concurrent.Callable; -import java.util.concurrent.Future; - /** - * MeterForwarder - * It implements {@link org.opendaylight.controller.md.sal.binding.api.DataTreeChangeListener}} - * for WildCardedPath to {@link Meter} and ForwardingRulesCommiter interface for methods: - * add, update and remove {@link Meter} processing for - * {@link org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent}. - * - * @author Vaclav Demcak + * MeterForwarder It implements + * {@link org.opendaylight.controller.md.sal.binding.api.DataTreeChangeListener} + * for WildCardedPath to {@link Meter} and ForwardingRulesCommiter interface for + * methods: add, update and remove {@link Meter} processing for + * {@link org.opendaylight.controller.md.sal.binding.api.DataTreeModification}. * */ public class MeterForwarder extends AbstractListeningCommiter { private static final Logger LOG = LoggerFactory.getLogger(MeterForwarder.class); - private final DataBroker dataBroker; - private ListenerRegistration listenerRegistration; - public MeterForwarder (final ForwardingRulesManager manager, final DataBroker db) { - super(manager, Meter.class); + @SuppressWarnings("IllegalCatch") + public MeterForwarder(final ForwardingRulesManager manager, final DataBroker db) { + super(manager); dataBroker = Preconditions.checkNotNull(db, "DataBroker can not be null!"); - final DataTreeIdentifier treeId = new DataTreeIdentifier<>(LogicalDatastoreType.CONFIGURATION, getWildCardPath()); + final DataTreeIdentifier treeId = new DataTreeIdentifier<>(LogicalDatastoreType.CONFIGURATION, + getWildCardPath()); try { SimpleTaskRetryLooper looper = new SimpleTaskRetryLooper(ForwardingRulesManagerImpl.STARTUP_LOOP_TICK, ForwardingRulesManagerImpl.STARTUP_LOOP_MAX_RETRIES); - listenerRegistration = looper.loopUntilNoException(new Callable>() { - @Override - public ListenerRegistration call() throws Exception { - return db.registerDataTreeChangeListener(treeId, MeterForwarder.this); - } - }); + listenerRegistration = looper + .loopUntilNoException(() -> db.registerDataTreeChangeListener(treeId, MeterForwarder.this)); } catch (final Exception e) { LOG.warn("FRM Meter DataTreeChange listener registration fail!"); LOG.debug("FRM Meter DataTreeChange listener registration fail ..", e); @@ -86,38 +81,35 @@ public class MeterForwarder extends AbstractListeningCommiter { @Override public void close() { if (listenerRegistration != null) { - try { - listenerRegistration.close(); - } catch (Exception e) { - LOG.warn("Error by stop FRM MeterChangeListener.{}", e.getMessage()); - LOG.debug("Error by stop FRM MeterChangeListener..", e); - } + listenerRegistration.close(); listenerRegistration = null; } } @Override protected InstanceIdentifier getWildCardPath() { - return InstanceIdentifier.create(Nodes.class).child(Node.class) - .augmentation(FlowCapableNode.class).child(Meter.class); + return InstanceIdentifier.create(Nodes.class).child(Node.class).augmentation(FlowCapableNode.class) + .child(Meter.class); } @Override public void remove(final InstanceIdentifier identifier, final Meter removeDataObj, - final InstanceIdentifier nodeIdent) { + final InstanceIdentifier nodeIdent) { final RemoveMeterInputBuilder builder = new RemoveMeterInputBuilder(removeDataObj); builder.setNode(new NodeRef(nodeIdent.firstIdentifierOf(Node.class))); builder.setMeterRef(new MeterRef(identifier)); builder.setTransactionUri(new Uri(provider.getNewTransactionId())); - this.provider.getSalMeterService().removeMeter(builder.build()); - } + final Future> resultFuture = + this.provider.getSalMeterService().removeMeter(builder.build()); + JdkFutures.addErrorLogging(resultFuture, LOG, "removeMeter"); + } @Override - public Future> removeWithResult(final InstanceIdentifier identifier, final Meter removeDataObj, - final InstanceIdentifier nodeIdent) { + public Future> removeWithResult(final InstanceIdentifier identifier, + final Meter removeDataObj, final InstanceIdentifier nodeIdent) { final RemoveMeterInputBuilder builder = new RemoveMeterInputBuilder(removeDataObj); @@ -128,57 +120,57 @@ public class MeterForwarder extends AbstractListeningCommiter { } @Override - public void update(final InstanceIdentifier identifier, - final Meter original, final Meter update, - final InstanceIdentifier nodeIdent) { + public void update(final InstanceIdentifier identifier, final Meter original, final Meter update, + final InstanceIdentifier nodeIdent) { final UpdateMeterInputBuilder builder = new UpdateMeterInputBuilder(); builder.setNode(new NodeRef(nodeIdent.firstIdentifierOf(Node.class))); builder.setMeterRef(new MeterRef(identifier)); builder.setTransactionUri(new Uri(provider.getNewTransactionId())); - builder.setUpdatedMeter((new UpdatedMeterBuilder(update)).build()); - builder.setOriginalMeter((new OriginalMeterBuilder(original)).build()); + builder.setUpdatedMeter(new UpdatedMeterBuilder(update).build()); + builder.setOriginalMeter(new OriginalMeterBuilder(original).build()); - this.provider.getSalMeterService().updateMeter(builder.build()); + final Future> resultFuture = + this.provider.getSalMeterService().updateMeter(builder.build()); + JdkFutures.addErrorLogging(resultFuture, LOG, "updateMeter"); } @Override - public void add(final InstanceIdentifier identifier, final Meter addDataObj, - final InstanceIdentifier nodeIdent) { + public Future> add(final InstanceIdentifier identifier, final Meter addDataObj, + final InstanceIdentifier nodeIdent) { final AddMeterInputBuilder builder = new AddMeterInputBuilder(addDataObj); builder.setNode(new NodeRef(nodeIdent.firstIdentifierOf(Node.class))); builder.setMeterRef(new MeterRef(identifier)); builder.setTransactionUri(new Uri(provider.getNewTransactionId())); - this.provider.getSalMeterService().addMeter(builder.build()); + return this.provider.getSalMeterService().addMeter(builder.build()); } @Override - public void createStaleMarkEntity(InstanceIdentifier identifier, Meter del, InstanceIdentifier nodeIdent) { + public void createStaleMarkEntity(InstanceIdentifier identifier, Meter del, + InstanceIdentifier nodeIdent) { LOG.debug("Creating Stale-Mark entry for the switch {} for meter {} ", nodeIdent.toString(), del.toString()); - StaleMeter staleMeter = makeStaleMeter(identifier, del, nodeIdent); + StaleMeter staleMeter = makeStaleMeter(del); persistStaleMeter(staleMeter, nodeIdent); } - private StaleMeter makeStaleMeter(InstanceIdentifier identifier, Meter del, InstanceIdentifier nodeIdent){ + private StaleMeter makeStaleMeter(Meter del) { StaleMeterBuilder staleMeterBuilder = new StaleMeterBuilder(del); return staleMeterBuilder.setMeterId(del.getMeterId()).build(); - } - private void persistStaleMeter(StaleMeter staleMeter, InstanceIdentifier nodeIdent){ + private void persistStaleMeter(StaleMeter staleMeter, InstanceIdentifier nodeIdent) { WriteTransaction writeTransaction = dataBroker.newWriteOnlyTransaction(); - writeTransaction.put(LogicalDatastoreType.CONFIGURATION, getStaleMeterInstanceIdentifier(staleMeter, nodeIdent), staleMeter, false); + writeTransaction.put(LogicalDatastoreType.CONFIGURATION, getStaleMeterInstanceIdentifier(staleMeter, nodeIdent), + staleMeter, false); - CheckedFuture submitFuture = writeTransaction.submit(); + ListenableFuture submitFuture = writeTransaction.submit(); handleStaleMeterResultFuture(submitFuture); - - } - private void handleStaleMeterResultFuture(CheckedFuture submitFuture){ + private void handleStaleMeterResultFuture(ListenableFuture submitFuture) { Futures.addCallback(submitFuture, new FutureCallback() { @Override public void onSuccess(Void result) { @@ -186,19 +178,15 @@ public class MeterForwarder extends AbstractListeningCommiter { } @Override - public void onFailure(Throwable t) { - LOG.error("Stale Meter creation failed {}", t); + public void onFailure(Throwable throwable) { + LOG.error("Stale Meter creation failed {}", throwable); } - }); - - + }, MoreExecutors.directExecutor()); } - - private InstanceIdentifier getStaleMeterInstanceIdentifier(StaleMeter staleMeter, InstanceIdentifier nodeIdent) { - return nodeIdent - .child(StaleMeter.class, new StaleMeterKey(new MeterId(staleMeter.getMeterId()))); + private InstanceIdentifier getStaleMeterInstanceIdentifier( + StaleMeter staleMeter, InstanceIdentifier nodeIdent) { + return nodeIdent.child(StaleMeter.class, new StaleMeterKey(new MeterId(staleMeter.getMeterId()))); } - } -