From: Tony Tkacik Date: Fri, 23 May 2014 14:09:24 +0000 (+0000) Subject: Merge "BUG-509: introduce Version concept" X-Git-Tag: autorelease-tag-v20140601202136_82eb3f9~30 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=commitdiff_plain;h=510561642a3d699673140da8879d4eb5bc88534e;hp=5083ffe044b253021c91bc90b61f9af7d24f226c Merge "BUG-509: introduce Version concept" --- diff --git a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/tree/data/AlwaysFailOperation.java b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/tree/data/AlwaysFailOperation.java index 7f66f7ff7e..15479be462 100644 --- a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/tree/data/AlwaysFailOperation.java +++ b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/tree/data/AlwaysFailOperation.java @@ -1,11 +1,11 @@ package org.opendaylight.controller.md.sal.dom.store.impl.tree.data; import org.opendaylight.controller.md.sal.dom.store.impl.tree.spi.TreeNode; +import org.opendaylight.controller.md.sal.dom.store.impl.tree.spi.Version; import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier.PathArgument; import com.google.common.base.Optional; -import com.google.common.primitives.UnsignedLong; /** * An implementation of apply operation which fails to do anything, @@ -16,7 +16,7 @@ import com.google.common.primitives.UnsignedLong; final class AlwaysFailOperation implements ModificationApplyOperation { @Override public Optional apply(final ModifiedNode modification, - final Optional storeMeta, final UnsignedLong subtreeVersion) { + final Optional storeMeta, final Version subtreeVersion) { throw new IllegalStateException("Schema Context is not available."); } diff --git a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/tree/data/InMemoryDataTree.java b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/tree/data/InMemoryDataTree.java index ae71ed9adf..d3495b542a 100644 --- a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/tree/data/InMemoryDataTree.java +++ b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/tree/data/InMemoryDataTree.java @@ -101,7 +101,8 @@ final class InMemoryDataTree implements DataTree { rwLock.writeLock().lock(); try { - final Optional newRoot = m.getStrategy().apply(m.getRootModification(), Optional.of(rootNode), StoreUtils.increase(rootNode.getSubtreeVersion())); + final Optional newRoot = m.getStrategy().apply(m.getRootModification(), + Optional.of(rootNode), rootNode.getSubtreeVersion().next()); Preconditions.checkState(newRoot.isPresent(), "Apply strategy failed to produce root node"); return new InMemoryDataTreeCandidate(PUBLIC_ROOT_PATH, root, rootNode, newRoot.get()); } finally { diff --git a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/tree/data/InMemoryDataTreeFactory.java b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/tree/data/InMemoryDataTreeFactory.java index 82ffad507d..4640be43e7 100644 --- a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/tree/data/InMemoryDataTreeFactory.java +++ b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/tree/data/InMemoryDataTreeFactory.java @@ -2,13 +2,12 @@ package org.opendaylight.controller.md.sal.dom.store.impl.tree.data; import org.opendaylight.controller.md.sal.dom.store.impl.tree.DataTreeFactory; import org.opendaylight.controller.md.sal.dom.store.impl.tree.spi.TreeNodeFactory; +import org.opendaylight.controller.md.sal.dom.store.impl.tree.spi.Version; import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier.NodeIdentifier; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.opendaylight.yangtools.yang.data.impl.schema.Builders; import org.opendaylight.yangtools.yang.model.api.SchemaContext; -import com.google.common.primitives.UnsignedLong; - /** * A factory for creating in-memory data trees. */ @@ -24,7 +23,7 @@ public final class InMemoryDataTreeFactory implements DataTreeFactory { final NodeIdentifier root = new NodeIdentifier(SchemaContext.NAME); final NormalizedNode data = Builders.containerBuilder().withNodeIdentifier(root).build(); - return new InMemoryDataTree(TreeNodeFactory.createTreeNode(data, UnsignedLong.ZERO), null); + return new InMemoryDataTree(TreeNodeFactory.createTreeNode(data, Version.initial()), null); } /** diff --git a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/tree/data/InMemoryDataTreeModification.java b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/tree/data/InMemoryDataTreeModification.java index d3e4bf0714..c05ed4b442 100644 --- a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/tree/data/InMemoryDataTreeModification.java +++ b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/tree/data/InMemoryDataTreeModification.java @@ -12,7 +12,6 @@ import java.util.Map.Entry; import javax.annotation.concurrent.GuardedBy; import org.opendaylight.controller.md.sal.dom.store.impl.tree.DataTreeModification; -import org.opendaylight.controller.md.sal.dom.store.impl.tree.StoreUtils; import org.opendaylight.controller.md.sal.dom.store.impl.tree.TreeNodeUtils; import org.opendaylight.controller.md.sal.dom.store.impl.tree.spi.TreeNode; import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier; @@ -109,7 +108,7 @@ final class InMemoryDataTreeModification implements DataTreeModification { try { return resolveModificationStrategy(path).apply(modification, modification.getOriginal(), - StoreUtils.increase(snapshot.getRootNode().getSubtreeVersion())); + snapshot.getRootNode().getSubtreeVersion().next()); } catch (Exception e) { LOG.error("Could not create snapshot for {}:{}", path,modification,e); throw e; diff --git a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/tree/data/ModificationApplyOperation.java b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/tree/data/ModificationApplyOperation.java index a72d4fb579..10f39a8cef 100644 --- a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/tree/data/ModificationApplyOperation.java +++ b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/tree/data/ModificationApplyOperation.java @@ -10,11 +10,11 @@ package org.opendaylight.controller.md.sal.dom.store.impl.tree.data; import org.opendaylight.controller.md.sal.dom.store.impl.tree.DataPreconditionFailedException; import org.opendaylight.controller.md.sal.dom.store.impl.tree.StoreTreeNode; import org.opendaylight.controller.md.sal.dom.store.impl.tree.spi.TreeNode; +import org.opendaylight.controller.md.sal.dom.store.impl.tree.spi.Version; import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier.PathArgument; import com.google.common.base.Optional; -import com.google.common.primitives.UnsignedLong; /** * @@ -58,7 +58,7 @@ interface ModificationApplyOperation extends StoreTreeNode apply(ModifiedNode modification, Optional storeMeta, UnsignedLong subtreeVersion); + Optional apply(ModifiedNode modification, Optional storeMeta, Version subtreeVersion); /** * diff --git a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/tree/data/NormalizedNodeContainerModificationStrategy.java b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/tree/data/NormalizedNodeContainerModificationStrategy.java index c5037bc0c6..3a3af5ecab 100644 --- a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/tree/data/NormalizedNodeContainerModificationStrategy.java +++ b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/tree/data/NormalizedNodeContainerModificationStrategy.java @@ -19,6 +19,7 @@ import org.opendaylight.controller.md.sal.dom.store.impl.tree.data.ValueNodeModi import org.opendaylight.controller.md.sal.dom.store.impl.tree.spi.MutableTreeNode; import org.opendaylight.controller.md.sal.dom.store.impl.tree.spi.TreeNode; import org.opendaylight.controller.md.sal.dom.store.impl.tree.spi.TreeNodeFactory; +import org.opendaylight.controller.md.sal.dom.store.impl.tree.spi.Version; import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier.NodeIdentifier; import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier.NodeIdentifierWithPredicates; @@ -46,7 +47,6 @@ import org.opendaylight.yangtools.yang.model.api.ListSchemaNode; import com.google.common.base.Optional; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Iterables; -import com.google.common.primitives.UnsignedLong; abstract class NormalizedNodeContainerModificationStrategy extends SchemaAwareApplyOperation { @@ -95,10 +95,10 @@ abstract class NormalizedNodeContainerModificationStrategy extends SchemaAwareAp @Override protected TreeNode applyWrite(final ModifiedNode modification, - final Optional currentMeta, final UnsignedLong subtreeVersion) { - final UnsignedLong nodeVersion; + final Optional currentMeta, final Version subtreeVersion) { + final Version nodeVersion; if (currentMeta.isPresent()) { - nodeVersion = StoreUtils.increase(currentMeta.get().getVersion()); + nodeVersion = currentMeta.get().getVersion().next(); } else { nodeVersion = subtreeVersion; } @@ -132,7 +132,7 @@ abstract class NormalizedNodeContainerModificationStrategy extends SchemaAwareAp @SuppressWarnings({ "rawtypes", "unchecked" }) private TreeNode mutateChildren(final MutableTreeNode meta, final NormalizedNodeContainerBuilder data, - final UnsignedLong nodeVersion, final Iterable modifications) { + final Version nodeVersion, final Iterable modifications) { for (ModifiedNode mod : modifications) { final PathArgument id = mod.getIdentifier(); @@ -155,16 +155,16 @@ abstract class NormalizedNodeContainerModificationStrategy extends SchemaAwareAp @Override protected TreeNode applyMerge(final ModifiedNode modification, final TreeNode currentMeta, - final UnsignedLong subtreeVersion) { + final Version subtreeVersion) { // For Node Containers - merge is same as subtree change - we only replace children. return applySubtreeChange(modification, currentMeta, subtreeVersion); } @Override public TreeNode applySubtreeChange(final ModifiedNode modification, - final TreeNode currentMeta, final UnsignedLong subtreeVersion) { + final TreeNode currentMeta, final Version subtreeVersion) { // Bump subtree version to its new target - final UnsignedLong updatedSubtreeVersion = StoreUtils.increase(currentMeta.getSubtreeVersion()); + final Version updatedSubtreeVersion = currentMeta.getSubtreeVersion().next(); final MutableTreeNode newMeta = currentMeta.mutable(); newMeta.setSubtreeVersion(updatedSubtreeVersion); diff --git a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/tree/data/OperationWithModification.java b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/tree/data/OperationWithModification.java index 0a5fad3e8b..ff90d57f49 100644 --- a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/tree/data/OperationWithModification.java +++ b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/tree/data/OperationWithModification.java @@ -8,11 +8,11 @@ package org.opendaylight.controller.md.sal.dom.store.impl.tree.data; import org.opendaylight.controller.md.sal.dom.store.impl.tree.spi.TreeNode; +import org.opendaylight.controller.md.sal.dom.store.impl.tree.spi.Version; import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier.PathArgument; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import com.google.common.base.Optional; -import com.google.common.primitives.UnsignedLong; final class OperationWithModification { @@ -44,7 +44,7 @@ final class OperationWithModification { return applyOperation; } - public Optional apply(final Optional data, final UnsignedLong subtreeVersion) { + public Optional apply(final Optional data, final Version subtreeVersion) { return applyOperation.apply(modification, data, subtreeVersion); } diff --git a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/tree/data/SchemaAwareApplyOperation.java b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/tree/data/SchemaAwareApplyOperation.java index a0730e44da..bdf5667b67 100644 --- a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/tree/data/SchemaAwareApplyOperation.java +++ b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/tree/data/SchemaAwareApplyOperation.java @@ -22,6 +22,7 @@ import org.opendaylight.controller.md.sal.dom.store.impl.tree.data.NormalizedNod import org.opendaylight.controller.md.sal.dom.store.impl.tree.data.ValueNodeModificationStrategy.LeafModificationStrategy; import org.opendaylight.controller.md.sal.dom.store.impl.tree.spi.TreeNode; import org.opendaylight.controller.md.sal.dom.store.impl.tree.spi.TreeNodeFactory; +import org.opendaylight.controller.md.sal.dom.store.impl.tree.spi.Version; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier.AugmentationIdentifier; @@ -42,7 +43,6 @@ import org.slf4j.LoggerFactory; import com.google.common.base.Optional; import com.google.common.base.Preconditions; -import com.google.common.primitives.UnsignedLong; abstract class SchemaAwareApplyOperation implements ModificationApplyOperation { private static final Logger LOG = LoggerFactory.getLogger(SchemaAwareApplyOperation.class); @@ -184,7 +184,7 @@ abstract class SchemaAwareApplyOperation implements ModificationApplyOperation { @Override public final Optional apply(final ModifiedNode modification, - final Optional currentMeta, final UnsignedLong subtreeVersion) { + final Optional currentMeta, final Version subtreeVersion) { switch (modification.getType()) { case DELETE: @@ -208,13 +208,13 @@ abstract class SchemaAwareApplyOperation implements ModificationApplyOperation { } protected abstract TreeNode applyMerge(ModifiedNode modification, - TreeNode currentMeta, UnsignedLong subtreeVersion); + TreeNode currentMeta, Version subtreeVersion); protected abstract TreeNode applyWrite(ModifiedNode modification, - Optional currentMeta, UnsignedLong subtreeVersion); + Optional currentMeta, Version subtreeVersion); protected abstract TreeNode applySubtreeChange(ModifiedNode modification, - TreeNode currentMeta, UnsignedLong subtreeVersion); + TreeNode currentMeta, Version subtreeVersion); protected abstract void checkSubtreeModificationApplicable(InstanceIdentifier path, final NodeModification modification, final Optional current) throws DataPreconditionFailedException; @@ -231,19 +231,19 @@ abstract class SchemaAwareApplyOperation implements ModificationApplyOperation { @Override protected TreeNode applyMerge(final ModifiedNode modification, final TreeNode currentMeta, - final UnsignedLong subtreeVersion) { + final Version subtreeVersion) { return applyWrite(modification, Optional.of(currentMeta), subtreeVersion); } @Override protected TreeNode applySubtreeChange(final ModifiedNode modification, - final TreeNode currentMeta, final UnsignedLong subtreeVersion) { + final TreeNode currentMeta, final Version subtreeVersion) { throw new UnsupportedOperationException("UnkeyedList does not support subtree change."); } @Override protected TreeNode applyWrite(final ModifiedNode modification, - final Optional currentMeta, final UnsignedLong subtreeVersion) { + final Optional currentMeta, final Version subtreeVersion) { return TreeNodeFactory.createTreeNode(modification.getWrittenValue(), subtreeVersion); } diff --git a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/tree/data/ValueNodeModificationStrategy.java b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/tree/data/ValueNodeModificationStrategy.java index 6250b30702..5f68782a2e 100644 --- a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/tree/data/ValueNodeModificationStrategy.java +++ b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/tree/data/ValueNodeModificationStrategy.java @@ -12,6 +12,7 @@ import static com.google.common.base.Preconditions.checkArgument; import org.opendaylight.controller.md.sal.dom.store.impl.tree.DataPreconditionFailedException; import org.opendaylight.controller.md.sal.dom.store.impl.tree.spi.TreeNode; import org.opendaylight.controller.md.sal.dom.store.impl.tree.spi.TreeNodeFactory; +import org.opendaylight.controller.md.sal.dom.store.impl.tree.spi.Version; import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier.PathArgument; import org.opendaylight.yangtools.yang.data.api.schema.LeafNode; @@ -22,7 +23,6 @@ import org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode; import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode; import com.google.common.base.Optional; -import com.google.common.primitives.UnsignedLong; abstract class ValueNodeModificationStrategy extends SchemaAwareApplyOperation { @@ -48,21 +48,21 @@ abstract class ValueNodeModificationStrategy extends S @Override protected TreeNode applySubtreeChange(final ModifiedNode modification, - final TreeNode currentMeta, final UnsignedLong subtreeVersion) { + final TreeNode currentMeta, final Version subtreeVersion) { throw new UnsupportedOperationException("Node " + schema.getPath() + "is leaf type node. Subtree change is not allowed."); } @Override protected TreeNode applyMerge(final ModifiedNode modification, final TreeNode currentMeta, - final UnsignedLong subtreeVersion) { + final Version subtreeVersion) { // Just overwrite whatever was there return applyWrite(modification, null, subtreeVersion); } @Override protected TreeNode applyWrite(final ModifiedNode modification, - final Optional currentMeta, final UnsignedLong subtreeVersion) { + final Optional currentMeta, final Version subtreeVersion) { return TreeNodeFactory.createTreeNode(modification.getWrittenValue(), subtreeVersion); } diff --git a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/tree/spi/AbstractTreeNode.java b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/tree/spi/AbstractTreeNode.java index 1cf28a36d1..1444f0c6a8 100644 --- a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/tree/spi/AbstractTreeNode.java +++ b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/tree/spi/AbstractTreeNode.java @@ -11,16 +11,15 @@ import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier.PathArgument; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import com.google.common.base.Preconditions; -import com.google.common.primitives.UnsignedLong; /* * A very basic data tree node. */ abstract class AbstractTreeNode implements TreeNode { private final NormalizedNode data; - private final UnsignedLong version; + private final Version version; - protected AbstractTreeNode(final NormalizedNode data, final UnsignedLong version) { + protected AbstractTreeNode(final NormalizedNode data, final Version version) { this.data = Preconditions.checkNotNull(data); this.version = Preconditions.checkNotNull(version); } @@ -31,7 +30,7 @@ abstract class AbstractTreeNode implements TreeNode { } @Override - public final UnsignedLong getVersion() { + public final Version getVersion() { return version; } diff --git a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/tree/spi/ContainerNode.java b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/tree/spi/ContainerNode.java index 20bf61914f..8f74f60498 100644 --- a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/tree/spi/ContainerNode.java +++ b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/tree/spi/ContainerNode.java @@ -18,7 +18,6 @@ import org.opendaylight.yangtools.yang.data.api.schema.OrderedNodeContainer; import com.google.common.base.Optional; import com.google.common.base.Preconditions; -import com.google.common.primitives.UnsignedLong; /** * A TreeNode capable of holding child nodes. The fact that any of the children @@ -26,17 +25,17 @@ import com.google.common.primitives.UnsignedLong; */ final class ContainerNode extends AbstractTreeNode { private final Map children; - private final UnsignedLong subtreeVersion; + private final Version subtreeVersion; - protected ContainerNode(final NormalizedNode data, final UnsignedLong version, - final Map children, final UnsignedLong subtreeVersion) { + protected ContainerNode(final NormalizedNode data, final Version version, + final Map children, final Version subtreeVersion) { super(data, version); this.children = Preconditions.checkNotNull(children); this.subtreeVersion = Preconditions.checkNotNull(subtreeVersion); } @Override - public UnsignedLong getSubtreeVersion() { + public Version getSubtreeVersion() { return subtreeVersion; } @@ -52,9 +51,9 @@ final class ContainerNode extends AbstractTreeNode { private static final class Mutable implements MutableTreeNode { private final Map children; - private final UnsignedLong version; + private final Version version; private NormalizedNode data; - private UnsignedLong subtreeVersion; + private Version subtreeVersion; private Mutable(final ContainerNode parent) { this.data = parent.getData(); @@ -69,7 +68,7 @@ final class ContainerNode extends AbstractTreeNode { } @Override - public void setSubtreeVersion(final UnsignedLong subtreeVersion) { + public void setSubtreeVersion(final Version subtreeVersion) { this.subtreeVersion = Preconditions.checkNotNull(subtreeVersion); } @@ -102,7 +101,8 @@ final class ContainerNode extends AbstractTreeNode { } } - private static ContainerNode create(final UnsignedLong version, final NormalizedNode data, final Iterable> children) { + private static ContainerNode create(final Version version, final NormalizedNode data, + final Iterable> children) { final Map map = new HashMap<>(); for (NormalizedNode child : children) { @@ -112,11 +112,11 @@ final class ContainerNode extends AbstractTreeNode { return new ContainerNode(data, version, map, version); } - public static ContainerNode create(final UnsignedLong version, final NormalizedNodeContainer> container) { + public static ContainerNode create(final Version version, final NormalizedNodeContainer> container) { return create(version, container, container.getValue()); } - public static ContainerNode create(final UnsignedLong version, final OrderedNodeContainer> container) { + public static ContainerNode create(final Version version, final OrderedNodeContainer> container) { return create(version, container, container.getValue()); } } diff --git a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/tree/spi/MutableTreeNode.java b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/tree/spi/MutableTreeNode.java index 84300a9fd0..dd3672cf11 100644 --- a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/tree/spi/MutableTreeNode.java +++ b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/tree/spi/MutableTreeNode.java @@ -11,11 +11,9 @@ import org.opendaylight.controller.md.sal.dom.store.impl.tree.StoreTreeNode; import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier.PathArgument; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; -import com.google.common.primitives.UnsignedLong; - public interface MutableTreeNode extends StoreTreeNode { void setData(NormalizedNode data); - void setSubtreeVersion(UnsignedLong subtreeVersion); + void setSubtreeVersion(Version subtreeVersion); void addChild(TreeNode child); void removeChild(PathArgument id); TreeNode seal(); diff --git a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/tree/spi/TreeNode.java b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/tree/spi/TreeNode.java index e3c35917e2..b0beb8168b 100644 --- a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/tree/spi/TreeNode.java +++ b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/tree/spi/TreeNode.java @@ -12,8 +12,6 @@ import org.opendaylight.yangtools.concepts.Identifiable; import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier.PathArgument; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; -import com.google.common.primitives.UnsignedLong; - /* * A very basic data tree node. It has a version (when it was last modified), * a subtree version (when any of its children were modified) and some read-only @@ -25,14 +23,14 @@ public interface TreeNode extends Identifiable, StoreTreeNode data, final UnsignedLong version) { + public static final TreeNode createTreeNode(final NormalizedNode data, final Version version) { if (data instanceof NormalizedNodeContainer) { @SuppressWarnings("unchecked") NormalizedNodeContainer> container = (NormalizedNodeContainer>) data; diff --git a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/tree/spi/ValueNode.java b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/tree/spi/ValueNode.java index cbd2a17081..7194faadf6 100644 --- a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/tree/spi/ValueNode.java +++ b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/tree/spi/ValueNode.java @@ -13,12 +13,11 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.google.common.base.Optional; -import com.google.common.primitives.UnsignedLong; final class ValueNode extends AbstractTreeNode { private static final Logger LOG = LoggerFactory.getLogger(ValueNode.class); - protected ValueNode(final NormalizedNode data, final UnsignedLong version) { + protected ValueNode(final NormalizedNode data, final Version version) { super(data, version); } @@ -29,7 +28,7 @@ final class ValueNode extends AbstractTreeNode { } @Override - public UnsignedLong getSubtreeVersion() { + public Version getSubtreeVersion() { return getVersion(); } diff --git a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/tree/spi/Version.java b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/tree/spi/Version.java new file mode 100644 index 0000000000..09a35d3b1a --- /dev/null +++ b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/tree/spi/Version.java @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2014 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, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.controller.md.sal.dom.store.impl.tree.spi; + +/** + * The concept of a version, either node version, or a subtree version. The + * only interface contract this class has is that no two versions are the + * same. + */ +public final class Version { + private Version() { + + } + + /** + * Create a new version, distinct from any other version. + * + * @return a new version. + */ + public Version next() { + return new Version(); + } + + /** + * Create an initial version. + * + * @return a new version. + */ + public static final Version initial() { + return new Version(); + } +} diff --git a/opendaylight/md-sal/sal-dom-broker/src/test/java/org/opendaylight/controller/md/sal/dom/store/impl/tree/data/ModificationMetadataTreeTest.java b/opendaylight/md-sal/sal-dom-broker/src/test/java/org/opendaylight/controller/md/sal/dom/store/impl/tree/data/ModificationMetadataTreeTest.java index abaa4d1eca..4fb190fc82 100644 --- a/opendaylight/md-sal/sal-dom-broker/src/test/java/org/opendaylight/controller/md/sal/dom/store/impl/tree/data/ModificationMetadataTreeTest.java +++ b/opendaylight/md-sal/sal-dom-broker/src/test/java/org/opendaylight/controller/md/sal/dom/store/impl/tree/data/ModificationMetadataTreeTest.java @@ -30,6 +30,7 @@ import org.opendaylight.controller.md.sal.dom.store.impl.TestModel; import org.opendaylight.controller.md.sal.dom.store.impl.tree.DataTree; import org.opendaylight.controller.md.sal.dom.store.impl.tree.DataTreeModification; import org.opendaylight.controller.md.sal.dom.store.impl.tree.spi.TreeNodeFactory; +import org.opendaylight.controller.md.sal.dom.store.impl.tree.spi.Version; import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier.NodeIdentifier; import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; @@ -41,7 +42,6 @@ import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableCo import org.opendaylight.yangtools.yang.model.api.SchemaContext; import com.google.common.base.Optional; -import com.google.common.primitives.UnsignedLong; /** * @@ -150,7 +150,7 @@ public class ModificationMetadataTreeTest { @Test public void basicReadWrites() { DataTreeModification modificationTree = new InMemoryDataTreeModification(new InMemoryDataTreeSnapshot(schemaContext, - TreeNodeFactory.createTreeNode(createDocumentOne(), UnsignedLong.valueOf(5)), applyOper), + TreeNodeFactory.createTreeNode(createDocumentOne(), Version.initial()), applyOper), new SchemaAwareApplyOperationRoot(schemaContext)); Optional> originalBarNode = modificationTree.readNode(OUTER_LIST_2_PATH); assertTrue(originalBarNode.isPresent());