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%2FGroupForwarder.java;h=fc6cdc4c1d1638ae33e4ced53b7893eaaac720c0;hb=41119d9698fa4872fc011eeed79e426cc3fe31c6;hp=94c147dbe00f127dbf05db6598e2132cd573e88a;hpb=2f0bb7b74a58dde036e69677e5dba089863d82cf;p=openflowplugin.git diff --git a/applications/forwardingrules-manager/src/main/java/org/opendaylight/openflowplugin/applications/frm/impl/GroupForwarder.java b/applications/forwardingrules-manager/src/main/java/org/opendaylight/openflowplugin/applications/frm/impl/GroupForwarder.java index 94c147dbe0..fc6cdc4c1d 100644 --- a/applications/forwardingrules-manager/src/main/java/org/opendaylight/openflowplugin/applications/frm/impl/GroupForwarder.java +++ b/applications/forwardingrules-manager/src/main/java/org/opendaylight/openflowplugin/applications/frm/impl/GroupForwarder.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,16 +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 java.util.concurrent.Callable; +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; @@ -27,6 +27,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.Add import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.RemoveGroupInputBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.RemoveGroupOutput; import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.UpdateGroupInputBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.UpdateGroupOutput; import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.group.update.OriginalGroupBuilder; 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.GroupId; @@ -45,35 +46,30 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** - * GroupForwarder - * It implements {@link org.opendaylight.controller.md.sal.binding.api.DataTreeChangeListener}} - * for WildCardedPath to {@link Group} and ForwardingRulesCommiter interface for methods: - * add, update and remove {@link Group} processing for - * {@link org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent}. - * + * GroupForwarder It implements + * {@link org.opendaylight.controller.md.sal.binding.api.DataTreeChangeListener} + * for WildCardedPath to {@link Group} and ForwardingRulesCommiter interface for + * methods: add, update and remove {@link Group} processing for + * {@link org.opendaylight.controller.md.sal.binding.api.DataTreeModification}. */ public class GroupForwarder extends AbstractListeningCommiter { private static final Logger LOG = LoggerFactory.getLogger(GroupForwarder.class); - private final DataBroker dataBroker; - private ListenerRegistration listenerRegistration; - public GroupForwarder (final ForwardingRulesManager manager, final DataBroker db) { - super(manager, Group.class); + @SuppressWarnings("IllegalCatch") + public GroupForwarder(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, GroupForwarder.this); - } - }); + listenerRegistration = looper + .loopUntilNoException(() -> db.registerDataTreeChangeListener(treeId, GroupForwarder.this)); } catch (final Exception e) { LOG.warn("FRM Group DataTreeChange listener registration fail!"); LOG.debug("FRM Group DataTreeChange listener registration fail ..", e); @@ -84,41 +80,39 @@ public class GroupForwarder extends AbstractListeningCommiter { @Override public void close() { if (listenerRegistration != null) { - try { - listenerRegistration.close(); - } catch (Exception e) { - LOG.warn("Error by stop FRM GroupChangeListener: {}", e.getMessage()); - LOG.debug("Error by stop FRM GroupChangeListener..", e); - } + listenerRegistration.close(); listenerRegistration = null; } } @Override protected InstanceIdentifier getWildCardPath() { - return InstanceIdentifier.create(Nodes.class).child(Node.class) - .augmentation(FlowCapableNode.class).child(Group.class); + return InstanceIdentifier.create(Nodes.class).child(Node.class).augmentation(FlowCapableNode.class) + .child(Group.class); } @Override public void remove(final InstanceIdentifier identifier, final Group removeDataObj, - final InstanceIdentifier nodeIdent) { + final InstanceIdentifier nodeIdent) { - final Group group = (removeDataObj); + final Group group = removeDataObj; final RemoveGroupInputBuilder builder = new RemoveGroupInputBuilder(group); builder.setNode(new NodeRef(nodeIdent.firstIdentifierOf(Node.class))); builder.setGroupRef(new GroupRef(identifier)); builder.setTransactionUri(new Uri(provider.getNewTransactionId())); - this.provider.getSalGroupService().removeGroup(builder.build()); + + final Future> resultFuture = + this.provider.getSalGroupService().removeGroup(builder.build()); + JdkFutures.addErrorLogging(resultFuture, LOG, "removeGroup"); } - //TODO: Pull this into ForwardingRulesCommiter and override it here + // TODO: Pull this into ForwardingRulesCommiter and override it here @Override - public Future> removeWithResult(final InstanceIdentifier identifier, final Group removeDataObj, - final InstanceIdentifier nodeIdent) { + public Future> removeWithResult(final InstanceIdentifier identifier, + final Group removeDataObj, final InstanceIdentifier nodeIdent) { - final Group group = (removeDataObj); + final Group group = removeDataObj; final RemoveGroupInputBuilder builder = new RemoveGroupInputBuilder(group); builder.setNode(new NodeRef(nodeIdent.firstIdentifierOf(Node.class))); @@ -128,29 +122,29 @@ public class GroupForwarder extends AbstractListeningCommiter { } @Override - public void update(final InstanceIdentifier identifier, - final Group original, final Group update, - final InstanceIdentifier nodeIdent) { + public void update(final InstanceIdentifier identifier, final Group original, final Group update, + final InstanceIdentifier nodeIdent) { - final Group originalGroup = (original); - final Group updatedGroup = (update); + final Group originalGroup = original; + final Group updatedGroup = update; final UpdateGroupInputBuilder builder = new UpdateGroupInputBuilder(); builder.setNode(new NodeRef(nodeIdent.firstIdentifierOf(Node.class))); builder.setGroupRef(new GroupRef(identifier)); builder.setTransactionUri(new Uri(provider.getNewTransactionId())); - builder.setUpdatedGroup((new UpdatedGroupBuilder(updatedGroup)).build()); - builder.setOriginalGroup((new OriginalGroupBuilder(originalGroup)).build()); + builder.setUpdatedGroup(new UpdatedGroupBuilder(updatedGroup).build()); + builder.setOriginalGroup(new OriginalGroupBuilder(originalGroup).build()); - this.provider.getSalGroupService().updateGroup(builder.build()); + final Future> resultFuture = + this.provider.getSalGroupService().updateGroup(builder.build()); + JdkFutures.addErrorLogging(resultFuture, LOG, "updateGroup"); } @Override - public Future> add( - final InstanceIdentifier identifier, final Group addDataObj, - final InstanceIdentifier nodeIdent) { + public Future> add(final InstanceIdentifier identifier, final Group addDataObj, + final InstanceIdentifier nodeIdent) { - final Group group = (addDataObj); + final Group group = addDataObj; final AddGroupInputBuilder builder = new AddGroupInputBuilder(group); builder.setNode(new NodeRef(nodeIdent.firstIdentifierOf(Node.class))); @@ -160,28 +154,30 @@ public class GroupForwarder extends AbstractListeningCommiter { } @Override - public void createStaleMarkEntity(InstanceIdentifier identifier, Group del, InstanceIdentifier nodeIdent) { + public void createStaleMarkEntity(InstanceIdentifier identifier, Group del, + InstanceIdentifier nodeIdent) { LOG.debug("Creating Stale-Mark entry for the switch {} for Group {} ", nodeIdent.toString(), del.toString()); StaleGroup staleGroup = makeStaleGroup(identifier, del, nodeIdent); persistStaleGroup(staleGroup, nodeIdent); } - - private StaleGroup makeStaleGroup(InstanceIdentifier identifier, Group del, InstanceIdentifier nodeIdent){ + private StaleGroup makeStaleGroup(InstanceIdentifier identifier, Group del, + InstanceIdentifier nodeIdent) { StaleGroupBuilder staleGroupBuilder = new StaleGroupBuilder(del); return staleGroupBuilder.setGroupId(del.getGroupId()).build(); } - private void persistStaleGroup(StaleGroup staleGroup, InstanceIdentifier nodeIdent){ + private void persistStaleGroup(StaleGroup staleGroup, InstanceIdentifier nodeIdent) { WriteTransaction writeTransaction = dataBroker.newWriteOnlyTransaction(); - writeTransaction.put(LogicalDatastoreType.CONFIGURATION, getStaleGroupInstanceIdentifier(staleGroup, nodeIdent), staleGroup, false); + writeTransaction.put(LogicalDatastoreType.CONFIGURATION, getStaleGroupInstanceIdentifier(staleGroup, nodeIdent), + staleGroup, false); - CheckedFuture submitFuture = writeTransaction.submit(); + ListenableFuture submitFuture = writeTransaction.submit(); handleStaleGroupResultFuture(submitFuture); } - private void handleStaleGroupResultFuture(CheckedFuture submitFuture) { + private void handleStaleGroupResultFuture(ListenableFuture submitFuture) { Futures.addCallback(submitFuture, new FutureCallback() { @Override public void onSuccess(Void result) { @@ -189,17 +185,17 @@ public class GroupForwarder extends AbstractListeningCommiter { } @Override - public void onFailure(Throwable t) { - LOG.error("Stale Group creation failed {}", t); + public void onFailure(Throwable throwable) { + LOG.error("Stale Group creation failed {}", throwable); } - }); + }, MoreExecutors.directExecutor()); } - private InstanceIdentifier getStaleGroupInstanceIdentifier(StaleGroup staleGroup, InstanceIdentifier nodeIdent) { - return nodeIdent - .child(StaleGroup.class, new StaleGroupKey(new GroupId(staleGroup.getGroupId()))); + private InstanceIdentifier getStaleGroupInstanceIdentifier( + StaleGroup staleGroup, InstanceIdentifier nodeIdent) { + return nodeIdent.child(StaleGroup.class, new StaleGroupKey(new GroupId(staleGroup.getGroupId()))); } } -