Uploaded image for project: 'controller'
  1. controller
  2. CONTROLLER-499

Race condition while providing schemaContext in md-sal components

    XMLWordPrintable

Details

    • Bug
    • Status: Resolved
    • Resolution: Done
    • None
    • None
    • mdsal
    • None
    • Operating System: All
      Platform: All

    • 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]

      Attachments

        Issue Links

          No reviews matched the request. Check your Options in the drop-down menu of this sections header.

          Activity

            People

              Unassigned Unassigned
              mmarsale@cisco.com Maros Marsalek
              Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: