|
When starting a feature via config subsystem sometimes models required by the modules in the feature are not available in md-sal. This results into exception at module factory in case we try to register dataChangeListeners.
Example feature:
<feature name='odl-openflowplugin-nsf-services' version='${project.version}'
description="OpenDaylight :: OpenflowPlugin :: NSF :: Services">
<feature version='${mdsal.version}'>odl-mdsal-broker</feature>
<feature version='${project.version}'>odl-openflowplugin-nsf-model</feature>
<bundle>mvn:org.opendaylight.openflowplugin.applications/topology-manager/${project.version}</bundle>
<bundle>mvn:org.opendaylight.openflowplugin.applications/topology-lldp-discovery/${project.version}</bundle>
<bundle>mvn:org.opendaylight.openflowplugin.applications/forwardingrules-manager/${project.version}</bundle>
<bundle>mvn:org.opendaylight.controller/liblldp/${sal.api.version}</bundle>
<configfile finalname="etc/opendaylight/karaf/30-forwardingrules-manager.xml">mvn:org.opendaylight.openflowplugin.applications/forwardingrules-manager-config/${project.version}/xml/config</configfile>
</feature>
Here module factory of forwardingrulesmanager failed because of missing FlowCapableNode augmentation class:
>feature:install odl-openflowplugin-flow-services-rest
Exception in thread "pool-36-thread-1" java.lang.IllegalArgumentException: Supplied Instance Identifier InstanceIdentifier
{targetType=interface org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNodeConnector, path=[org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes, org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node, org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnector, org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNodeConnector]}
is not valid.
at com.google.common.base.Preconditions.checkArgument(Preconditions.java:145)
at org.opendaylight.yangtools.binding.data.codec.impl.BindingCodecContext.getCodecContextNode(BindingCodecContext.java:128)
at org.opendaylight.yangtools.binding.data.codec.impl.InstanceIdentifierCodec.serialize(InstanceIdentifierCodec.java:29)
at org.opendaylight.yangtools.binding.data.codec.impl.InstanceIdentifierCodec.serialize(InstanceIdentifierCodec.java:19)
at org.opendaylight.yangtools.binding.data.codec.impl.BindingNormalizedNodeCodecRegistry.toYangInstanceIdentifier(BindingNormalizedNodeCodecRegistry.java:87)
at org.opendaylight.controller.md.sal.binding.impl.BindingToNormalizedNodeCodec.toNormalized(BindingToNormalizedNodeCodec.java:64)
at org.opendaylight.controller.md.sal.binding.impl.AbstractForwardedDataBroker.registerDataChangeListener(AbstractForwardedDataBroker.java:68)
at org.opendaylight.openflowplugin.applications.topology.manager.DataChangeListenerImpl.<init>(DataChangeListenerImpl.java:50)
at org.opendaylight.openflowplugin.applications.topology.manager.TerminationPointChangeListenerImpl.<init>(TerminationPointChangeListenerImpl.java:41)
at org.opendaylight.openflowplugin.applications.topology.manager.FlowCapableTopologyProvider.onSessionInitiated(FlowCapableTopologyProvider.java:56)
at org.opendaylight.controller.md.sal.binding.util.BindingContextUtils.createProviderContextAndInitialize(BindingContextUtils.java:56)
at org.opendaylight.controller.sal.binding.impl.RootBindingAwareBroker.registerProvider(RootBindingAwareBroker.java:172)
at org.opendaylight.controller.sal.binding.impl.RootBindingAwareBroker.registerProvider(RootBindingAwareBroker.java:160)
at org.opendaylight.controller.sal.binding.api.AbstractBindingAwareProvider.onBrokerAvailable(AbstractBindingAwareProvider.java:18)
at org.opendaylight.controller.sal.binding.api.AbstractBrokerAwareActivator$1$1.run(AbstractBrokerAwareActivator.java:34)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
|