X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-distributed-datastore%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fdatastore%2Futils%2FPruningDataTreeModification.java;h=d59e5643458b5184ced5ff35eab2baa4dbca4fb7;hb=43aab07cdbc80eda69e84a26085afe1b37f4002e;hp=2427223293e79de89d59e936390627fcb822db6e;hpb=085b076786d299c235ab5561c9fa678fd6b8d726;p=controller.git diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/utils/PruningDataTreeModification.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/utils/PruningDataTreeModification.java index 2427223293..d59e564345 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/utils/PruningDataTreeModification.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/utils/PruningDataTreeModification.java @@ -19,6 +19,7 @@ import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeWriter; import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeModification; import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeModificationCursor; +import org.opendaylight.yangtools.yang.data.impl.schema.tree.SchemaValidationFailedException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -41,7 +42,7 @@ public class PruningDataTreeModification implements DataTreeModification { public void delete(YangInstanceIdentifier yangInstanceIdentifier) { try { delegate.delete(yangInstanceIdentifier); - } catch(IllegalArgumentException e){ + } catch(SchemaValidationFailedException e){ LOG.warn("Node at path : {} does not exist ignoring delete", yangInstanceIdentifier); } } @@ -49,41 +50,57 @@ public class PruningDataTreeModification implements DataTreeModification { @Override public void merge(YangInstanceIdentifier yangInstanceIdentifier, NormalizedNode normalizedNode) { try { - delegate.merge(yangInstanceIdentifier, normalizedNode); - } catch (IllegalArgumentException e){ + if(YangInstanceIdentifier.EMPTY.equals(yangInstanceIdentifier)){ + pruneAndMergeNode(yangInstanceIdentifier, normalizedNode); + } else { + delegate.merge(yangInstanceIdentifier, normalizedNode); + } + } catch (SchemaValidationFailedException e){ if(!isValidYangInstanceIdentifier(yangInstanceIdentifier)){ LOG.warn("Invalid node identifier {} ignoring merge", yangInstanceIdentifier); return; } - LOG.warn("Node at path : {} was pruned during merge", yangInstanceIdentifier); + pruneAndMergeNode(yangInstanceIdentifier, normalizedNode); + } + + } - NormalizedNode pruned = pruneNormalizedNode(normalizedNode); + private void pruneAndMergeNode(YangInstanceIdentifier yangInstanceIdentifier, NormalizedNode normalizedNode) { + LOG.warn("Node at path : {} was pruned during merge", yangInstanceIdentifier); - if(pruned != null) { - delegate.merge(yangInstanceIdentifier, pruned); - } - } + NormalizedNode pruned = pruneNormalizedNode(normalizedNode); + if(pruned != null) { + delegate.merge(yangInstanceIdentifier, pruned); + } } @Override public void write(YangInstanceIdentifier yangInstanceIdentifier, NormalizedNode normalizedNode) { try { - delegate.write(yangInstanceIdentifier, normalizedNode); - } catch (IllegalArgumentException e){ + if(YangInstanceIdentifier.EMPTY.equals(yangInstanceIdentifier)){ + pruneAndWriteNode(yangInstanceIdentifier, normalizedNode); + } else { + delegate.write(yangInstanceIdentifier, normalizedNode); + } + } catch (SchemaValidationFailedException e){ if(!isValidYangInstanceIdentifier(yangInstanceIdentifier)){ LOG.warn("Invalid node identifier {} ignoring write", yangInstanceIdentifier); return; } - LOG.warn("Node at path : {} was pruned during write", yangInstanceIdentifier); + pruneAndWriteNode(yangInstanceIdentifier, normalizedNode); + } + } + + private void pruneAndWriteNode(YangInstanceIdentifier yangInstanceIdentifier, NormalizedNode normalizedNode) { + LOG.warn("Node at path : {} was pruned during write", yangInstanceIdentifier); - NormalizedNode pruned = pruneNormalizedNode(normalizedNode); + NormalizedNode pruned = pruneNormalizedNode(normalizedNode); - if(pruned != null) { - delegate.write(yangInstanceIdentifier, pruned); - } + if(pruned != null) { + delegate.write(yangInstanceIdentifier, pruned); } }