X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fnetconf%2Fnetconf-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fnetconf%2Fimpl%2Fosgi%2FNetconfOperationRouterImpl.java;h=bc68db85de418d17f287529e2cb551291abb43c6;hb=fdde6f06dc64a4bde7593625fa538ec3241fce37;hp=54deb91837b002b76a7c7f80a6d01ef5ee56e9cc;hpb=863cbb7b2c20ff4ef2d0b97c64d2887e49a9ca4f;p=controller.git diff --git a/opendaylight/netconf/netconf-impl/src/main/java/org/opendaylight/controller/netconf/impl/osgi/NetconfOperationRouterImpl.java b/opendaylight/netconf/netconf-impl/src/main/java/org/opendaylight/controller/netconf/impl/osgi/NetconfOperationRouterImpl.java index 54deb91837..bc68db85de 100644 --- a/opendaylight/netconf/netconf-impl/src/main/java/org/opendaylight/controller/netconf/impl/osgi/NetconfOperationRouterImpl.java +++ b/opendaylight/netconf/netconf-impl/src/main/java/org/opendaylight/controller/netconf/impl/osgi/NetconfOperationRouterImpl.java @@ -7,9 +7,15 @@ */ package org.opendaylight.controller.netconf.impl.osgi; -import com.google.common.base.Preconditions; -import com.google.common.collect.Maps; -import com.google.common.collect.Sets; +import java.util.Collections; +import java.util.HashSet; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.Map; +import java.util.Set; +import java.util.TreeMap; +import java.util.TreeSet; + import org.opendaylight.controller.netconf.api.NetconfDocumentedException; import org.opendaylight.controller.netconf.api.NetconfOperationRouter; import org.opendaylight.controller.netconf.api.NetconfSession; @@ -31,14 +37,9 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.w3c.dom.Document; -import java.util.Collections; -import java.util.HashSet; -import java.util.Iterator; -import java.util.LinkedList; -import java.util.Map; -import java.util.Set; -import java.util.TreeMap; -import java.util.TreeSet; +import com.google.common.base.Preconditions; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; public class NetconfOperationRouterImpl implements NetconfOperationRouter { @@ -53,29 +54,21 @@ public class NetconfOperationRouterImpl implements NetconfOperationRouter { public NetconfOperationRouterImpl(NetconfOperationServiceSnapshot netconfOperationServiceSnapshot, - CapabilityProvider capabilityProvider, - DefaultCommitNotificationProducer commitNotifier) { - - this.netconfOperationServiceSnapshot = netconfOperationServiceSnapshot; + CapabilityProvider capabilityProvider, DefaultCommitNotificationProducer commitNotifier) { - this.capabilityProvider = capabilityProvider; + this.netconfOperationServiceSnapshot = Preconditions.checkNotNull(netconfOperationServiceSnapshot); + this.capabilityProvider = Preconditions.checkNotNull(capabilityProvider); - Set defaultNetconfOperations = Sets.newHashSet(); - defaultNetconfOperations.add(new DefaultGetSchema(capabilityProvider, netconfOperationServiceSnapshot - .getNetconfSessionIdForReporting())); - defaultNetconfOperations.add(new DefaultCloseSession(netconfOperationServiceSnapshot - .getNetconfSessionIdForReporting())); - defaultNetconfOperations.add(new DefaultStartExi( - netconfOperationServiceSnapshot - .getNetconfSessionIdForReporting())); - defaultNetconfOperations.add(new DefaultStopExi( - netconfOperationServiceSnapshot - .getNetconfSessionIdForReporting())); + final String sessionId = netconfOperationServiceSnapshot.getNetconfSessionIdForReporting(); + final Set defaultNetconfOperations = Sets.newHashSet(); + defaultNetconfOperations.add(new DefaultGetSchema(capabilityProvider, sessionId)); + defaultNetconfOperations.add(new DefaultCloseSession(sessionId)); + defaultNetconfOperations.add(new DefaultStartExi(sessionId)); + defaultNetconfOperations.add(new DefaultStopExi(sessionId)); allNetconfOperations = getAllNetconfOperations(defaultNetconfOperations, netconfOperationServiceSnapshot); - DefaultCommit defaultCommit = new DefaultCommit(commitNotifier, capabilityProvider, - netconfOperationServiceSnapshot.getNetconfSessionIdForReporting()); + DefaultCommit defaultCommit = new DefaultCommit(commitNotifier, capabilityProvider, sessionId); Set defaultFilters = Sets. newHashSet(defaultCommit); allSortedFilters = getAllNetconfFilters(defaultFilters, netconfOperationServiceSnapshot); } @@ -102,7 +95,8 @@ public class NetconfOperationRouterImpl implements NetconfOperationRouter { for (NetconfOperationService netconfOperationService : netconfOperationServiceSnapshot.getServices()) { final Set filtersFromService = netconfOperationService.getFilters(); for (NetconfOperationFilter filter : filtersFromService) { - Preconditions.checkState(result.contains(filter) == false, "Filter %s already present", filter); + Preconditions.checkState(result.contains(filter) == false, + "Filter %s already present, all filters so far: %s", filter, result); result.add(filter); } } @@ -116,13 +110,12 @@ public class NetconfOperationRouterImpl implements NetconfOperationRouter { @Override public synchronized Document onNetconfMessage(Document message, NetconfSession session) throws NetconfDocumentedException { - NetconfOperationExecution netconfOperationExecution = null; + NetconfOperationExecution netconfOperationExecution; String messageAsString = XmlUtil.toString(message); try { - netconfOperationExecution = getNetconfOperationWithHighestPriority( - message, session); + netconfOperationExecution = getNetconfOperationWithHighestPriority(message, session); } catch (IllegalArgumentException | IllegalStateException e) { logger.warn("Unable to handle rpc {} on session {}", messageAsString, session, e); @@ -140,8 +133,29 @@ public class NetconfOperationRouterImpl implements NetconfOperationRouter { throw new NetconfDocumentedException(errorMessage, e, NetconfDocumentedException.ErrorType.application, tag, NetconfDocumentedException.ErrorSeverity.error, errorInfo); + } catch (RuntimeException e) { + throw handleUnexpectedEx("Unexpected exception during netconf operation sort", e); } + try { + return executeOperationWithHighestPriority(message, netconfOperationExecution, messageAsString); + } catch (RuntimeException e) { + throw handleUnexpectedEx("Unexpected exception during netconf operation execution", e); + } + } + + private NetconfDocumentedException handleUnexpectedEx(String s, Exception e) throws NetconfDocumentedException { + logger.error(s, e); + + Map info = Maps.newHashMap(); + info.put(NetconfDocumentedException.ErrorSeverity.error.toString(), e.toString()); + return new NetconfDocumentedException("Unexpected error", + NetconfDocumentedException.ErrorType.application, + NetconfDocumentedException.ErrorTag.operation_failed, + NetconfDocumentedException.ErrorSeverity.error, info); + } + + private Document executeOperationWithHighestPriority(Document message, NetconfOperationExecution netconfOperationExecution, String messageAsString) throws NetconfDocumentedException { logger.debug("Forwarding netconf message {} to {}", messageAsString, netconfOperationExecution.operationWithHighestPriority); @@ -167,7 +181,6 @@ public class NetconfOperationRouterImpl implements NetconfOperationRouter { private NetconfOperationExecution getNetconfOperationWithHighestPriority( Document message, NetconfSession session) { - // TODO test TreeMap> sortedPriority = getSortedNetconfOperationsWithCanHandle( message, session);