[BGPCEP-772] Example topology not instantiating Created: 22/Mar/18  Updated: 26/Mar/18  Resolved: 26/Mar/18

Status: Verified
Project: bgpcep
Component/s: None
Affects Version/s: None
Fix Version/s: None

Type: Bug Priority: Medium
Reporter: Tomas Markovic Assignee: Claudio David Gasparini
Resolution: Done Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified

Attachments: File get_ipv4_topology.sh     File karaf.log    

 Description   

Steps to reproduce locally:
(Tried with latest oxygen RC3)
1) start bin/karaf
2) install features>
feature:install odl-restconf
feature:install odl-bgpcep-bgp
feature:install odl-bgpcep-bgp-config-example

And after this I get error in the karaf console>

Exception in thread "Thread-58" java.lang.NullPointerException
	at org.opendaylight.bgpcep.config.loader.protocols.ProtocolsConfigFileProcessor.loadConfiguration(ProtocolsConfigFileProcessor.java:85)
	at org.opendaylight.bgpcep.config.loader.impl.ConfigLoaderImpl.handleConfigFile(ConfigLoaderImpl.java:82)
	at org.opendaylight.bgpcep.config.loader.impl.ConfigLoaderImpl.access$300(ConfigLoaderImpl.java:46)
	at org.opendaylight.bgpcep.config.loader.impl.ConfigLoaderImpl$ConfigLoaderImplRunnable.lambda$handleEvent$1(ConfigLoaderImpl.java:190)
	at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184)
	at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175)
	at java.util.HashMap$EntrySpliterator.forEachRemaining(HashMap.java:1696)
	at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
	at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
	at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151)
	at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174)
	at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
	at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:418)
	at org.opendaylight.bgpcep.config.loader.impl.ConfigLoaderImpl$ConfigLoaderImplRunnable.handleEvent(ConfigLoaderImpl.java:190)
	at org.opendaylight.bgpcep.config.loader.impl.ConfigLoaderImpl$ConfigLoaderImplRunnable.handleChanges(ConfigLoaderImpl.java:178)
	at org.opendaylight.bgpcep.config.loader.impl.ConfigLoaderImpl$ConfigLoaderImplRunnable.run(ConfigLoaderImpl.java:160)
	at java.lang.Thread.run(Thread.java:748)

and in karaf.log with warning

2018-03-22T08:15:47,570 | WARN  | Thread-58        | ConfigLoaderImpl                 | 366 - org.opendaylight.bgpcep.config-loader-impl - 0.9.0 | Failed to parse xml
javax.xml.stream.XMLStreamException: ParseError at [row,col]:[1,1]
Message: Premature end of file.
	at com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.next(XMLStreamReaderImpl.java:604) ~[?:?]
	at com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.nextTag(XMLStreamReaderImpl.java:1241) ~[?:?]
	at org.opendaylight.yangtools.yang.data.codec.xml.XmlParserStream.parse(XmlParserStream.java:166) ~[?:?]
	at org.opendaylight.bgpcep.config.loader.impl.ConfigLoaderImpl.parseDefaultConfigFile(ConfigLoaderImpl.java:97) ~[?:?]
	at org.opendaylight.bgpcep.config.loader.impl.ConfigLoaderImpl.handleConfigFile(ConfigLoaderImpl.java:76) ~[?:?]
	at org.opendaylight.bgpcep.config.loader.impl.ConfigLoaderImpl.access$300(ConfigLoaderImpl.java:46) ~[?:?]
	at org.opendaylight.bgpcep.config.loader.impl.ConfigLoaderImpl$ConfigLoaderImplRunnable.lambda$handleEvent$1(ConfigLoaderImpl.java:190) ~[?:?]
	at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184) [?:?]
	at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175) [?:?]
	at java.util.HashMap$EntrySpliterator.forEachRemaining(HashMap.java:1696) [?:?]
	at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481) [?:?]
	at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471) [?:?]
	at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151) [?:?]
	at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174) [?:?]
	at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) [?:?]
	at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:418) [?:?]
	at org.opendaylight.bgpcep.config.loader.impl.ConfigLoaderImpl$ConfigLoaderImplRunnable.handleEvent(ConfigLoaderImpl.java:190) [366:org.opendaylight.bgpcep.config-loader-impl:0.9.0]
	at org.opendaylight.bgpcep.config.loader.impl.ConfigLoaderImpl$ConfigLoaderImplRunnable.handleChanges(ConfigLoaderImpl.java:178) [366:org.opendaylight.bgpcep.config-loader-impl:0.9.0]
	at org.opendaylight.bgpcep.config.loader.impl.ConfigLoaderImpl$ConfigLoaderImplRunnable.run(ConfigLoaderImpl.java:160) [366:org.opendaylight.bgpcep.config-loader-impl:0.9.0]
	at java.lang.Thread.run(Thread.java:748) [?:?]
2018-03-22T08:15:47,571 | INFO  | Thread-58        | ConfigLoaderImpl                 | 366 - org.opendaylight.bgpcep.config-loader-impl - 0.9.0 | Loading initial config protocols-config.xml
2018-03-22T08:15:47,575 | INFO  | features-1-thread-1 | FeaturesServiceImpl              | 7 - org.apache.karaf.features.core - 4.1.3 | Done.

followed by error>

2018-03-22T08:18:41,366 | ERROR | opendaylight-cluster-data-akka.actor.default-dispatcher-19 | DataTreeChangeListenerProxy      | 221 - org.opendaylight.controller.sal-distributed-datastore - 1.7.0 | CONFIGURATION: Failed to find local shard topology - DataTreeChangeListener org.opendaylight.bgpcep.bgp.topology.provider.config.BgpTopologyDeployerImpl@5f55a6f4 at path /(urn:TBD:params:xml:ns:yang:network-topology?revision=2013-10-21)network-topology/topology/topology cannot be registered: {}
org.opendaylight.controller.cluster.datastore.exceptions.NotInitializedException: Found primary shard member-1-shard-topology-config but it's not initialized yet. Please try again later
	at org.opendaylight.controller.cluster.datastore.shardmanager.ShardManager.createNotInitializedException(ShardManager.java:960) [221:org.opendaylight.controller.sal-distributed-datastore:1.7.0]
	at org.opendaylight.controller.cluster.datastore.shardmanager.ShardManager.onShardNotInitializedTimeout(ShardManager.java:784) [221:org.opendaylight.controller.sal-distributed-datastore:1.7.0]
	at org.opendaylight.controller.cluster.datastore.shardmanager.ShardManager.handleCommand(ShardManager.java:254) [221:org.opendaylight.controller.sal-distributed-datastore:1.7.0]
	at org.opendaylight.controller.cluster.common.actor.AbstractUntypedPersistentActor.onReceiveCommand(AbstractUntypedPersistentActor.java:44) [214:org.opendaylight.controller.sal-clustering-commons:1.7.0]
	at akka.persistence.UntypedPersistentActor.onReceive(PersistentActor.scala:274) [86:com.typesafe.akka.persistence:2.5.4]
	at org.opendaylight.controller.cluster.common.actor.MeteringBehavior.apply(MeteringBehavior.java:104) [214:org.opendaylight.controller.sal-clustering-commons:1.7.0]
	at akka.actor.ActorCell$$anonfun$become$1.applyOrElse(ActorCell.scala:545) [83:com.typesafe.akka.actor:2.5.4]
	at akka.actor.Actor.aroundReceive(Actor.scala:514) [83:com.typesafe.akka.actor:2.5.4]
	at akka.actor.Actor.aroundReceive$(Actor.scala:512) [83:com.typesafe.akka.actor:2.5.4]
	at akka.persistence.UntypedPersistentActor.akka$persistence$Eventsourced$$super$aroundReceive(PersistentActor.scala:272) [86:com.typesafe.akka.persistence:2.5.4]
	at akka.persistence.Eventsourced$$anon$1.stateReceive(Eventsourced.scala:663) [86:com.typesafe.akka.persistence:2.5.4]
	at akka.persistence.Eventsourced.aroundReceive(Eventsourced.scala:183) [86:com.typesafe.akka.persistence:2.5.4]
	at akka.persistence.Eventsourced.aroundReceive$(Eventsourced.scala:182) [86:com.typesafe.akka.persistence:2.5.4]
	at akka.persistence.UntypedPersistentActor.aroundReceive(PersistentActor.scala:272) [86:com.typesafe.akka.persistence:2.5.4]
	at akka.actor.ActorCell.receiveMessage(ActorCell.scala:527) [83:com.typesafe.akka.actor:2.5.4]
	at akka.actor.ActorCell.invoke(ActorCell.scala:496) [83:com.typesafe.akka.actor:2.5.4]
	at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:257) [83:com.typesafe.akka.actor:2.5.4]
	at akka.dispatch.Mailbox.run(Mailbox.scala:224) [83:com.typesafe.akka.actor:2.5.4]
	at akka.dispatch.Mailbox.exec(Mailbox.scala:234) [83:com.typesafe.akka.actor:2.5.4]
	at akka.dispatch.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260) [83:com.typesafe.akka.actor:2.5.4]
	at akka.dispatch.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339) [83:com.typesafe.akka.actor:2.5.4]
	at akka.dispatch.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979) [83:com.typesafe.akka.actor:2.5.4]
	at akka.dispatch.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107) [83:com.typesafe.akka.actor:2.5.4]

These errors are not observed on jenkins tests, however behaviour is similar resulting in script

./get_ipv4_topology.sh

resulting in error> relevant data model does not exist.

It does not happen very often. In dozens of local tests this is observed only few times across several days, and it is not reproducable straight forward.

ADD1: attachement full karaf.log added.



 Comments   
Comment by Robert Varga [ 22/Mar/18 ]

javax.xml.stream.XMLStreamException: ParseError at [row,col]:[1,1]
Message: Premature end of file.
 

This is not a yangtools issue. Track down the XML file and examine it – I bet it is an XML with a leading empty line

Comment by Robert Varga [ 22/Mar/18 ]

The problem is in ConfigLoader, namely there is nothing guarding against processing incompletely-copied files. So if the file is being copied to the directory, the thread will start processing it while it has not been fully copied – for example just after it has been open for writing.

Comment by Claudio David Gasparini [ 22/Mar/18 ]

Thanks for the feedback rovarga, I'm looking into it.

Regards, 

Comment by Claudio David Gasparini [ 26/Mar/18 ]

https://git.opendaylight.org/gerrit/#/q/topic:BGPCEP-770+(status:open+OR+status:merged)

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