From: Tony Tkacik Date: Wed, 12 Feb 2014 00:19:23 +0000 (+0100) Subject: Fixed removals from data store did not clean direct-match indexes to child X-Git-Tag: autorelease-tag-v20140601202136_82eb3f9~477^2 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;ds=sidebyside;h=db0081760bd611555397fe110da793dcdc7c98e9;hp=-c;p=controller.git Fixed removals from data store did not clean direct-match indexes to child nodes. - Added deepRemoveStrategy, which checks for all quick indexes if they are removed correctly. Change-Id: Icb7a231ca0308774f76b43ac40ab4eaf47e68937 Signed-off-by: Tony Tkacik --- db0081760bd611555397fe110da793dcdc7c98e9 diff --git a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/impl/SchemaAwareDataStoreAdapter.java b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/impl/SchemaAwareDataStoreAdapter.java index 3e6a8252b7..b32d906d1e 100644 --- a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/impl/SchemaAwareDataStoreAdapter.java +++ b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/impl/SchemaAwareDataStoreAdapter.java @@ -7,6 +7,8 @@ */ package org.opendaylight.controller.sal.dom.broker.impl; +import static com.google.common.base.Preconditions.checkState; + import java.util.ArrayList; import java.util.Comparator; import java.util.Map.Entry; @@ -18,8 +20,8 @@ import org.opendaylight.controller.md.sal.common.api.data.DataReader; import org.opendaylight.controller.md.sal.common.impl.AbstractDataModification; import org.opendaylight.controller.md.sal.common.impl.util.AbstractLockableDelegator; import org.opendaylight.controller.sal.core.api.data.DataStore; +import org.opendaylight.controller.sal.dom.broker.util.YangDataOperations; import org.opendaylight.controller.sal.dom.broker.util.YangSchemaUtils; -import org.opendaylight.yangtools.yang.model.api.SchemaServiceListener; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.RpcResult; import org.opendaylight.yangtools.yang.data.api.CompositeNode; @@ -28,14 +30,13 @@ import org.opendaylight.yangtools.yang.data.api.Node; import org.opendaylight.yangtools.yang.data.impl.CompositeNodeTOImpl; import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; import org.opendaylight.yangtools.yang.model.api.SchemaContext; -import org.opendaylight.controller.sal.dom.broker.util.YangDataOperations; +import org.opendaylight.yangtools.yang.model.api.SchemaServiceListener; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.google.common.base.Predicate; import com.google.common.collect.FluentIterable; - -import static com.google.common.base.Preconditions.*; +import com.google.common.collect.ImmutableSet; public class SchemaAwareDataStoreAdapter extends AbstractLockableDelegator implements // DataStore, // @@ -46,7 +47,7 @@ public class SchemaAwareDataStoreAdapter extends AbstractLockableDelegator reader = new MergeFirstLevelReader(); + private final DataReader reader = new MergeFirstLevelReader(); @Override public boolean containsConfigurationPath(InstanceIdentifier path) { @@ -164,7 +165,6 @@ public class SchemaAwareDataStoreAdapter extends AbstractLockableDelegator original) { - // NOOP for now NormalizedDataModification normalized = new NormalizedDataModification(original); for (Entry entry : original.getUpdatedConfigurationData().entrySet()) { normalized.putConfigurationData(entry.getKey(), entry.getValue()); @@ -173,14 +173,40 @@ public class SchemaAwareDataStoreAdapter extends AbstractLockableDelegator getConfigurationSubpaths(InstanceIdentifier entry) { + // FIXME: This should be replaced by index + Iterable paths = getStoredConfigurationPaths(); + + return getChildrenPaths(entry, paths); + + } + + public Iterable getOperationalSubpaths(InstanceIdentifier entry) { + // FIXME: This should be indexed + Iterable paths = getStoredOperationalPaths(); + + return getChildrenPaths(entry, paths); + } + + private static final Iterable getChildrenPaths(InstanceIdentifier entry, + Iterable paths) { + ImmutableSet.Builder children = ImmutableSet.builder(); + for (InstanceIdentifier potential : paths) { + if (entry.contains(potential)) { + children.add(entry); + } + } + return children.build(); + } + private final Comparator> preparationComparator = new Comparator>() { @Override public int compare(Entry o1, Entry o2) { @@ -282,7 +308,7 @@ public class SchemaAwareDataStoreAdapter extends AbstractLockableDelegator { - private Object identifier; + private final Object identifier; private TransactionStatus status; public NormalizedDataModification(DataModification original) { @@ -291,6 +317,29 @@ public class SchemaAwareDataStoreAdapter extends AbstractLockableDelegator paths = getOperationalSubpaths(entry); + removeOperationalData(entry); + for (InstanceIdentifier potential : paths) { + removeOperationalData(potential); + } + } + + public void deepRemoveConfigurationData(InstanceIdentifier entry) { + Iterable paths = getConfigurationSubpaths(entry); + removeConfigurationData(entry); + for (InstanceIdentifier potential : paths) { + removeConfigurationData(potential); + } + } + @Override public Object getIdentifier() { return this.identifier;