X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fnetconf%2Fconfig-persister-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fnetconf%2Fpersist%2Fimpl%2FCapabilityStrippingConfigSnapshotHolder.java;h=eac58cbd7f298b97d02603b972e8f3ff4c004000;hp=d9c5dfadede5a02bcd7d6c0f91fffccda499a14f;hb=8d9cdd0223be6d550d6f44dcb42fe7366bce3cf9;hpb=b5d0a1c60d3ff26cb4d7ecf45ee5fc0f95636c19 diff --git a/opendaylight/netconf/config-persister-impl/src/main/java/org/opendaylight/controller/netconf/persist/impl/CapabilityStrippingConfigSnapshotHolder.java b/opendaylight/netconf/config-persister-impl/src/main/java/org/opendaylight/controller/netconf/persist/impl/CapabilityStrippingConfigSnapshotHolder.java index d9c5dfaded..eac58cbd7f 100644 --- a/opendaylight/netconf/config-persister-impl/src/main/java/org/opendaylight/controller/netconf/persist/impl/CapabilityStrippingConfigSnapshotHolder.java +++ b/opendaylight/netconf/config-persister-impl/src/main/java/org/opendaylight/controller/netconf/persist/impl/CapabilityStrippingConfigSnapshotHolder.java @@ -5,9 +5,16 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ + package org.opendaylight.controller.netconf.persist.impl; import com.google.common.annotations.VisibleForTesting; +import java.util.Collections; +import java.util.HashSet; +import java.util.Map.Entry; +import java.util.Set; +import java.util.SortedSet; +import java.util.TreeSet; import org.opendaylight.controller.config.persist.api.ConfigSnapshotHolder; import org.opendaylight.controller.netconf.util.xml.XmlElement; import org.opendaylight.controller.netconf.util.xml.XmlUtil; @@ -16,75 +23,54 @@ import org.slf4j.LoggerFactory; import org.w3c.dom.Attr; import org.w3c.dom.Element; -import java.util.Collections; -import java.util.HashSet; -import java.util.Iterator; -import java.util.Map.Entry; -import java.util.Set; -import java.util.SortedSet; -import java.util.TreeSet; -import java.util.regex.Pattern; - -import static com.google.common.base.Preconditions.checkState; - +/** + * Inspects snapshot xml to be stored, remove all capabilities that are not referenced by it. + * Useful when persisting current configuration. + */ public class CapabilityStrippingConfigSnapshotHolder implements ConfigSnapshotHolder { - private static final Logger logger = LoggerFactory.getLogger(CapabilityStrippingConfigSnapshotHolder.class); + private static final Logger LOG = LoggerFactory.getLogger(CapabilityStrippingConfigSnapshotHolder.class); private final String configSnapshot; private final StripCapabilitiesResult stripCapabilitiesResult; - public CapabilityStrippingConfigSnapshotHolder(Element snapshot, Set capabilities, Pattern ignoredMissingCapabilityRegex) { + public CapabilityStrippingConfigSnapshotHolder(Element snapshot, Set capabilities) { final XmlElement configElement = XmlElement.fromDomElement(snapshot); configSnapshot = XmlUtil.toString(configElement.getDomElement()); - stripCapabilitiesResult = stripCapabilities(configElement, capabilities, ignoredMissingCapabilityRegex); + stripCapabilitiesResult = stripCapabilities(configElement, capabilities); } private static class StripCapabilitiesResult { - private final SortedSet requiredCapabilities, missingNamespaces; + private final SortedSet requiredCapabilities, obsoleteCapabilities; - private StripCapabilitiesResult(SortedSet requiredCapabilities, SortedSet missingNamespaces) { + private StripCapabilitiesResult(SortedSet requiredCapabilities, SortedSet obsoleteCapabilities) { this.requiredCapabilities = Collections.unmodifiableSortedSet(requiredCapabilities); - this.missingNamespaces = Collections.unmodifiableSortedSet(missingNamespaces); + this.obsoleteCapabilities = Collections.unmodifiableSortedSet(obsoleteCapabilities); } } @VisibleForTesting - static StripCapabilitiesResult stripCapabilities(XmlElement configElement, Set allCapabilitiesFromHello, - Pattern ignoredMissingCapabilityRegex) { + static StripCapabilitiesResult stripCapabilities(XmlElement configElement, Set allCapabilitiesFromHello) { // collect all namespaces Set foundNamespacesInXML = getNamespaces(configElement); - logger.trace("All capabilities {}\nFound namespaces in XML {}", allCapabilitiesFromHello, foundNamespacesInXML); + LOG.trace("All capabilities {}\nFound namespaces in XML {}", allCapabilitiesFromHello, foundNamespacesInXML); // required are referenced both in xml and hello SortedSet requiredCapabilities = new TreeSet<>(); // can be removed - Set obsoleteCapabilities = new HashSet<>(); - // are in xml but not in hello - SortedSet missingNamespaces = new TreeSet<>(foundNamespacesInXML); + SortedSet obsoleteCapabilities = new TreeSet<>(); for (String capability : allCapabilitiesFromHello) { String namespace = capability.replaceAll("\\?.*",""); if (foundNamespacesInXML.contains(namespace)) { requiredCapabilities.add(capability); - checkState(missingNamespaces.remove(namespace)); } else { obsoleteCapabilities.add(capability); } } - logger.trace("Required capabilities {}, \nObsolete capabilities {}", + LOG.trace("Required capabilities {}, \nObsolete capabilities {}", requiredCapabilities, obsoleteCapabilities); - for(Iterator iterator = missingNamespaces.iterator();iterator.hasNext(); ){ - String capability = iterator.next(); - if (ignoredMissingCapabilityRegex.matcher(capability).matches()){ - logger.trace("Ignoring missing capability {}", capability); - iterator.remove(); - } - } - if (missingNamespaces.size() > 0) { - logger.warn("Some capabilities are missing: {}", missingNamespaces); - } - return new StripCapabilitiesResult(requiredCapabilities, missingNamespaces); + return new StripCapabilitiesResult(requiredCapabilities, obsoleteCapabilities); } static Set getNamespaces(XmlElement element){ @@ -94,7 +80,6 @@ public class CapabilityStrippingConfigSnapshotHolder implements ConfigSnapshotHo result.add(attribute.getValue().getValue()); } } - //element.getAttributes() for(XmlElement child: element.getChildElements()) { result.addAll(getNamespaces(child)); } @@ -107,8 +92,8 @@ public class CapabilityStrippingConfigSnapshotHolder implements ConfigSnapshotHo } @VisibleForTesting - Set getMissingNamespaces(){ - return stripCapabilitiesResult.missingNamespaces; + Set getObsoleteCapabilities(){ + return stripCapabilitiesResult.obsoleteCapabilities; } @Override