Details
-
Bug
-
Status: Resolved
-
Medium
-
Resolution: Done
-
None
-
None
Description
As noted in BGPCEP-1005 we can encounter this exception:
java.lang.IllegalArgumentException: Metadata not available for modification ModifiedNode{identifier=(urn:TBD:params:xml:ns:yang:network-topology?revision=2013-10-21)node[{(urn:TBD:params:xml:ns:yang:network-topology?revision=2013-10-21)node-id=pcc://10.30.170.51}], operation=TOUCH, modificationType=SUBTREE_MODIFIED, childModification={AugmentationIdentifier{childNames=[(urn:opendaylight:params:xml:ns:yang:topology:pcep:stats?revision=2018-11-09)pcep-session-state]}=ModifiedNode{identifier=AugmentationIdentifier{childNames=[(urn:opendaylight:params:xml:ns:yang:topology:pcep:stats?revision=2018-11-09)pcep-session-state]}, operation=WRITE, modificationType=WRITE}}}
at com.google.common.base.Preconditions.checkArgument(Preconditions.java:220) ~[bundleFile:?]
at org.opendaylight.yangtools.yang.data.tree.impl.SchemaAwareApplyOperation.apply(SchemaAwareApplyOperation.java:234) ~[bundleFile:?]
at org.opendaylight.yangtools.yang.data.tree.impl.AbstractNodeContainerModificationStrategy.mutateChildren(AbstractNodeContainerModificationStrategy.java:219) ~[bundleFile:?]
at org.opendaylight.yangtools.yang.data.tree.impl.AbstractNodeContainerModificationStrategy.applyTouch(AbstractNodeContainerModificationStrategy.java:329) ~[bundleFile:?]
at org.opendaylight.yangtools.yang.data.tree.impl.SchemaAwareApplyOperation.apply(SchemaAwareApplyOperation.java:235) ~[bundleFile:?]
at org.opendaylight.yangtools.yang.data.tree.impl.MapModificationStrategy.lambda$apply$0(MapModificationStrategy.java:66) ~[bundleFile:?]
at org.opendaylight.yangtools.yang.data.tree.impl.AutomaticLifecycleMixin.applyTouch(AutomaticLifecycleMixin.java:70) ~[bundleFile:?]
at org.opendaylight.yangtools.yang.data.tree.impl.AutomaticLifecycleMixin.apply(AutomaticLifecycleMixin.java:58) ~[bundleFile:?]
at org.opendaylight.yangtools.yang.data.tree.impl.MapModificationStrategy.apply(MapModificationStrategy.java:66) ~[bundleFile:?]
at org.opendaylight.yangtools.yang.data.tree.impl.AbstractNodeContainerModificationStrategy.mutateChildren(AbstractNodeContainerModificationStrategy.java:219) ~[bundleFile:?]
at org.opendaylight.yangtools.yang.data.tree.impl.AbstractNodeContainerModificationStrategy.applyTouch(AbstractNodeContainerModificationStrategy.java:329) ~[bundleFile:?]
at org.opendaylight.yangtools.yang.data.tree.impl.SchemaAwareApplyOperation.apply(SchemaAwareApplyOperation.java:235) ~[bundleFile:?]
at org.opendaylight.yangtools.yang.data.tree.impl.AbstractNodeContainerModificationStrategy.mutateChildren(AbstractNodeContainerModificationStrategy.java:219) ~[bundleFile:?]
at org.opendaylight.yangtools.yang.data.tree.impl.AbstractNodeContainerModificationStrategy.applyTouch(AbstractNodeContainerModificationStrategy.java:329) ~[bundleFile:?]
at org.opendaylight.yangtools.yang.data.tree.impl.SchemaAwareApplyOperation.apply(SchemaAwareApplyOperation.java:235) ~[bundleFile:?]
at org.opendaylight.yangtools.yang.data.tree.impl.MapModificationStrategy.lambda$apply$0(MapModificationStrategy.java:66) ~[bundleFile:?]
at org.opendaylight.yangtools.yang.data.tree.impl.AutomaticLifecycleMixin.apply(AutomaticLifecycleMixin.java:61) ~[bundleFile:?]
at org.opendaylight.yangtools.yang.data.tree.impl.MapModificationStrategy.apply(MapModificationStrategy.java:66) ~[bundleFile:?]
at org.opendaylight.yangtools.yang.data.tree.impl.AbstractNodeContainerModificationStrategy.mutateChildren(AbstractNodeContainerModificationStrategy.java:219) ~[bundleFile:?]
at org.opendaylight.yangtools.yang.data.tree.impl.AbstractNodeContainerModificationStrategy.applyTouch(AbstractNodeContainerModificationStrategy.java:329) ~[bundleFile:?]
at org.opendaylight.yangtools.yang.data.tree.impl.SchemaAwareApplyOperation.apply(SchemaAwareApplyOperation.java:235) ~[bundleFile:?]
at org.opendaylight.yangtools.yang.data.tree.impl.StructuralContainerModificationStrategy.lambda$apply$0(StructuralContainerModificationStrategy.java:37) ~[bundleFile:?]
at org.opendaylight.yangtools.yang.data.tree.impl.AutomaticLifecycleMixin.apply(AutomaticLifecycleMixin.java:61) ~[bundleFile:?]
at org.opendaylight.yangtools.yang.data.tree.impl.StructuralContainerModificationStrategy.apply(StructuralContainerModificationStrategy.java:37) ~[bundleFile:?]
at org.opendaylight.yangtools.yang.data.tree.impl.AbstractNodeContainerModificationStrategy.mutateChildren(AbstractNodeContainerModificationStrategy.java:219) ~[bundleFile:?]
at org.opendaylight.yangtools.yang.data.tree.impl.AbstractNodeContainerModificationStrategy.applyTouch(AbstractNodeContainerModificationStrategy.java:329) ~[bundleFile:?]
at org.opendaylight.yangtools.yang.data.tree.impl.SchemaAwareApplyOperation.apply(SchemaAwareApplyOperation.java:235) ~[bundleFile:?]
at org.opendaylight.yangtools.yang.data.tree.impl.InMemoryDataTreeModification.newModification(InMemoryDataTreeModification.java:217) ~[bundleFile:?]
at org.opendaylight.yangtools.yang.data.tree.impl.InMemoryDataTreeModification.newModification(InMemoryDataTreeModification.java:34) ~[bundleFile:?]
at org.opendaylight.controller.cluster.databroker.actors.dds.LocalReadWriteProxyTransaction.<init>(LocalReadWriteProxyTransaction.java:89) ~[bundleFile:?]
at org.opendaylight.controller.cluster.databroker.actors.dds.ProxyHistory$Local.doCreateTransactionProxy(ProxyHistory.java:120) ~[bundleFile:?]
at org.opendaylight.controller.cluster.databroker.actors.dds.ProxyHistory.createTransactionProxy(ProxyHistory.java:425) ~[bundleFile:?]
at org.opendaylight.controller.cluster.databroker.actors.dds.ProxyHistory.createTransactionProxy(ProxyHistory.java:412) ~[bundleFile:?]
at org.opendaylight.controller.cluster.databroker.actors.dds.AbstractClientHistory.createTransactionProxy(AbstractClientHistory.java:202) ~[bundleFile:?]
at org.opendaylight.controller.cluster.databroker.actors.dds.ClientTransaction.createProxy(ClientTransaction.java:144) ~[bundleFile:?]
at java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1705) ~[?:?]
at org.opendaylight.controller.cluster.databroker.actors.dds.AbstractClientHandle.ensureProxy(AbstractClientHandle.java:115) ~[bundleFile:?]
at org.opendaylight.controller.cluster.databroker.actors.dds.AbstractClientHandle.ensureProxy(AbstractClientHandle.java:111) ~[bundleFile:?]
at org.opendaylight.controller.cluster.databroker.actors.dds.ClientTransaction.delete(ClientTransaction.java:79) ~[bundleFile:?]
at org.opendaylight.controller.cluster.databroker.ClientBackedWriteTransaction.delete(ClientBackedWriteTransaction.java:40) ~[bundleFile:?]
at org.opendaylight.controller.cluster.databroker.AbstractDOMBrokerWriteTransaction.delete(AbstractDOMBrokerWriteTransaction.java:95) ~[bundleFile:?]
at org.opendaylight.mdsal.dom.spi.ForwardingDOMDataReadWriteTransaction.delete(ForwardingDOMDataReadWriteTransaction.java:62) ~[bundleFile:?]
at org.opendaylight.mdsal.binding.dom.adapter.BindingDOMWriteTransactionAdapter.delete(BindingDOMWriteTransactionAdapter.java:65) ~[bundleFile:?]
This can happen when we are chaining modifications on top of each other and the previous transaction cannot be applied to the baseline snapshot. In this particular case we have a request to write an augmentation into a node which does not exist. Since the modification has only been ready(), but has not gone through validation, we have not detected this problem.
When this happens the transaction chain is on its way out, so we should just capture the problem, disregard any modifications and fail any reads.
Attachments
Issue Links
- relates to
-
BGPCEP-1005 Race between topology manager and PCEP session
-
- Resolved
-
-
CONTROLLER-2041 LocalReadWriteProxyTransaction allows reads after a failure
-
- Resolved
-
| # | Subject | Branch | Project | Status | CR | V |
|---|---|---|---|---|---|---|
| 100657,9 | Handle the case when newModification() fails | master | controller | Status: MERGED | +2 | +1 |
| 100782,2 | Handle the case when newModification() fails | 4.0.x | controller | Status: MERGED | +2 | +1 |