X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fprotocol_plugins%2Fopenflow%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fprotocol_plugin%2Fopenflow%2Finternal%2FFlowProgrammerNotifier.java;h=dfa2026cddc041ea08b040c33b50ca31de0cc8ca;hb=34fc95a8574f5b8344e5c3b1000c9459517238c2;hp=594164ddcf800948197df5a9fc87159c84a03d1f;hpb=286d94196561feb6de722b2c21a52245ae36e213;p=controller.git diff --git a/opendaylight/protocol_plugins/openflow/src/main/java/org/opendaylight/controller/protocol_plugin/openflow/internal/FlowProgrammerNotifier.java b/opendaylight/protocol_plugins/openflow/src/main/java/org/opendaylight/controller/protocol_plugin/openflow/internal/FlowProgrammerNotifier.java index 594164ddcf..dfa2026cdd 100644 --- a/opendaylight/protocol_plugins/openflow/src/main/java/org/opendaylight/controller/protocol_plugin/openflow/internal/FlowProgrammerNotifier.java +++ b/opendaylight/protocol_plugins/openflow/src/main/java/org/opendaylight/controller/protocol_plugin/openflow/internal/FlowProgrammerNotifier.java @@ -10,6 +10,7 @@ package org.opendaylight.controller.protocol_plugin.openflow.internal; import org.apache.felix.dm.Component; import org.opendaylight.controller.protocol_plugin.openflow.IFlowProgrammerNotifier; +import org.opendaylight.controller.sal.connection.IPluginOutConnectionService; import org.opendaylight.controller.sal.core.Node; import org.opendaylight.controller.sal.flowprogrammer.Flow; import org.opendaylight.controller.sal.flowprogrammer.IPluginOutFlowProgrammerService; @@ -24,6 +25,7 @@ public class FlowProgrammerNotifier implements IFlowProgrammerNotifier { protected static final Logger logger = LoggerFactory .getLogger(FlowProgrammerNotifier.class); private IPluginOutFlowProgrammerService salNotifier; + private IPluginOutConnectionService connectionOutService; public FlowProgrammerNotifier() { salNotifier = null; @@ -37,7 +39,7 @@ public class FlowProgrammerNotifier implements IFlowProgrammerNotifier { * Function called by the dependency manager when at least one dependency * become unsatisfied or when the component is shutting down because for * example bundle is being stopped. - * + * */ void destroy() { logger.debug("DESTROY called!"); @@ -46,7 +48,7 @@ public class FlowProgrammerNotifier implements IFlowProgrammerNotifier { /** * Function called by dependency manager after "init ()" is called and after * the services provided by the class are registered in the service registry - * + * */ void start() { logger.debug("START called!"); @@ -56,7 +58,7 @@ public class FlowProgrammerNotifier implements IFlowProgrammerNotifier { * Function called by the dependency manager before the services exported by * the component are unregistered, this will be followed by a "destroy ()" * calls - * + * */ void stop() { logger.debug("STOP called!"); @@ -76,6 +78,11 @@ public class FlowProgrammerNotifier implements IFlowProgrammerNotifier { @Override public void flowRemoved(Node node, Flow flow) { + if (!connectionOutService.isLocal(node)) { + logger.debug("flow removed will not be notified in a non-master controller for node "+node); + return; + } + if (salNotifier != null) { salNotifier.flowRemoved(node, flow); } else { @@ -83,4 +90,28 @@ public class FlowProgrammerNotifier implements IFlowProgrammerNotifier { } } + @Override + public void flowErrorReported(Node node, long rid, Object err) { + if (!connectionOutService.isLocal(node)) { + logger.debug("flow error will not be notified in a non-master controller for node "+node); + return; + } + + if (salNotifier != null) { + salNotifier.flowErrorReported(node, rid, err); + } else { + logger.warn("Unable to relay switch error message to upper layer"); + } + } + + void setIPluginOutConnectionService(IPluginOutConnectionService s) { + connectionOutService = s; + } + + void unsetIPluginOutConnectionService(IPluginOutConnectionService s) { + if (connectionOutService == s) { + connectionOutService = null; + } + } + }