[CONTROLLER-499] Race condition while providing schemaContext in md-sal components Created: 21/May/14  Updated: 25/Jul/23  Resolved: 11/Jul/14

Status: Resolved
Project: controller
Component/s: mdsal
Affects Version/s: None
Fix Version/s: None

Type: Bug
Reporter: Maros Marsalek Assignee: Unassigned
Resolution: Done Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified
Environment:

Operating System: All
Platform: All


Issue Links:
Duplicate
is duplicated by CONTROLLER-620 Topology issue due to schema not bein... Resolved
External issue ID: 1061

 Description   

Different components in md-sal (Datastore, Binding facade... ) receive the updated schema context in no particular order.

When a binding-aware provider attempts to write some data into datastore it gets blocked by the binding facade until the correct schema context is received. Then the data is forwarded to the datastore, however the datastore might not have received the same schema context yet and the write fails with following exception:

2014-05-21 14:09:24.985 CEST [remote-connector-processing-executor-1] ERROR o.o.c.m.s.d.s.i.InMemoryDOMDataStore - Tx: DOM-OPER-1, failed to write (urn:opendaylight:inventory?revision=2013-08-19)nodes:ImmutableContainerNode{nodeIdentifier=(urn:opendaylight:inventory?revision=2013-08-19)nodes, value=[], attributes={}} in MutableDataTree [modification=NodeModification [identifier=(urn:ietf:params:xml:ns:netconf:base:1.0)data, modificationType=UNMODIFIED, childModification={}]]
com.google.common.cache.CacheLoader$InvalidCacheLoadException: CacheLoader returned null for key (urn:opendaylight:inventory?revision=2013-08-19)nodes.
at com.google.common.cache.LocalCache$Segment.getAndRecordStats(LocalCache.java:2412) ~[bundlefile:na]
at com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2380) ~[bundlefile:na]
at com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2342) ~[bundlefile:na]
at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2257) ~[bundlefile:na]
at com.google.common.cache.LocalCache.get(LocalCache.java:4000) ~[bundlefile:na]
at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:4004) ~[bundlefile:na]
at com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:4874) ~[bundlefile:na]
at org.opendaylight.controller.md.sal.dom.store.impl.tree.data.SchemaAwareApplyOperation$DataNodeContainerModificationStrategy.getChild(SchemaAwareApplyOperation.java:478) ~[bundlefile:na]
at org.opendaylight.controller.md.sal.dom.store.impl.tree.TreeNodeUtils.findNodeChecked(TreeNodeUtils.java:50) ~[bundlefile:na]
at org.opendaylight.controller.md.sal.dom.store.impl.tree.data.InMemoryDataTreeModification.resolveModificationStrategy(InMemoryDataTreeModification.java:125) ~[bundlefile:na]
at org.opendaylight.controller.md.sal.dom.store.impl.tree.data.InMemoryDataTreeModification.resolveModificationFor(InMemoryDataTreeModification.java:131) ~[bundlefile:na]
at org.opendaylight.controller.md.sal.dom.store.impl.tree.data.InMemoryDataTreeModification.merge(InMemoryDataTreeModification.java:67) ~[bundlefile:na]
at org.opendaylight.controller.md.sal.dom.store.impl.InMemoryDOMDataStore$SnapshotBackedWriteTransaction.merge(InMemoryDOMDataStore.java:227) ~[bundlefile:na]
at org.opendaylight.controller.md.sal.dom.broker.impl.DOMDataBrokerImpl$WriteTransactionImpl.merge(DOMDataBrokerImpl.java:220) [bundlefile:na]
at org.opendaylight.controller.md.sal.dom.broker.impl.DOMDataBrokerImpl$WriteTransactionImpl.merge(DOMDataBrokerImpl.java:181) [bundlefile:na]
at org.opendaylight.controller.md.sal.binding.impl.AbstractForwardedTransaction.ensureParentsByMerge(AbstractForwardedTransaction.java:159) [bundlefile:na]
at org.opendaylight.controller.md.sal.binding.impl.AbstractForwardedTransaction.doMergeWithEnsureParents(AbstractForwardedTransaction.java:127) [bundlefile:na]
at org.opendaylight.controller.md.sal.binding.impl.ForwardedBackwardsCompatibleDataBroker$ForwardedBackwardsCompatibleTransacion.putOperationalData(ForwardedBackwardsCompatibleDataBroker.java:226) [bundlefile:na]
at org.opendaylight.controller.md.sal.binding.impl.ForwardedBackwardsCompatibleDataBroker$ForwardedBackwardsCompatibleTransacion.putOperationalData(ForwardedBackwardsCompatibleDataBroker.java:195) [bundlefile:na]
at org.opendaylight.controller.sal.connect.netconf.sal.NetconfDeviceDatastoreAdapter.initDeviceData(NetconfDeviceDatastoreAdapter.java:102) [bundlefile:na]
at org.opendaylight.controller.sal.connect.netconf.sal.NetconfDeviceDatastoreAdapter.access$000(NetconfDeviceDatastoreAdapter.java:40) [bundlefile:na]
at org.opendaylight.controller.sal.connect.netconf.sal.NetconfDeviceDatastoreAdapter$1.run(NetconfDeviceDatastoreAdapter.java:58) [bundlefile:na]
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) [na:1.7.0_51]
at java.util.concurrent.FutureTask.run(FutureTask.java:262) [na:1.7.0_51]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [na:1.7.0_51]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [na:1.7.0_51]
at java.lang.Thread.run(Thread.java:744) [na:1.7.0_51]



 Comments   
Comment by Tony Tkacik [ 11/Jul/14 ]

https://git.opendaylight.org/gerrit/#/c/8904/

Generated at Wed Feb 07 19:53:10 UTC 2024 using Jira 8.20.10#820010-sha1:ace47f9899e9ee25d7157d59aa17ab06aee30d3d.