|
I attach a datachangelistener to the list "sfc-service-function" in the module below. Whenever I create a new ServiceFunction I get the following error on the console before even onDataChanged() gets actually called back:
osgi> 2014-07-08 00:57:26.309 PDT [pool-14-thread-1] WARN o.o.y.s.b.g.i.RuntimeGeneratedMappingServiceImpl - Failed to deserialize entry (urn:cisco:params:xml:ns:yang:sfc-sfc?revision=2014-07-01)service-function-chains/(urn:cisco:params:xml:ns:yang:sfc-sfc?revision=2014-07-01)service-function-chain[
{(urn:cisco:params:xml:ns:yang:sfc-sfc?revision=2014-07-01)name=Chain-1}
]/(urn:cisco:params:xml:ns:yang:sfc-sfc?revision=2014-07-01)sfc-service-function[
{(urn:cisco:params:xml:ns:yang:sfc-sfc?revision=2014-07-01)name=dpi-ut}
]
2014-07-08 00:57:26.318 PDT [pool-14-thread-1] WARN o.o.c.m.s.b.i.AbstractForwardedDataBroker - Failed to transform (urn:cisco:params:xml:ns:yang:sfc-sfc?revision=2014-07-01)service-function-chains/(urn:cisco:params:xml:ns:yang:sfc-sfc?revision=2014-07-01)service-function-chain/(urn:cisco:params:xml:ns:yang:sfc-sfc?revision=2014-07-01)service-function-chain[
{(urn:cisco:params:xml:ns:yang:sfc-sfc?revision=2014-07-01)name=Chain-1}
]/(urn:cisco:params:xml:ns:yang:sfc-sfc?revision=2014-07-01)sfc-service-function/(urn:cisco:params:xml:ns:yang:sfc-sfc?revision=2014-07-01)sfc-service-function[
{(urn:cisco:params:xml:ns:yang:sfc-sfc?revision=2014-07-01)name=dpi-ut}
]=ImmutableMapEntryNode{nodeIdentifier=(urn:cisco:params:xml:ns:yang:sfc-sfc?revision=2014-07-01)sfc-service-function[
{(urn:cisco:params:xml:ns:yang:sfc-sfc?revision=2014-07-01)name=dpi-ut}
], value=[ImmutableLeafNode{nodeIdentifier=(urn:cisco:params:xml:ns:yang:sfc-sfc?revision=2014-07-01)type, value=dpi, attributes={}}, ImmutableLeafNode{nodeIdentifier=(urn:cisco:params:xml:ns:yang:sfc-sfc?revision=2014-07-01)name, value=dpi-ut, attributes={}}], attributes={}}, omitting it
org.opendaylight.yangtools.yang.data.impl.codec.DeserializationException: Entry deserialization failed
at org.opendaylight.yangtools.sal.binding.generator.impl.RuntimeGeneratedMappingServiceImpl.fromDataDom(RuntimeGeneratedMappingServiceImpl.java:311) ~[bundlefile:na]
at org.opendaylight.controller.config.yang.md.sal.binding.impl.RuntimeMappingModule$RuntimeGeneratedMappingServiceProxy.fromDataDom(RuntimeMappingModule.java:151) ~[bundlefile:na]
at org.opendaylight.controller.md.sal.binding.impl.BindingToNormalizedNodeCodec.toBindingImpl(BindingToNormalizedNodeCodec.java:202) ~[bundlefile:na]
at org.opendaylight.controller.md.sal.binding.impl.BindingToNormalizedNodeCodec.toBinding(BindingToNormalizedNodeCodec.java:132) ~[bundlefile:na]
at org.opendaylight.controller.md.sal.binding.impl.BindingToNormalizedNodeCodec.toBinding(BindingToNormalizedNodeCodec.java:258) ~[bundlefile:na]
at org.opendaylight.controller.md.sal.binding.impl.AbstractForwardedDataBroker.toBinding(AbstractForwardedDataBroker.java:103) ~[bundlefile:na]
at org.opendaylight.controller.md.sal.binding.impl.AbstractForwardedDataBroker$TranslatedDataChangeEvent.getCreatedData(AbstractForwardedDataBroker.java:187) [bundlefile:na]
at org.opendaylight.controller.md.sal.binding.impl.AbstractForwardedDataBroker$TranslatedDataChangeEvent.toString(AbstractForwardedDataBroker.java:244) [bundlefile:na]
at java.lang.String.valueOf(String.java:2854) [na:1.7.0_51]
at java.lang.StringBuilder.append(StringBuilder.java:128) [na:1.7.0_51]
at org.opendaylight.controller.md.sal.binding.impl.LegacyDataChangeEvent$ConfigurationChangeEvent.toString(LegacyDataChangeEvent.java:201) [bundlefile:na]
at org.opendaylight.sfc.provider.SfcProviderSfcEntryDataListener.onDataChanged(SfcProviderSfcEntryDataListener.java:30) [bundlefile:na]
at org.opendaylight.controller.md.sal.binding.impl.ForwardedBackwardsCompatibleDataBroker$BackwardsCompatibleConfigurationDataChangeInvoker.onDataChanged(ForwardedBackwardsCompatibleDataBroker.java:452) [bundlefile:na]
at org.opendaylight.controller.md.sal.binding.impl.AbstractForwardedDataBroker$TranslatingDataChangeInvoker.onDataChanged(AbstractForwardedDataBroker.java:162) [bundlefile:na]
at org.opendaylight.controller.md.sal.dom.store.impl.ChangeListenerNotifyTask.run(ChangeListenerNotifyTask.java:33) [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]
Caused by: java.lang.IllegalStateException: Failed to lookup instantiated type for path SchemaPath [path=[(urn:cisco:params:xml:ns:yang:sfc-sfc?revision=2014-07-01)service-function-chains, (urn:cisco:params:xml:ns:yang:sfc-sfc?revision=2014-07-01)service-function-chain, (urn:cisco:params:xml:ns:yang:sfc-sfc?revision=2014-07-01)sfc-service-function], absolute=true]
at com.google.common.base.Preconditions.checkState(Preconditions.java:176) ~[bundlefile:na]
at org.opendaylight.yangtools.sal.binding.generator.impl.LazyGeneratedCodecRegistry.getClassForPath(LazyGeneratedCodecRegistry.java:201) ~[bundlefile:na]
at org.opendaylight.yangtools.sal.binding.generator.impl.InstanceIdentifierCodecImpl.deserializeNodeIdentifierWithPrecicates(InstanceIdentifierCodecImpl.java:108) ~[bundlefile:na]
at org.opendaylight.yangtools.sal.binding.generator.impl.InstanceIdentifierCodecImpl.deserializePathArgument(InstanceIdentifierCodecImpl.java:221) ~[bundlefile:na]
at org.opendaylight.yangtools.sal.binding.generator.impl.InstanceIdentifierCodecImpl.deserialize(InstanceIdentifierCodecImpl.java:69) ~[bundlefile:na]
at org.opendaylight.yangtools.sal.binding.generator.impl.RuntimeGeneratedMappingServiceImpl.fromDataDom(RuntimeGeneratedMappingServiceImpl.java:308) ~[bundlefile:na]
CODE USED TO ATTACH LISTENER TO LIST
SfcProviderSfcEntryDataListener sfcProviderSfcEntryDataListener = new SfcProviderSfcEntryDataListener();
final ListenerRegistration<DataChangeListener> sfcEntryDataChangeListenerRegistration =
dataBrokerService.registerDataChangeListener( OpendaylightSfc.sfcEntryIID, sfcProviderSfcEntryDataListener );
public static final InstanceIdentifier<ServiceFunctionChain> sfcEntryIID =
InstanceIdentifier.builder(ServiceFunctionChains.class)
.child(ServiceFunctionChain.class).build();
YANG MODULE
module service-function-chain {
namespace "urn:cisco:params:xml:ns:yang:sfc-sfc";
prefix sfc-sfc;
import ietf-inet-types
{ prefix inet; }
import ietf-yang-types
{ prefix yang; }
import service-function
{prefix sfc-sf; }
organization "Cisco Systems, Inc.";
contact "Reinaldo Penno <repenno@cisco.com>";
description
"This module contains a collection of YANG definitions for
managing service function chains."
revision 2014-07-01
{
description
"Revised based on Opendaylight Project feedback";
}
grouping service-function-chain-grouping {
list service-function-chain {
description
"A service chain defines the required functions and
associated order (service-function1 --> service-function 2) that
must be applied to packets and/or frames. A service chain does
not specify the network location or specific instance of service
functions (e.g. firewall1 vs. firewall2).";
key "name";
leaf name
{
type string;
description
"the name of the service function chain";
}
list sfc-service-function {
key "name";
leaf name
{
type string;
description
"The name of the service function.";
}
leaf type
{
type string;
mandatory true;
description
"Service Function Type from service-function-type.yang.";
}
ordered-by user;
description
"A list of service functions that compose the service chain";
}
}
}
// Service Function Chains
container service-function-chains
{
uses service-function-chain-grouping;
}
}
|