From: Moiz Raja Date: Tue, 2 Jun 2015 01:28:32 +0000 (-0700) Subject: BUG 2970 : Handle SchemaValidationFailedException instead of IllegalArgumentException X-Git-Tag: release/beryllium~521 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=a54716c7a8c9a49a6b7b19eaedfbe522a2556b2b;p=controller.git BUG 2970 : Handle SchemaValidationFailedException instead of IllegalArgumentException Switch to handling the more specific SchemaValidationFailedException. Change-Id: Id2f07aae4f45bb11257906fcc157e679b7e34948 Signed-off-by: Moiz Raja (cherry picked from commit 796434267bba9c66f35fbab0648dd06c3d1206fc) --- diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardDataTreeSnapshot.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/PruningShardDataTreeSnapshot.java similarity index 83% rename from opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardDataTreeSnapshot.java rename to opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/PruningShardDataTreeSnapshot.java index b7ec3a712e..2a0b9762f9 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardDataTreeSnapshot.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/PruningShardDataTreeSnapshot.java @@ -17,12 +17,15 @@ import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeModification; import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeSnapshot; -class ShardDataTreeSnapshot implements DataTreeSnapshot { +/** + * The PruningShardDataTreeSnapshot returns a PruningDataTreeModification when a newModification is created + */ +class PruningShardDataTreeSnapshot implements DataTreeSnapshot { private final DataTreeSnapshot dataTreeSnapshot; private final Set validNamespaces; - public ShardDataTreeSnapshot(DataTreeSnapshot dataTreeSnapshot, Set validNamespaces) { + public PruningShardDataTreeSnapshot(DataTreeSnapshot dataTreeSnapshot, Set validNamespaces) { this.dataTreeSnapshot = dataTreeSnapshot; this.validNamespaces = validNamespaces; } diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardDataTree.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardDataTree.java index 7a7eceb876..d83dd22fcf 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardDataTree.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardDataTree.java @@ -205,13 +205,13 @@ public final class ShardDataTree extends ShardDataTreeTransactionParent { @Override public ReadOnlyShardDataTreeTransaction newReadOnlyTransaction(String txId, String chainId) { return new ReadOnlyShardDataTreeTransaction(txId, - new ShardDataTreeSnapshot(dataTree.takeSnapshot(), validNamespaces)); + new PruningShardDataTreeSnapshot(dataTree.takeSnapshot(), validNamespaces)); } @Override public ReadWriteShardDataTreeTransaction newReadWriteTransaction(String txId, String chainId) { return new ReadWriteShardDataTreeTransaction(ShardDataTree.this, txId, - new ShardDataTreeSnapshot(dataTree.takeSnapshot(), validNamespaces).newModification()); + new PruningShardDataTreeSnapshot(dataTree.takeSnapshot(), validNamespaces).newModification()); } } 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..cc976b381f 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); } } @@ -50,7 +51,7 @@ public class PruningDataTreeModification implements DataTreeModification { public void merge(YangInstanceIdentifier yangInstanceIdentifier, NormalizedNode normalizedNode) { try { delegate.merge(yangInstanceIdentifier, normalizedNode); - } catch (IllegalArgumentException e){ + } catch (SchemaValidationFailedException e){ if(!isValidYangInstanceIdentifier(yangInstanceIdentifier)){ LOG.warn("Invalid node identifier {} ignoring merge", yangInstanceIdentifier); return; @@ -71,7 +72,7 @@ public class PruningDataTreeModification implements DataTreeModification { public void write(YangInstanceIdentifier yangInstanceIdentifier, NormalizedNode normalizedNode) { try { delegate.write(yangInstanceIdentifier, normalizedNode); - } catch (IllegalArgumentException e){ + } catch (SchemaValidationFailedException e){ if(!isValidYangInstanceIdentifier(yangInstanceIdentifier)){ LOG.warn("Invalid node identifier {} ignoring write", yangInstanceIdentifier); return; diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/ShardDataTreeSnapshotTest.java b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/PruningShardDataTreeSnapshotTest.java similarity index 78% rename from opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/ShardDataTreeSnapshotTest.java rename to opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/PruningShardDataTreeSnapshotTest.java index dc07265d7f..2d48e7a316 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/ShardDataTreeSnapshotTest.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/PruningShardDataTreeSnapshotTest.java @@ -13,7 +13,7 @@ import org.opendaylight.controller.md.cluster.datastore.model.CarsModel; import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeModification; import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeSnapshot; -public class ShardDataTreeSnapshotTest { +public class PruningShardDataTreeSnapshotTest { @Mock DataTreeSnapshot dataTreeSnapshot; @@ -28,8 +28,8 @@ public class ShardDataTreeSnapshotTest { @Test public void testNewModification(){ - ShardDataTreeSnapshot snapshot1 - = new ShardDataTreeSnapshot(dataTreeSnapshot, validNamespaces); + PruningShardDataTreeSnapshot snapshot1 + = new PruningShardDataTreeSnapshot(dataTreeSnapshot, validNamespaces); DataTreeModification dataTreeModification1 = snapshot1.newModification(); @@ -38,8 +38,8 @@ public class ShardDataTreeSnapshotTest { @Test public void testReadNode(){ - ShardDataTreeSnapshot snapshot - = new ShardDataTreeSnapshot(dataTreeSnapshot, validNamespaces); + PruningShardDataTreeSnapshot snapshot + = new PruningShardDataTreeSnapshot(dataTreeSnapshot, validNamespaces); snapshot.readNode(CarsModel.BASE_PATH); diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/utils/PruningDataTreeModificationTest.java b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/utils/PruningDataTreeModificationTest.java index b5e6caee9a..67f60485df 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/utils/PruningDataTreeModificationTest.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/utils/PruningDataTreeModificationTest.java @@ -18,6 +18,7 @@ import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; 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; public class PruningDataTreeModificationTest { @@ -53,7 +54,7 @@ public class PruningDataTreeModificationTest { @Test public void testDeleteOnException(){ YangInstanceIdentifier path = CarsModel.BASE_PATH; - doThrow(IllegalArgumentException.class).when(delegate).delete(path); + doThrow(SchemaValidationFailedException.class).when(delegate).delete(path); pruningDataTreeModification.delete(path); @@ -75,7 +76,7 @@ public class PruningDataTreeModificationTest { NormalizedNode normalizedNode = CarsModel.create(); YangInstanceIdentifier path = CarsModel.BASE_PATH; - doThrow(IllegalArgumentException.class).when(delegate).merge(path, normalizedNode); + doThrow(SchemaValidationFailedException.class).when(delegate).merge(path, normalizedNode); doReturn(true).when(validNamespaces).contains(any(YangInstanceIdentifier.PathArgument.class)); pruningDataTreeModification.merge(path, normalizedNode); @@ -98,7 +99,7 @@ public class PruningDataTreeModificationTest { NormalizedNode normalizedNode = CarsModel.create(); YangInstanceIdentifier path = CarsModel.BASE_PATH; - doThrow(IllegalArgumentException.class).when(delegate).write(path, normalizedNode); + doThrow(SchemaValidationFailedException.class).when(delegate).write(path, normalizedNode); doReturn(true).when(validNamespaces).contains(any(YangInstanceIdentifier.PathArgument.class)); pruningDataTreeModification.write(path, normalizedNode);