augmenting flow operations and feedback on the model driven md_sal approach in opendaylight

40
Augmenting Flow Operations and Feedback on the Model Driven MD_SAL Approach in OpenDaylight Augment a Layer Augment a Layer Augment a Layer Augment a Layer Root nodes nodes/ (flowcapable) tables table/1 flows flow/1 (OXM) node- connetors node- connetor/1 match Instructions Apply/Write Actions Actions Augment a Layer TunnelIPv4Match SetTunnelIPv4DesMatch Ipv4Destination SetTunnelIPv4DesMatch Ipv4Destination IPv4Match TunnelIPv4DestMatch Brent Salisbury RedHat May 19, 2014 @networkstatic [email protected]

Upload: brent-salisbury

Post on 12-May-2015

1.167 views

Category:

Software


3 download

DESCRIPTION

Augmenting Flow Operations and Feedback on the Model Driven MD_SAL Approach in OpenDaylight. Will post more details in a blog entry at http://networkstatic.net as soon as time permits for those looking for more information. Cheers, -Brent

TRANSCRIPT

Page 1: Augmenting Flow Operations and Feedback on the Model Driven MD_SAL Approach in OpenDaylight

Augmenting Flow Operations and Feedback on the Model Driven MD_SAL Approach in

OpenDaylight

Augment aLayer

Augment aLayer

Augment aLayer

Augment aLayer

Root

nodes

nodes/(flowcapable)

tables

table/1

flows

flow/1(OXM)

node-connetors

node-connetor/1

match Instructions

Apply/Write Actions

Actions

Augment aLayer

TunnelIPv4Match

SetTunnelIPv4DesMatchIpv4Destination

SetTunnelIPv4DesMatchIpv4Destination

IPv4Match

TunnelIPv4DestMatch

Brent Salisbury!RedHat !May 19, 2014!@[email protected]

Page 2: Augmenting Flow Operations and Feedback on the Model Driven MD_SAL Approach in OpenDaylight

OVS

OpenStackNeutron

ControllerNB-Api

OVSDBNbound

OVSDBSBound

OpenFlowJava

OVSDBNeutron

OFPlugin

LibvirtRabbitMQ

ControllerSAL

OVSDBOpenFlow

Example OpenStack Consumption

Page 3: Augmenting Flow Operations and Feedback on the Model Driven MD_SAL Approach in OpenDaylight

### OpenFlowJava OXM/NXMs ###!!

!

openflowjava/openflow-protocol-api/src/main/yang/openflow-extensible-match.yang

        identity foo_dest {

            base match-field;

            description "Field for Foo";

        }

Page 4: Augmenting Flow Operations and Feedback on the Model Driven MD_SAL Approach in OpenDaylight

One Example of Extension Rational

!ovs-ofctl add-flow -O OpenFlow13 br-int \ "table=16,priority=16100,tcp,tp_dst=22,tun_id=0x5,in_port=10 actions=goto_table:20" ovs-ofctl add-flow -O OpenFlow13 br-int \ "table=16,priority=16200,tcp,tp_src=22,tun_id=0x5,in_port=10 actions=goto_table:20"

• The OpenFlow Spec still today favors reactive packet processing. • OVS is the defacto OSS software model. Rough consensus and running code.

• Access-Lists with OFv1.3 Doesn't Scale N^2 and worse • Reading TCP State Enables Basic Filtering

Page 5: Augmenting Flow Operations and Feedback on the Model Driven MD_SAL Approach in OpenDaylight

Other Extension Enablements

• ARP Responders. REG(n) - Copy headers from one field to another.

• Tunnel IPv4/6 Endpoint Source/Destination. • Recirc to avoid unnecessarily large flow tables. • Functionality required if we want to come close to

OpenStack Neutron feature parity. • Take advantage of OSS innovation, rather then

OpenFlow HW standards bodies.

Page 6: Augmenting Flow Operations and Feedback on the Model Driven MD_SAL Approach in OpenDaylight

OF OXM/NXM Constantspublic abstract class OxmMatchConstants { /** OXM Clazz */ /** Backward compatibility with NXM */ public static final int NXM_0_CLASS = 0x0000; /** Backward compatibility with NXM */ public static final int NXM_1_CLASS = 0x0001; /** Basic class for OpenFlow */ public static final int OPENFLOW_BASIC_CLASS = 0x8000; /** Experimenter class */ public static final int EXPERIMENTER_CLASS = 0xFFFF; !

/** OPENFLOW_BASIC_CLASS Constant Values */ public static final int ICMPV6_TYPE = 29; /** ICMPv6 code. */ public static final int ICMPV6_CODE = 30; /** Target address for ND. */ public static final int IPV6_ND_TARGET = 31; /** Source link-layer for ND. */ public static final int IPV6_ND_SLL = 32;

!/** NXM_1_CLASS Constant Values */ /** NXM IPv4 Tunnel Source */ public static final int NXM_NX_TUN_IPV4_SRC = 31; /** NXM IPv4 Tunnel Destination */ public static final int NXM_NX_TUN_IPV4_DST = 32; /** NXM TCP_Flag reads */ public static final int NXM_NX_TCP_FLAG = 34;

Page 7: Augmenting Flow Operations and Feedback on the Model Driven MD_SAL Approach in OpenDaylight

Controller:model-flow-base:src/main/yang/opendaylight-match-types.yang!!grouping "tunnel-ipv4-match-fields" { leaf tunnel-ipv4-source { description "IPv4 tunnel source address."; type inet:ipv4-prefix; } leaf tunnel-ipv4-destination { description "IPv4 tunnel destination address."; type inet:ipv4-prefix; } } !

Page 8: Augmenting Flow Operations and Feedback on the Model Driven MD_SAL Approach in OpenDaylight

Controller:model-flow-base:src/main/yang/opendaylight-match-types.yang identity mpls_label {! base match-field;! description "Match for MPLS label.";!    }! identity mpls_tc {! base match-field;! description "Match for MPLS TC.";!    }! identity mpls_bos {! base match-field;! description "Match for MPLS BoS bit.";!    }! identity pbb_isid {! base match-field;! description "Match for PBB I-SID.";!    }! identity tunnel_id {! base match-field;! description "Match for Logical Port Metadata";!    }! identity tunnel_ipv4_dst {! base match-field;! description "Match for Logical Port Metadata";!    }! identity tunnel_ipv4_src {! base match-field;! description "Match for Logical Port Metadata";!    }!        ! grouping set-field-match {! list set-field-match {!! key "match-type";! leaf match-type {! type identityref {! base match-field;!                }!            }! leaf has-mask {! type boolean;! } !        }!    }

Page 9: Augmenting Flow Operations and Feedback on the Model Driven MD_SAL Approach in OpenDaylight

Generated Classes

Page 10: Augmenting Flow Operations and Feedback on the Model Driven MD_SAL Approach in OpenDaylight

Builders and Augmentations

Page 11: Augmenting Flow Operations and Feedback on the Model Driven MD_SAL Approach in OpenDaylight

Define the Data Type in the Yang Model

// openflowjava - openflow-augments.yang augment "/oxm:oxm-container/oxm:match-entries" { ext:augment-identifier "tcp-flag-match-entry"; leaf tcp-flag { type uint16; } }

// openflowjava - openflow-extensible-match.yang identity tcp_flag { base match-field; description "NXM field for NXM_NX_TUN_IPV4_SRC"; }

Page 12: Augmenting Flow Operations and Feedback on the Model Driven MD_SAL Approach in OpenDaylight

Binding Inheritance

package org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.MatchField; import org.opendaylight.yangtools.yang.common.QName; /** NXM field for NXM_NX_TUN_IPV4_SRC **/ public abstract class TcpFlag extends MatchField { public static final QName QNAME = org.opendaylight.yangtools.yang.common.QName.create ("urn:opendaylight:openflow:oxm","2013-07-31","tcp_flag"); public TcpFlag() { } }

package org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731; import org.opendaylight.yangtools.yang.binding.BaseIdentity; import org.opendaylight.yangtools.yang.common.QName; /** Base identity for OXM Fields **/ public abstract class MatchField extends BaseIdentity { public static final QName QNAME = org.opendaylight.yangtools.yang.common.QName.create ("urn:opendaylight:openflow:oxm","2013-07-31","match-field"); public MatchField() { } }

package org.opendaylight.yangtools.yang.binding; !public abstract class BaseIdentity { public static final org.opendaylight.yangtools.yang.binding.BaseIdentity INSTANCE; protected BaseIdentity() { /* compiled code */ } }

Page 13: Augmenting Flow Operations and Feedback on the Model Driven MD_SAL Approach in OpenDaylight

Match Initializer

public static void registerMatchEntrySerializers(SerializerRegistry serializerRegistry) { // register OF v1.3 OpenflowBasicClass match entry serializers Class<OpenflowBasicClass> oxmClass = OpenflowBasicClass.class; OF13MatchEntriesRegistryHelper<OpenflowBasicClass> registryHelper = new OF13MatchEntriesRegistryHelper<>(EncodeConstants.OF13_VERSION_ID, oxmClass, serializerRegistry); registryHelper.registerSerializer(InPort.class, new OxmInPortSerializer()); registryHelper.registerSerializer(InPhyPort.class, new OxmInPhyPortSerializer()); !// register OF v1.3 NXM1Class match entry serializer Class<Nxm1Class> nxm1Class = Nxm1Class.class; OF13MatchEntriesRegistryHelper<Nxm1Class> nxm1RegistryHelper = new OF13MatchEntriesRegistryHelper<>(EncodeConstants.OF13_VERSION_ID, nxm1Class, serializerRegistry); nxm1RegistryHelper.registerSerializer(TcpFlag.class, new NxmTcpFlagSerializer());

}

Page 14: Augmenting Flow Operations and Feedback on the Model Driven MD_SAL Approach in OpenDaylight

OXM Serializerpublic class NxmTcpFlagSerializer extends AbstractOxmMatchEntrySerializer { @Override public void serialize(MatchEntries entry, ByteBuf outBuffer) { super.serialize(entry, outBuffer); outBuffer.writeShort(entry.getAugmentation(TcpFlagMatchEntry.class).getTcpFlag().shortValue()); writeMask(entry, outBuffer, getValueLength()); } @Override protected int getOxmClassCode() { return OxmMatchConstants.NXM_1_CLASS; } @Override protected int getOxmFieldCode() { return OxmMatchConstants.NXM_NX_TCP_FLAG; } @Override protected int getValueLength() { return EncodeConstants.SIZE_OF_SHORT_IN_BYTES; } }

Page 15: Augmenting Flow Operations and Feedback on the Model Driven MD_SAL Approach in OpenDaylight

Connecting Low-Level and High Level Models!• Statically defined conversions do NOT get destroyed when a model deprecates fields. • OpenflowPlugin Yang File Match_Types use hyphens ("-") while Table_Types use underscores ("_"). • When testing it might help to name things uniquely so it is obvious if you build the wrong directory and all of your classes and pojos have

now refactored themselves into something else. Being able to spot that is the difference between t-shooting for 15 minutes vs. 4 hours. • Conversion is pretty easy to follow the patterns. Heavily typed in each project. • Recommend unique naming between low/high level models to avoid human error. • Lots of boiler plate code that could use some abstraction. • TODO: Create generic interfaces for the user that has constructors for common values/routines. • Augment to include JSON models which would is more native to developers then networking specific Yang. • Higher order models should contain higher order constructs rather then primitives such as uint16, uint32 etc, or at least some enums. • Logging needs to be sanitized. Current logging adds confusion if they are not proficient in the Yangtools implementation. • Yangtools is YangCore. Add the ability to augment from a given project, as opposed to only upstream in the MD_SAL.

else if (currMatchType.equals(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.TcpFlag.class)) {! setMatchEntry(matchEntryBuilder, org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.TcpFlag.class, currMatch.isHasMask());! }

else if (currMatchType! .equals(TcpFlag.class)) {! setMatchEntry(matchEntryBuilder, TcpFlag.class, currMatch.isHasMask());! }

.equals

Openflowjava Openflowplugin Controller

Page 16: Augmenting Flow Operations and Feedback on the Model Driven MD_SAL Approach in OpenDaylight

OXM Deserializerpublic class NxmTcpFlagDeserializer extends AbstractOxmMatchEntryDeserializer implements OFDeserializer<MatchEntries> { @Override public MatchEntries deserialize(ByteBuf input) { MatchEntriesBuilder builder = processHeader(getOxmClass(), getOxmField(), input); addTcpFlagAugmentation(input, builder); if (builder.isHasMask()) { OxmMaskDeserializer.addMaskAugmentation(builder, input, EncodeConstants.SIZE_OF_SHORT_IN_BYTES); } return builder.build(); } private static void addTcpFlagAugmentation(ByteBuf input, MatchEntriesBuilder builder) { TcpFlagMatchEntryBuilder tcpFlagMatchEntryBuilder = new TcpFlagMatchEntryBuilder(); Short tcpFlag = input.readShort(); tcpFlagMatchEntryBuilder.setTcpFlag(tcpFlag.shortValue()); builder.addAugmentation(TcpFlagMatchEntry.class, tcpFlagMatchEntryBuilder.build()); } @Override protected Class<? extends MatchField> getOxmField() { return TcpFlag.class; } @Override protected Class<? extends Clazz> getOxmClass() { return Nxm1Class.class; } }

Page 17: Augmenting Flow Operations and Feedback on the Model Driven MD_SAL Approach in OpenDaylight

OpenFlow Plugin MatchConvertorImpl.java

!Layer3Match layer3Match = match.getLayer3Match(); if (layer3Match != null) { if (layer3Match instanceof Ipv4Match) { Ipv4Match ipv4Match = (Ipv4Match) layer3Match; if (ipv4Match.getIpv4Source() != null) { matchEntriesList.add(toOfIpv4Prefix(Ipv4Src.class, ipv4Match.getIpv4Source())); } if (ipv4Match.getIpv4Destination() != null) { matchEntriesList.add(toOfIpv4Prefix(Ipv4Dst.class, ipv4Match.getIpv4Destination())); } } // NXM Tunnel Src/Dst if (layer3Match instanceof TunnelIpv4Match) { TunnelIpv4Match tunnelIpv4Src = (TunnelIpv4Match) layer3Match; if (tunnelIpv4Src.getTunnelIpv4Source() != null) { matchEntriesList.add(toOfIpv4Prefix(TunnelIpv4Src.class, tunnelIpv4Src.getTunnelIpv4Source())); } if (tunnelIpv4Src.getTunnelIpv4Destination() != null) { matchEntriesList.add(toOfIpv4Prefix(TunnelIpv4Dst.class, tunnelIpv4Src.getTunnelIpv4Destination())); }

Page 18: Augmenting Flow Operations and Feedback on the Model Driven MD_SAL Approach in OpenDaylight

OpenFlow Plugin TableFeaturesConvertor.java

// NXM Tunnel IPv4 Dst } else if (currMatchType.equals(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.TunnelIpv4Dst.class)) { setMatchEntry(matchEntryBuilder, TunnelIpv4Dst.class, currMatch.isHasMask()); // NXM Tunnel IPv4 Src } else if (currMatchType.equals(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.TunnelIpv4Src.class)) { setMatchEntry(matchEntryBuilder, TunnelIpv4Src.class, currMatch.isHasMask()); // NXM TCP_Flag } else if (currMatchType.equals(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.TcpFlag.class)) { setMatchEntry(matchEntryBuilder, TcpFlag.class, currMatch.isHasMask()); }

Page 19: Augmenting Flow Operations and Feedback on the Model Driven MD_SAL Approach in OpenDaylight

OpenFlowPlugin TableFeaturesReplyConvertor.java

// NXM Tunnel IPv4 Dst } else if (currMatchType.equals(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.TunnelIpv4Dst.class)) { setMatchEntry(matchEntryBuilder, TunnelIpv4Dst.class, currMatch.isHasMask()); // NXM Tunnel IPv4 Src } else if (currMatchType.equals(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.TunnelIpv4Src.class)) { setMatchEntry(matchEntryBuilder, TunnelIpv4Src.class, currMatch.isHasMask()); // NXM TCP_Flag } else if (currMatchType.equals(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.TcpFlag.class)) { setMatchEntry(matchEntryBuilder, TcpFlag.class, currMatch.isHasMask()); } setFieldMatchBuilder.setMatchType(salMatchField); if (setHasMask) { setFieldMatchBuilder.setHasMask(currMatch.isHasMask()); } setFieldMatchList.add(setFieldMatchBuilder.build()); } return setFieldMatchList; }

Page 20: Augmenting Flow Operations and Feedback on the Model Driven MD_SAL Approach in OpenDaylight

Test-Provider-Service (openflowplugin)

• Start Here!!

• Following along if you have not used this service yet, it is likely the most valuable component for the user for educating, testing and validation.

!

$ git clone https://git.opendaylight.org/gerrit/openflowplugin.git

$ cd openflowplugin/distribution/base/

$ mvn clean install -DskipTests

$ cd target/distributions-openflowplugin-base-0.0.3-SNAPSHOT-osgipackage/opendaylight/

$ ./run.sh

Page 21: Augmenting Flow Operations and Feedback on the Model Driven MD_SAL Approach in OpenDaylight

MatchBuilder && ActionBuilder private static MatchBuilder createVlanMatch() { MatchBuilder match = new MatchBuilder(); VlanMatchBuilder vlanBuilder = new VlanMatchBuilder(); // vlan match VlanIdBuilder vlanIdBuilder = new VlanIdBuilder(); VlanId vlanId = new VlanId(10); VlanPcp vpcp = new VlanPcp((short) 3); vlanBuilder.setVlanPcp(vpcp); vlanIdBuilder.setVlanId(vlanId); vlanIdBuilder.setVlanIdPresent(true); vlanBuilder.setVlanId(vlanIdBuilder.build()); match.setVlanMatch(vlanBuilder.build()); return match; } !! private static InstructionsBuilder createGotoTableInstructions() { ! GoToTableBuilder aab = new GoToTableBuilder(); aab.setTableId((short) 2); ! InstructionBuilder ib = new InstructionBuilder(); ib.setInstruction(new GoToTableCaseBuilder().setGoToTable(aab.build()).build()); ! // Put our Instruction in a list of Instructions InstructionsBuilder isb = new InstructionsBuilder(); List<Instruction> instructions = new ArrayList<Instruction>(); instructions.add(ib.build()); isb.setInstruction(instructions); return isb; }

Page 22: Augmenting Flow Operations and Feedback on the Model Driven MD_SAL Approach in OpenDaylight

OpenflowpluginTestCommandProvider case "f48": id += 48; flow.setMatch(createTunnelIDMatch().build()); flow.setInstructions(createGotoTableInstructions().build()); break; case "f49": id += 49; flow.setMatch(createVlanMatch().build()); flow.setInstructions(createMeterInstructions().build()); break;

Run the above block of code from the OSGI console: osgi> addMDFlow foo:node:1 f49 Or attach an OVS node and use its DPID (printNodes for DPID):

osgi> addMDFlow openflow:213570950745421 f13

Page 23: Augmenting Flow Operations and Feedback on the Model Driven MD_SAL Approach in OpenDaylight

RM Flowmod

removeMDFlow openflow:213570950745421 f47

Page 24: Augmenting Flow Operations and Feedback on the Model Driven MD_SAL Approach in OpenDaylight

Remote OSGI DebuggingEclipse Setup- http://alagalah.wordpress.com/2013/12/14/debugging-opendaylight-in-eclipse/

Start OSGI with remote debugging enabled: # ./run.sh -debugport 5005 -debugsuspend

Page 25: Augmenting Flow Operations and Feedback on the Model Driven MD_SAL Approach in OpenDaylight

Can be run against a real datapath also

vi /usr/share/openvswitch/scripts/ovs-ctl!! # Start ovs-vswitchd. set ovs-vswitchd unix:"$DB_SOCK" set "$@" -vconsole:emer -vsyslog:dbg -vfile:dbg if test X"$MLOCKALL" != Xno; then set "$@" --mlockall

2014-05-15T23:27:21.927Z|08067|poll_loop|DBG|wakeup due to 0-ms timeout at ofproto/ofproto-dpif.c:1595 (0% CPU usage) 2014-05-15T23:27:21.934Z|08068|poll_loop|DBG|wakeup due to [POLLIN] on fd 34 (192.168.1.49:60967<->192.168.1.47:6633) at lib/stream-fd.c:124 (0% CPU usage) 2014-05-15T23:27:21.934Z|08069|vconn|DBG|tcp:192.168.1.47:6633: received: OFPT_BARRIER_REQUEST (OF1.3) (xid=0x175): 2014-05-15T23:27:21.934Z|08070|vconn|DBG|tcp:192.168.1.47:6633: sent (Success): OFPT_BARRIER_REPLY (OF1.3) (xid=0x175): 2014-05-15T23:27:21.936Z|08071|poll_loop|DBG|wakeup due to [POLLIN] on fd 34 (192.168.1.49:60967<->192.168.1.47:6633) at lib/stream-fd.c:124 (0% CPU usage) 2014-05-15T23:27:21.936Z|08072|vconn|DBG|tcp:192.168.1.47:6633: received: OFPST_FLOW request (OF1.3) (xid=0x174): table=10 tun_id=0x582,dl_dst=01:00:00:00:00:00/01:00:00:00:00:00!2014-05-15T23:27:21.936Z|08073|vconn|DBG|tcp:192.168.1.47:6633: sent (Success): OFPST_FLOW reply (OF1.3) (xid=0x174): 2014-05-15T23:27:21.937Z|08074|poll_loop|DBG|wakeup due to [POLLIN] on fd 34 (192.168.1.49:60967<->192.168.1.47:6633) at lib/stream-fd.c:124 (0% CPU usage) 2014-05-15T23:27:21.937Z|08075|vconn|DBG|tcp:192.168.1.47:6633: received: OFPT_FLOW_MOD (OF1.3) (xid=0x176): ADD table:10 priority=16384,tun_id=0x582,dl_dst=01:00:00:00:00:00/01:00:00:00:00:00 send_flow_rem actions=output:2,goto_table:20

Page 26: Augmenting Flow Operations and Feedback on the Model Driven MD_SAL Approach in OpenDaylight

When TestOpenFlowProvider Breaksosgi> printNodes

Nodes connected to this controller :

[MD_SAL|openflow:112583260431181]

osgi> addMDFlow openflow:112583260431181 f45

$ addMDFlow openflow:12345678910 f86

osgi> gogo: InvocationTargetException: null

===========================================

Rebuild Controller! not just opendaylight/md-sal/model/

$ cd controller/

$ mvn clean install

!### For Netty ByteBuff Debugging ###

setLogLevel org.opendaylight.openflowjava.protocol.impl.core DEBUG !!!

Page 27: Augmenting Flow Operations and Feedback on the Model Driven MD_SAL Approach in OpenDaylight

Debugging FlowMods in OVS

$ vi /usr/share/openvswitch/scripts/ovs-ctl!! # Start ovs-vswitchd. set ovs-vswitchd unix:"$DB_SOCK" set "$@" -vconsole:emer -vsyslog:dbg -vfile:dbg if test X"$MLOCKALL" != Xno; then set "$@" --mlockall !alias ologs="tail -n 300 /var/log/openvswitch/ovs-vswitchd.log" alias ologs="tail -n 300 /var/log/openvswitch/ovs-vswitchd.log" alias ologf="tail -f /var/log/openvswitch/ovs-vswitchd.log" alias ologd='echo > /var/log/openvswitch/ovs-vswitchd.log' alias ologm='grep -A 20 -B 20 OFPT_FLOW_MOD /var/log/openvswitch/ovs-vswitchd.log' alias ologd='echo > /var/log/openvswitch/ovs-vswitchd.log' alias ologm='grep -A 20 -B 20 OFPT_FLOW_MOD /var/log/openvswitch/ovs-vswitchd.log' alias ologd='echo > /var/log/openvswitch/ovs-vswitchd.log'

setLogLevel org.opendaylight.openflowjava.protocol.impl.core DEBUG

However, best bet is to use OVS debugging logs.

Page 28: Augmenting Flow Operations and Feedback on the Model Driven MD_SAL Approach in OpenDaylight

When You Cant Get Anything to Work Anymore

$ rm -r ~/.m2/repository/org/opendaylight/openflowplugin/ $ rm -r ~/.m2/repository/org/opendaylight/openflowjava/ $ rm -r ~/.m2/repository/org/opendaylight/controller/model/ $ rm -r ~/.m2/repository/org/opendaylight/controller/md/

Page 29: Augmenting Flow Operations and Feedback on the Model Driven MD_SAL Approach in OpenDaylight

If a binding is missing.!

• If an auto-generated class/POJO is missing, all projects (ofjava/ofplug/controller) will compile but fail on Bind attempts.

• More compile time tests and updated aliases to remove -Dskiptests

Page 30: Augmenting Flow Operations and Feedback on the Model Driven MD_SAL Approach in OpenDaylight

OSGI Logging• If we truly want community adoption, then prior to Helium,

please lets focus on OSGI logs generated by MD_SAL. • As a consumer of the MD_SAL it is easily the most frustrating

aspect and the most time consuming aspect.

Page 31: Augmenting Flow Operations and Feedback on the Model Driven MD_SAL Approach in OpenDaylight

How Does Inventory Work?java.lang.NullPointerException: List node (urn:opendaylight:flow:inventory?revision=2013-08-19)action MUST contain leaf (urn:opendaylight:flow:inventory?revision=2013-08-19)order with value. at com.google.common.base.Preconditions.checkNotNull(Preconditions.java:235) ~[na:na] at org.opendaylight.controller.md.sal.common.impl.util.compat.DataNormalizationOperation$ListItemNormalization.createBuilder(DataNormalizationOperation.java:280) ~[na:na] at org.opendaylight.controller.md.sal.common.impl.util.compat.DataNormalizationOperation$CompositeNodeNormalizationOperation.normalize(DataNormalizationOperation.java:167) ~[na:na] at org.opendaylight.controller.md.sal.common.impl.util.compat.DataNormalizationOperation$CompositeNodeNormalizationOperation.normalize(DataNormalizationOperation.java:196) ~[na:na] at org.opendaylight.controller.md.sal.common.impl.util.compat.DataNormalizationOperation$CompositeNodeNormalizationOperation.normalize(DataNormalizationOperation.java:193) ~[na:na] at org.opendaylight.controller.md.sal.common.impl.util.compat.DataNormalizationOperation$CompositeNodeNormalizationOperation.normalize(DataNormalizationOperation.java:196) ~[na:na] at org.opendaylight.controller.md.sal.common.impl.util.compat.DataNormalizationOperation$CompositeNodeNormalizationOperation.normalize(DataNormalizationOperation.java:193) ~[na:na] at org.opendaylight.controller.md.sal.common.impl.util.compat.DataNormalizationOperation$CompositeNodeNormalizationOperation.normalize(DataNormalizationOperation.java:196) ~[na:na] at org.opendaylight.controller.md.sal.common.impl.util.compat.DataNormalizationOperation$CompositeNodeNormalizationOperation.normalize(DataNormalizationOperation.java:193) ~[na:na] at org.opendaylight.controller.md.sal.common.impl.util.compat.DataNormalizationOperation$CompositeNodeNormalizationOperation.normalize(DataNormalizationOperation.java:196) ~[na:na] at org.opendaylight.controller.md.sal.common.impl.util.compat.DataNormalizer.toNormalized(DataNormalizer.java:115) ~[na:na] at org.opendaylight.controller.md.sal.common.impl.util.compat.DataNormalizer.toNormalized(DataNormalizer.java:76) ~[na:na] at org.opendaylight.controller.md.sal.binding.impl.BindingToNormalizedNodeCodec.toNormalizedNode(BindingToNormalizedNodeCodec.java:86) ~[na:na] at org.opendaylight.controller.md.sal.binding.impl.BindingToNormalizedNodeCodec.toNormalizedNode(BindingToNormalizedNodeCodec.java:78) ~[na:na] at org.opendaylight.controller.md.sal.binding.impl.AbstractForwardedTransaction.doMergeWithEnsureParents(AbstractForwardedTransaction.java:123) ~[na:na] at org.opendaylight.controller.md.sal.binding.impl.ForwardedBackwardsCompatibleDataBroker$ForwardedBackwardsCompatibleTransacion.putOperationalData(ForwardedBackwardsCompatibleDataBroker.java:226) ~[na:na] at org.opendaylight.controller.md.sal.binding.impl.ForwardedBackwardsCompatibleDataBroker$ForwardedBackwardsCompatibleTransacion.putOperationalData(ForwardedBackwardsCompatibleDataBroker.java:195) ~[na:na] at org.opendaylight.ovsdb.neutron.provider.OF13ProviderManager.writeFlow(OF13ProviderManager.java:1551) [bundlefile:na] at org.opendaylight.ovsdb.neutron.provider.OF13ProviderManager.handleLocalInPort(OF13ProviderManager.java:1039) [bundlefile:na] at org.opendaylight.ovsdb.neutron.provider.OF13ProviderManager.programLocalBridgeRules(OF13ProviderManager.java:309) [bundlefile:na] at org.opendaylight.ovsdb.neutron.provider.OF13ProviderManager.programLocalRules(OF13ProviderManager.java:551) [bundlefile:na] at org.opendaylight.ovsdb.neutron.provider.OF13ProviderManager.handleInterfaceUpdate(OF13ProviderManager.java:756) [bundlefile:na] at org.opendaylight.ovsdb.neutron.provider.OF13ProviderManager.triggerInterfaceUpdates(OF13ProviderManager.java:784) [bundlefile:na] at org.opendaylight.ovsdb.neutron.provider.OF13ProviderManager.initializeOFFlowRules(OF13ProviderManager.java:2502) [bundlefile:na] at org.opendaylight.ovsdb.neutron.SouthboundHandler.notifyNode(SouthboundHandler.java:313) [bundlefile:na] at org.opendaylight.controller.switchmanager.internal.SwitchManager.notifyNode(SwitchManager.java:1814) [bundlefile:na] at org.opendaylight.controller.switchmanager.internal.SwitchManager.addNode(SwitchManager.java:1036) [bundlefile:na] at org.opendaylight.controller.switchmanager.internal.SwitchManager.updateNode(SwitchManager.java:1137) [bundlefile:na] at org.opendaylight.controller.sal.implementation.internal.Inventory.updateNode(Inventory.java:115) [bundlefile:na] at org.opendaylight.controller.sal.compatibility.InventoryAndReadAdapter.publishNodeUpdate(InventoryAndReadAdapter.java:1039) [bundlefile:na] at org.opendaylight.controller.sal.compatibility.InventoryAndReadAdapter.onNodeUpdated(InventoryAndReadAdapter.java:635) [bundlefile:na] at org.opendaylight.controller.sal.compatibility.InventoryAndReadAdapter$$Broker$ListenerInvoker.onNotification(InventoryAndReadAdapter$$Broker !2014-05-18 03:23:35.683 EDT [nioEventLoopGroup-11-5] INFO o.o.o.p.i.c.PublishingChannelInitializer - Incoming connection accepted - building pipeline 2014-05-18 03:23:35.771 EDT [nioEventLoopGroup-11-5] INFO o.o.o.p.i.c.ConnectionAdapterImpl - Hello received / branch 2014-05-18 03:23:35.910 EDT [pool-14-thread-1] WARN o.o.y.s.b.g.i.RuntimeGeneratedMappingServiceImpl - Failed to deserialize entry (urn:opendaylight:inventory?revision=2013-08-19)nodes/(urn:opendaylight:inventory?revision=2013-08-19)node[{(urn:opendaylight:inventory?revision=2013-08-19)id=openflow:231835414490694}]/(urn:opendaylight:flow:inventory?revision=2013-08-19)description 2014-05-18 03:23:35.913 EDT [pool-14-thread-1] WARN o.o.y.s.b.g.i.RuntimeGeneratedMappingServiceImpl - Failed to deserialize entry (urn:opendaylight:inventory?revision=2013-08-19)nodes/(urn:opendaylight:inventory?revision=2013-08-19)node[{(urn:opendaylight:inventory?revision=2013-08-19)id=openflow:231835414490694}]/(urn:opendaylight:flow:inventory?revision=2013-08-19)hardware 2014-05-18 03:23:35.914 EDT [pool-14-thread-1] WARN o.o.y.s.b.g.i.RuntimeGeneratedMappingServiceImpl - Failed to deserialize entry (urn:opendaylight:inventory?revision=2013-08-19)nodes/(urn:opendaylight:inventory?revision=2013-08-19)node[{(urn:opendaylight:inventory?revision=2013-08-19)id=openflow:231835414490694}]/(urn:opendaylight:flow:inventory?revision=2013-08-19)manufacturer 2014-05-18 03:23:35.914 EDT [pool-14-thread-1] WARN o.o.y.s.b.g.i.RuntimeGeneratedMappingServiceImpl - Failed to deserialize entry (urn:opendaylight:inventory?revision=2013-08-19)nodes/(urn:opendaylight:inventory?revision=2013-08-19)node[{(urn:opendaylight:inventory?revision=2013-08-19)id=openflow:231835414490694}]/(urn:opendaylight:flow:inventory?revision=2013-08-19)serial-number 2014-05-18 03:23:35.914 EDT [pool-14-thread-1] WARN o.o.y.s.b.g.i.RuntimeGeneratedMappingServiceImpl - Failed to deserialize entry (urn:opendaylight:inventory?revision=2013-08-19)nodes/(urn:opendaylight:inventory?revision=2013-08-19)node[{(urn:opendaylight:inventory?revision=2013-08-19)id=openflow:231835414490694}]/(urn:opendaylight:flow:inventory?revision=2013-08-19)software

Page 32: Augmenting Flow Operations and Feedback on the Model Driven MD_SAL Approach in OpenDaylight

Ports and TopologyPys vs. vPort?

[_value=openflow:187231598612550:2]

[_value=openflow:DPID:Port]

Page 33: Augmenting Flow Operations and Feedback on the Model Driven MD_SAL Approach in OpenDaylight

Mapping Errors to Modelsjava.lang.NullPointerException: List node (urn:opendaylight:flow:inventory?revision=2013-08-19)action MUST contain leaf (urn:opendaylight:flow:inventory?revision=2013-08-19)order with value.

Page 34: Augmenting Flow Operations and Feedback on the Model Driven MD_SAL Approach in OpenDaylight

Generated POJOs Located in src/ or target/ Depending on the Project

Page 35: Augmenting Flow Operations and Feedback on the Model Driven MD_SAL Approach in OpenDaylight

And Warcraft?? Seriously.. Wtf..

The only Yang related tool I found was for Sublime

Yang !Modeling

Tools

Page 36: Augmenting Flow Operations and Feedback on the Model Driven MD_SAL Approach in OpenDaylight

!!• 2014-05-18 23:13:03.850 EDT [nioEventLoopGroup-10-3] INFO o.o.o.p.i.c.PublishingChannelInitializer - Incoming connection from (remote address): /172.16.86.128:54226 --> :6633 • 2014-05-18 23:13:03.852 EDT [nioEventLoopGroup-10-3] INFO o.o.o.p.i.c.PublishingChannelInitializer - Incoming connection accepted - building pipeline • 2014-05-18 23:13:03.860 EDT [nioEventLoopGroup-10-3] INFO o.o.o.p.i.c.ConnectionAdapterImpl - Hello received / branch • 2014-05-18 23:13:03.886 EDT [md-sal-binding-notification-99] INFO o.o.o.n.provider.OF13ProviderManager - Compare openflowNode to OVS br-int node openflow:249065639468610 vs 249065639468610 • 2014-05-18 23:13:03.890 EDT [md-sal-binding-notification-101] INFO o.o.c.m.s.manager.StatisticsProvider - Attempted to get non-existing handler for Uri [_value=openflow:249065639468610] • 2014-05-18 23:13:03.895 EDT [pool-14-thread-2] WARN o.o.y.s.b.g.i.RuntimeGeneratedMappingServiceImpl - Failed to deserialize entry (urn:opendaylight:inventory?revision=2013-08-19)nodes/(urn:opendaylight:inventory?revision=2013-08-19)node[{(urn:opendaylight:inventory?revision=2013-08-19)id=openflow:249065639468610}]/(urn:opendaylight:flow:inventory?revision=2013-08-19)description • 2014-05-18 23:13:03.896 EDT [pool-14-thread-2] WARN o.o.y.s.b.g.i.RuntimeGeneratedMappingServiceImpl - Failed to deserialize entry (urn:opendaylight:inventory?revision=2013-08-19)nodes/(urn:opendaylight:inventory?revision=2013-08-19)node[{(urn:opendaylight:inventory?revision=2013-08-19)id=openflow:249065639468610}]/(urn:opendaylight:flow:inventory?revision=2013-08-19)hardware • 2014-05-18 23:13:03.896 EDT [pool-14-thread-2] WARN o.o.y.s.b.g.i.RuntimeGeneratedMappingServiceImpl - Failed to deserialize entry (urn:opendaylight:inventory?revision=2013-08-19)nodes/(urn:opendaylight:inventory?revision=2013-08-19)node[{(urn:opendaylight:inventory?revision=2013-08-19)id=openflow:249065639468610}]/(urn:opendaylight:flow:inventory?revision=2013-08-19)manufacturer • 2014-05-18 23:13:03.896 EDT [pool-14-thread-2] WARN o.o.y.s.b.g.i.RuntimeGeneratedMappingServiceImpl - Failed to deserialize entry (urn:opendaylight:inventory?revision=2013-08-19)nodes/(urn:opendaylight:inventory?revision=2013-08-19)node[{(urn:opendaylight:inventory?revision=2013-08-19)id=openflow:249065639468610}]/(urn:opendaylight:flow:inventory?revision=2013-08-19)serial-number • 2014-05-18 23:13:03.896 EDT [pool-14-thread-2] WARN o.o.y.s.b.g.i.RuntimeGeneratedMappingServiceImpl - Failed to deserialize entry (urn:opendaylight:inventory?revision=2013-08-19)nodes/(urn:opendaylight:inventory?revision=2013-08-19)node[{(urn:opendaylight:inventory?revision=2013-08-19)id=openflow:249065639468610}]/(urn:opendaylight:flow:inventory?revision=2013-08-19)software • 2014-05-18 23:13:03.898 EDT [md-sal-binding-notification-99] INFO o.o.o.n.provider.OF13ProviderManager - Transaction Status COMMITED for Flow LLDP • 2014-05-18 23:13:03.898 EDT [md-sal-binding-notification-99] INFO o.o.o.n.provider.OF13ProviderManager - Trigger Interface update for Interface [name=br-int, options={}, type=, ofport=[65534], mac=[], statistics={tx_errors=0, collisions=0, tx_bytes=0, rx_crc_err=0, rx_dropped=0, tx_packets=0, rx_packets=0, rx_over_err=0, tx_dropped=0, rx_frame_err=0, rx_errors=0, rx_bytes=0}, status={driver_name=openvswitch}, other_config={}, external_ids={}] • 2014-05-18 23:13:03.898 EDT [md-sal-binding-notification-99] INFO o.o.o.n.provider.OF13ProviderManager - Compare openflowNode to OVS br-int node openflow:249065639468610 vs 279770740358729 • 2014-05-18 23:13:03.907 EDT [pool-18-thread-1] INFO o.o.o.n.provider.OF13ProviderManager - Transaction Status COMMITED for Flow LLDP • 2014-05-18 23:13:03.907 EDT [pool-18-thread-1] INFO o.o.o.n.provider.OF13ProviderManager - Trigger Interface update for Interface [name=br-int, options={}, type=, ofport=[65534], mac=[], statistics={tx_errors=0, collisions=0, tx_bytes=0, rx_crc_err=0, rx_dropped=0, tx_packets=0, rx_packets=0, rx_over_err=0, tx_dropped=0, rx_frame_err=0, rx_errors=0, rx_bytes=0}, status={driver_name=openvswitch}, other_config={}, external_ids={}] • 2014-05-18 23:13:05.010 EDT [pool-14-thread-1] WARN o.o.y.s.b.g.i.RuntimeGeneratedMappingServiceImpl - Failed to deserialize entry (urn:opendaylight:inventory?revision=2013-08-19)nodes/(urn:opendaylight:inventory?revision=2013-08-19)node[{(urn:opendaylight:inventory?revision=2013-08-19)id=openflow:249065639468610}]/(urn:opendaylight:flow:inventory?revision=2013-08-19)table[{(urn:opendaylight:flow:inventory?revision=2013-08-19)id=0}]/(urn:opendaylight:flow:inventory?revision=2013-08-19)flow[{(urn:opendaylight:flow:inventory?revision=2013-08-19)id=LLDP}]/(urn:opendaylight:flow:statistics?revision=2013-08-19)flow-statistics • 2014-05-18 23:13:05.011 EDT [pool-14-thread-1] WARN o.o.c.m.s.b.i.BindingToNormalizedNodeCodec - Failed to deserialize (urn:opendaylight:inventory?revision=2013-08-19)nodes/(urn:opendaylight:inventory?revision=2013-08-19)node/(urn:opendaylight:inventory?revision=2013-08-19)node[{(urn:opendaylight:inventory?revision=2013-08-19)id=openflow:249065639468610}]/AugmentationIdentifier{childNames=[(urn:opendaylight:flow:inventory?revision=2013-08-19)description, (urn:opendaylight:flow:inventory?revision=2013-08-19)group, (urn:opendaylight:flow:inventory?revision=2013-08-19)hardware, (urn:opendaylight:flow:inventory?revision=2013-08-19)manufacturer, (urn:opendaylight:flow:inventory?

revision=2013-08-19)meter, (urn:opendaylight:flow:inventory?revision=2013-08-19)serial-number, (urn:opendaylight:flow:inventory?revision=2013-08-19)software, (urn:opendaylight:flow:inventory?revision=2013-08-19)supported-actions, (urn:opendaylight:flow:inventory?revision=2013-08-19)supported-instructions, (urn:opendaylight:flow:inventory?revision=2013-08-19)supported-match-types, (urn:opendaylight:flow:inventory?revision=2013-08-19)switch-features, (urn:opendaylight:flow:inventory?revision=2013-08-19)table]}/(urn:opendaylight:flow:inventory?revision=2013-08-19)table/(urn:opendaylight:flow:inventory?revision=2013-08-19)table[{(urn:opendaylight:flow:inventory?revision=2013-08-19)id=0}]/(urn:opendaylight:flow:inventory?revision=2013-08-19)flow/(urn:opendaylight:flow:inventory?revision=2013-08-19)flow[{(urn:opendaylight:flow:inventory?revision=2013-08-19)id=LLDP}]/AugmentationIdentifier{childNames=[(urn:opendaylight:flow:statistics?revision=2013-08-19)flow-statistics]}=ImmutableAugmentationNode{nodeIdentifier=AugmentationIdentifier{childNames=[(urn:opendaylight:flow:statistics?revision=2013-08-19)flow-statistics]}, value=[ImmutableContainerNode{nodeIdentifier=(urn:opendaylight:flow:statistics?revision=2013-08-19)flow-statistics, value=[ImmutableLeafNode{nodeIdentifier=(urn:opendaylight:flow:statistics?revision=2013-08-19)flags, value=[SEND_FLOW_REM], attributes={}}, ImmutableLeafNode{nodeIdentifier=(urn:opendaylight:flow:statistics?revision=2013-08-19)idle-timeout, value=0, attributes={}}, ImmutableLeafNode{nodeIdentifier=(urn:opendaylight:flow:statistics?revision=2013-08-19)byte-count, value=0, attributes={}}, ImmutableLeafNode{nodeIdentifier=(urn:opendaylight:flow:statistics?revision=2013-08-19)cookie, value=0, attributes={}}, ImmutableLeafNode{nodeIdentifier=(urn:opendaylight:flow:statistics?revision=2013-08-19)hard-timeout, value=0, attributes={}}, ImmutableContainerNode{nodeIdentifier=(urn:opendaylight:flow:statistics?revision=2013-08-19)match, value=[ImmutableContainerNode{nodeIdentifier=(urn:opendaylight:flow:statistics?revision=2013-08-19)ethernet-match, value=[ImmutableContainerNode{nodeIdentifier=(urn:opendaylight:flow:statistics?revision=2013-08-19)ethernet-type, value=[ImmutableLeafNode{nodeIdentifier=(urn:opendaylight:flow:statistics?revision=2013-08-19)type, value=35020, attributes={}}], attributes={}}], attributes={}}], attributes={}}, ImmutableContainerNode{nodeIdentifier=(urn:opendaylight:flow:statistics?revision=2013-08-19)duration, value=[ImmutableLeafNode{nodeIdentifier=(urn:opendaylight:flow:statistics?revision=2013-08-19)nanosecond, value=989000000, attributes={}}, ImmutableLeafNode{nodeIdentifier=(urn:opendaylight:flow:statistics?revision=2013-08-19)second, value=0, attributes={}}], attributes={}}, ImmutableContainerNode{nodeIdentifier=(urn:opendaylight:flow:statistics?revision=2013-08-19)instructions, value=[ImmutableMapNode{nodeIdentifier=(urn:opendaylight:flow:statistics?revision=2013-08-19)instruction, value=[ImmutableMapEntryNode{nodeIdentifier=(urn:opendaylight:flow:statistics?revision=2013-08-19)instruction[{(urn:opendaylight:flow:statistics?revision=2013-08-19)order=0}], value=[ImmutableChoiceNode{nodeIdentifier=(urn:opendaylight:flow:statistics?revision=2013-08-19)instruction, value=[ImmutableContainerNode{nodeIdentifier=(urn:opendaylight:flow:statistics?revision=2013-08-19)apply-actions, value=[ImmutableMapNode{nodeIdentifier=(urn:opendaylight:flow:statistics?revision=2013-08-19)action, value=[ImmutableMapEntryNode{nodeIdentifier=(urn:opendaylight:flow:statistics?revision=2013-08-19)action[{(urn:opendaylight:flow:statistics?revision=2013-08-19)order=0}], value=[ImmutableChoiceNode{nodeIdentifier=(urn:opendaylight:flow:statistics?revision=2013-08-19)action, value=[ImmutableContainerNode{nodeIdentifier=(urn:opendaylight:flow:statistics?revision=2013-08-19)output-action, value=[ImmutableLeafNode{nodeIdentifier=(urn:opendaylight:flow:statistics?revision=2013-08-19)output-node-connector, value=4294967293, attributes={}}, ImmutableLeafNode{nodeIdentifier=(urn:opendaylight:flow:statistics?revision=2013-08-19)max-length, value=0, attributes={}}], attributes={}}]}, ImmutableLeafNode{nodeIdentifier=(urn:opendaylight:flow:statistics?revision=2013-08-19)order, value=0, attributes={}}], attributes={}}]}], attributes={}}]}, ImmutableLeafNode{nodeIdentifier=(urn:opendaylight:flow:statistics?revision=2013-08-19)order, value=0, attributes={}}], attributes={}}]}], attributes={}}, ImmutableLeafNode{nodeIdentifier=(urn:opendaylight:flow:statistics?revision=2013-08-19)packet-count, value=0, attributes={}}, ImmutableLeafNode{nodeIdentifier=(urn:opendaylight:flow:statistics?revision=2013-08-19)priority, value=32768, attributes={}}, ImmutableLeafNode{nodeIdentifier=(urn:opendaylight:flow:statistics?revision=2013-08-19)table_id, value=0, attributes={}}], attributes={}}]} to Binding format. Binding path is: KeyedInstanceIdentifier{targetType=interface org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.Flow, path=[org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes, org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node[key=NodeKey [_id=Uri [_value=openflow:249065639468610]]], org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNode, org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.Table[key=TableKey [_id=0]], org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.Flow[key=FlowKey [_id=Uri [_value=LLDP]]]]}

• 2014-05-18 23:13:05.012 EDT [pool-14-thread-1] WARN o.o.y.s.b.g.i.RuntimeGeneratedMappingServiceImpl - Failed to deserialize entry (urn:opendaylight:inventory?revision=2013-08-19)nodes/(urn:opendaylight:inventory?revision=2013-08-19)node[{(urn:opendaylight:inventory?revision=2013-08-19)id=openflow:249065639468610}]/(urn:opendaylight:flow:inventory?revision=2013-08-19)table[{(urn:opendaylight:flow:inventory?revision=2013-08-19)id=0}]/(urn:opendaylight:flow:inventory?revision=2013-08-19)flow[{(urn:opendaylight:flow:inventory?revision=2013-08-19)id=LLDP}]/(urn:opendaylight:flow:statistics?revision=2013-08-19)flow-statistics/(urn:opendaylight:flow:statistics?revision=2013-08-19)match/(urn:opendaylight:flow:statistics?revision=2013-08-19)ethernet-match/(urn:opendaylight:flow:statistics?revision=2013-08-19)ethernet-type

• 2014-05-18 23:13:05.013 EDT [pool-14-thread-1] WARN o.o.c.m.s.b.i.AbstractForwardedDataBroker - Failed to transform (urn:opendaylight:inventory?revision=2013-08-19)nodes/(urn:opendaylight:inventory?revision=2013-08-19)node/(urn:opendaylight:inventory?revision=2013-08-19)node[{(urn:opendaylight:inventory?revision=2013-08-19)id=openflow:249065639468610}]/AugmentationIdentifier{childNames=[(urn:opendaylight:flow:inventory?revision=2013-08-19)description, (urn:opendaylight:flow:inventory?revision=2013-08-19)group, (urn:opendaylight:flow:inventory?revision=2013-08-19)hardware, (urn:opendaylight:flow:inventory?revision=2013-08-19)manufacturer, (urn:opendaylight:flow:inventory?revision=2013-08-19)meter, (urn:opendaylight:flow:inventory?revision=2013-08-19)serial-number, (urn:opendaylight:flow:inventory?revision=2013-08-19)software, (urn:opendaylight:flow:inventory?revision=2013-08-19)supported-actions, (urn:opendaylight:flow:inventory?revision=2013-08-19)supported-instructions, (urn:opendaylight:flow:inventory?revision=2013-08-19)supported-match-types, (urn:opendaylight:flow:inventory?revision=2013-08-19)switch-features, (urn:opendaylight:flow:inventory?revision=2013-08-19)table]}/(urn:opendaylight:flow:inventory?revision=2013-08-19)table/(urn:opendaylight:flow:inventory?revision=2013-08-19)table[{(urn:opendaylight:flow:inventory?revision=2013-08-19)id=0}]/(urn:opendaylight:flow:inventory?revision=2013-08-19)flow/(urn:opendaylight:flow:inventory?revision=2013-08-19)flow[{(urn:opendaylight:flow:inventory?revision=2013-08-19)id=LLDP}]/AugmentationIdentifier{childNames=[(urn:opendaylight:flow:statistics?revision=2013-08-19)flow-statistics]}/(urn:opendaylight:flow:statistics?revision=2013-08-19)flow-statistics/(urn:opendaylight:flow:statistics?revision=2013-08-19)match/(urn:opendaylight:flow:statistics?revision=2013-08-19)ethernet-match/(urn:opendaylight:flow:statistics?revision=2013-08-19)ethernet-type=ImmutableContainerNode{nodeIdentifier=(urn:opendaylight:flow:statistics?revision=2013-08-19)ethernet-type, value=[ImmutableLeafNode{nodeIdentifier=(urn:opendaylight:flow:statistics?revision=2013-08-19)type, value=35020, 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:332) ~[bundlefile:na] • at org.opendaylight.controller.config.yang.md.sal.binding.impl.RuntimeMappingModule$RuntimeGeneratedMappingServiceProxy.fromDataDom(RuntimeMappingModule.java:147) ~[bundlefile:na] • at org.opendaylight.controller.md.sal.binding.impl.BindingToNormalizedNodeCodec.toBindingImpl(BindingToNormalizedNodeCodec.java:183) ~[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:233) ~[bundlefile:na] • at org.opendaylight.controller.md.sal.binding.impl.AbstractForwardedDataBroker.toBinding(AbstractForwardedDataBroker.java:99) ~[bundlefile:na] • at org.opendaylight.controller.md.sal.binding.impl.AbstractForwardedDataBroker$TranslatedDataChangeEvent.getCreatedData(AbstractForwardedDataBroker.java:183) [bundlefile:na] • at org.opendaylight.controller.md.sal.binding.impl.LegacyDataChangeEvent$OperationalChangeEvent.getCreatedOperationalData(LegacyDataChangeEvent.java:108) [bundlefile:na] • at org.opendaylight.controller.md.statistics.manager.FlowCapableTracker.onDataChanged(FlowCapableTracker.java:93) [bundlefile:na] • at org.opendaylight.controller.md.sal.binding.impl.ForwardedBackwardsCompatibleDataBroker$BackwardsCompatibleOperationalDataChangeInvoker.onDataChanged(ForwardedBackwardsCompatibleDataBroker.java:434) [bundlefile:na] • at org.opendaylight.controller.md.sal.binding.impl.AbstractForwardedDataBroker$TranslatingDataChangeInvoker.onDataChanged(AbstractForwardedDataBroker.java:158) [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_55] • at java.util.concurrent.FutureTask.run(FutureTask.java:262) [na:1.7.0_55] • at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [na:1.7.0_55] • at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [na:1.7.0_55] • at java.lang.Thread.run(Thread.java:745) [na:1.7.0_55] • Caused by: java.lang.IllegalStateException: Failed to lookup instantiated type for path SchemaPath [path=[(urn:opendaylight:inventory?revision=2013-08-19)nodes, (urn:opendaylight:inventory?revision=2013-08-19)node, (urn:opendaylight:flow:inventory?revision=2013-08-19)table, (urn:opendaylight:flow:inventory?revision=2013-08-19)flow, (urn:opendaylight:flow:statistics?revision=2013-08-19)flow-statistics], 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:208) ~[bundlefile:na] • at org.opendaylight.yangtools.sal.binding.generator.impl.InstanceIdentifierCodecImpl._deserializePathArgument(InstanceIdentifierCodecImpl.java:94) ~[bundlefile:na] • at org.opendaylight.yangtools.sal.binding.generator.impl.InstanceIdentifierCodecImpl.deserializePathArgument(InstanceIdentifierCodecImpl.java:193) ~[bundlefile:na] • at org.opendaylight.yangtools.sal.binding.generator.impl.InstanceIdentifierCodecImpl.deserialize(InstanceIdentifierCodecImpl.java:66) ~[bundlefile:na] • at org.opendaylight.yangtools.sal.binding.generator.impl.RuntimeGeneratedMappingServiceImpl.fromDataDom(RuntimeGeneratedMappingServiceImpl.java:329) ~[bundlefile:na] • ... 16 common frames omitted • 2014-05-18 23:13:05.014 EDT [pool-14-thread-1] WARN o.o.y.s.b.g.i.RuntimeGeneratedMappingServiceImpl - Failed to deserialize entry (urn:opendaylight:inventory?revision=2013-08-19)nodes/(urn:opendaylight:inventory?revision=2013-08-19)node[{(urn:opendaylight:inventory?revision=2013-08-19)id=openflow:249065639468610}]/(urn:opendaylight:flow:inventory?revision=2013-08-19)table[{(urn:opendaylight:flow:inventory?revision=2013-08-19)id=0}]/(urn:opendaylight:flow:inventory?revision=2013-08-19)flow[{(urn:opendaylight:flow:inventory?revision=2013-08-19)id=LLDP}]/(urn:opendaylight:flow:statistics?revision=2013-08-19)flow-statistics/(urn:opendaylight:flow:statistics?

revision=2013-08-19)instructions/(urn:opendaylight:flow:statistics?revision=2013-08-19)instruction[{(urn:opendaylight:flow:statistics?revision=2013-08-19)order=0}]/(urn:opendaylight:flow:statistics?revision=2013-08-19)apply-actions/(urn:opendaylight:flow:statistics?revision=2013-08-19)action[{(urn:opendaylight:flow:statistics?revision=2013-08-19)order=0}]/(urn:opendaylight:flow:statistics?revision=2013-08-19)output-action • 2014-05-18 23:13:05.014 EDT [pool-14-thread-1] WARN o.o.c.m.s.b.i.AbstractForwardedDataBroker - Failed to transform (urn:opendaylight:inventory?revision=2013-08-19)nodes/(urn:opendaylight:inventory?revision=2013-08-19)node/(urn:opendaylight:inventory?revision=2013-08-19)node[{(urn:opendaylight:inventory?revision=2013-08-19)id=openflow:249065639468610}]/AugmentationIdentifier{childNames=[(urn:opendaylight:flow:inventory?revision=2013-08-19)description, (urn:opendaylight:flow:inventory?revision=2013-08-19)group, (urn:opendaylight:flow:inventory?revision=2013-08-19)hardware, (urn:opendaylight:flow:inventory?revision=2013-08-19)manufacturer, (urn:opendaylight:flow:inventory?

revision=2013-08-19)meter, (urn:opendaylight:flow:inventory?revision=2013-08-19)serial-number, (urn:opendaylight:flow:inventory?revision=2013-08-19)software, (urn:opendaylight:flow:inventory?revision=2013-08-19)supported-actions, (urn:opendaylight:flow:inventory?revision=2013-08-19)supported-instructions, (urn:opendaylight:flow:inventory?revision=2013-08-19)supported-match-types, (urn:opendaylight:flow:inventory?revision=2013-08-19)switch-features, (urn:opendaylight:flow:inventory?revision=2013-08-19)table]}/(urn:opendaylight:flow:inventory?revision=2013-08-19)table/(urn:opendaylight:flow:inventory?revision=2013-08-19)table[{(urn:opendaylight:flow:inventory?revision=2013-08-19)id=0}]/(urn:opendaylight:flow:inventory?revision=2013-08-19)flow/(urn:opendaylight:flow:inventory?revision=2013-08-19)flow[{(urn:opendaylight:flow:inventory?revision=2013-08-19)id=LLDP}]/AugmentationIdentifier{childNames=[(urn:opendaylight:flow:statistics?revision=2013-08-19)flow-statistics]}/(urn:opendaylight:flow:statistics?revision=2013-08-19)flow-statistics/(urn:opendaylight:flow:statistics?revision=2013-08-19)instructions/(urn:opendaylight:flow:statistics?revision=2013-08-19)instruction/(urn:opendaylight:flow:statistics?revision=2013-08-19)instruction[{(urn:opendaylight:flow:statistics?revision=2013-08-19)order=0}]/(urn:opendaylight:flow:statistics?revision=2013-08-19)instruction/(urn:opendaylight:flow:statistics?revision=2013-08-19)apply-actions/(urn:opendaylight:flow:statistics?revision=2013-08-19)action/(urn:opendaylight:flow:statistics?revision=2013-08-19)action[{(urn:opendaylight:flow:statistics?revision=2013-08-19)order=0}]/(urn:opendaylight:flow:statistics?revision=2013-08-19)action/(urn:opendaylight:flow:statistics?revision=2013-08-19)output-action=ImmutableContainerNode{nodeIdentifier=(urn:opendaylight:flow:statistics?revision=2013-08-19)output-action, value=[ImmutableLeafNode{nodeIdentifier=(urn:opendaylight:flow:statistics?revision=2013-08-19)output-node-connector, value=4294967293, attributes={}}, ImmutableLeafNode{nodeIdentifier=(urn:opendaylight:flow:statistics?revision=2013-08-19)max-length, value=0, 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:332) ~[bundlefile:na] • at org.opendaylight.controller.config.yang.md.sal.binding.impl.RuntimeMappingModule$RuntimeGeneratedMappingServiceProxy.fromDataDom(RuntimeMappingModule.java:147) ~[bundlefile:na] • at org.opendaylight.controller.md.sal.binding.impl.BindingToNormalizedNodeCodec.toBindingImpl(BindingToNormalizedNodeCodec.java:183) ~[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:233) ~[bundlefile:na] • at org.opendaylight.controller.md.sal.binding.impl.AbstractForwardedDataBroker.toBinding(AbstractForwardedDataBroker.java:99) ~[bundlefile:na] • at org.opendaylight.controller.md.sal.binding.impl.AbstractForwardedDataBroker$TranslatedDataChangeEvent.getCreatedData(AbstractForwardedDataBroker.java:183) [bundlefile:na] • at org.opendaylight.controller.md.sal.binding.impl.LegacyDataChangeEvent$OperationalChangeEvent.getCreatedOperationalData(LegacyDataChangeEvent.java:108) [bundlefile:na] • at org.opendaylight.controller.md.statistics.manager.FlowCapableTracker.onDataChanged(FlowCapableTracker.java:93) [bundlefile:na] • at org.opendaylight.controller.md.sal.binding.impl.ForwardedBackwardsCompatibleDataBroker$BackwardsCompatibleOperationalDataChangeInvoker.onDataChanged(ForwardedBackwardsCompatibleDataBroker.java:434) [bundlefile:na] • at org.opendaylight.controller.md.sal.binding.impl.AbstractForwardedDataBroker$TranslatingDataChangeInvoker.onDataChanged(AbstractForwardedDataBroker.java:158) [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_55] • at java.util.concurrent.FutureTask.run(FutureTask.java:262) [na:1.7.0_55] • at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [na:1.7.0_55] • at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [na:1.7.0_55] • at java.lang.Thread.run(Thread.java:745) [na:1.7.0_55] • Caused by: java.lang.IllegalStateException: Failed to lookup instantiated type for path SchemaPath [path=[(urn:opendaylight:inventory?revision=2013-08-19)nodes, (urn:opendaylight:inventory?revision=2013-08-19)node, (urn:opendaylight:flow:inventory?revision=2013-08-19)table, (urn:opendaylight:flow:inventory?revision=2013-08-19)flow, (urn:opendaylight:flow:statistics?revision=2013-08-19)flow-statistics], 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:208) ~[bundlefile:na] • at org.opendaylight.yangtools.sal.binding.generator.impl.InstanceIdentifierCodecImpl._deserializePathArgument(InstanceIdentifierCodecImpl.java:94) ~[bundlefile:na] • at org.opendaylight.yangtools.sal.binding.generator.impl.InstanceIdentifierCodecImpl.deserializePathArgument(InstanceIdentifierCodecImpl.java:193) ~[bundlefile:na] • at org.opendaylight.yangtools.sal.binding.generator.impl.InstanceIdentifierCodecImpl.deserialize(InstanceIdentifierCodecImpl.java:66) ~[bundlefile:na] • at org.opendaylight.yangtools.sal.binding.generator.impl.RuntimeGeneratedMappingServiceImpl.fromDataDom(RuntimeGeneratedMappingServiceImpl.java:329) ~[bundlefile:na] • ... 16 common frames omitted • 2014-05-18 23:13:05.015 EDT [pool-14-thread-1] WARN o.o.y.s.b.g.i.RuntimeGeneratedMappingServiceImpl - Failed to deserialize entry (urn:opendaylight:inventory?revision=2013-08-19)nodes/(urn:opendaylight:inventory?revision=2013-08-19)node[{(urn:opendaylight:inventory?revision=2013-08-19)id=openflow:249065639468610}]/(urn:opendaylight:flow:inventory?revision=2013-08-19)table[{(urn:opendaylight:flow:inventory?revision=2013-08-19)id=0}]/(urn:opendaylight:flow:inventory?revision=2013-08-19)flow[{(urn:opendaylight:flow:inventory?revision=2013-08-19)id=LLDP}]/(urn:opendaylight:flow:statistics?revision=2013-08-19)flow-statistics/(urn:opendaylight:flow:statistics?

revision=2013-08-19)instructions/(urn:opendaylight:flow:statistics?revision=2013-08-19)instruction[{(urn:opendaylight:flow:statistics?revision=2013-08-19)order=0}] • 2014-05-18 23:13:05.016 EDT [pool-14-thread-1] WARN o.o.c.m.s.b.i.AbstractForwardedDataBroker - Failed to transform (urn:opendaylight:inventory?revision=2013-08-19)nodes/(urn:opendaylight:inventory?revision=2013-08-19)node/(urn:opendaylight:inventory?revision=2013-08-19)node[{(urn:opendaylight:inventory?revision=2013-08-19)id=openflow:249065639468610}]/AugmentationIdentifier{childNames=[(urn:opendaylight:flow:inventory?revision=2013-08-19)description, (urn:opendaylight:flow:inventory?revision=2013-08-19)group, (urn:opendaylight:flow:inventory?revision=2013-08-19)hardware, (urn:opendaylight:flow:inventory?revision=2013-08-19)manufacturer, (urn:opendaylight:flow:inventory?

revision=2013-08-19)meter, (urn:opendaylight:flow:inventory?revision=2013-08-19)serial-number, (urn:opendaylight:flow:inventory?revision=2013-08-19)software, (urn:opendaylight:flow:inventory?revision=2013-08-19)supported-actions, (urn:opendaylight:flow:inventory?revision=2013-08-19)supported-instructions, (urn:opendaylight:flow:inventory?revision=2013-08-19)supported-match-types, (urn:opendaylight:flow:inventory?revision=2013-08-19)switch-features, (urn:opendaylight:flow:inventory?revision=2013-08-19)table]}/(urn:opendaylight:flow:inventory?revision=2013-08-19)table/(urn:opendaylight:flow:inventory?revision=2013-08-19)table[{(urn:opendaylight:flow:inventory?revision=2013-08-19)id=0}]/(urn:opendaylight:flow:inventory?revision=2013-08-19)flow/(urn:opendaylight:flow:inventory?revision=2013-08-19)flow[{(urn:opendaylight:flow:inventory?revision=2013-08-19)id=LLDP}]/AugmentationIdentifier{childNames=[(urn:opendaylight:flow:statistics?revision=2013-08-19)flow-statistics]}/(urn:opendaylight:flow:statistics?revision=2013-08-19)flow-statistics/(urn:opendaylight:flow:statistics?revision=2013-08-19)instructions/(urn:opendaylight:flow:statistics?revision=2013-08-19)instruction/(urn:opendaylight:flow:statistics?revision=2013-08-19)instruction[{(urn:opendaylight:flow:statistics?revision=2013-08-19)order=0}]=ImmutableMapEntryNode{nodeIdentifier=(urn:opendaylight:flow:statistics?revision=2013-08-19)instruction[{(urn:opendaylight:flow:statistics?revision=2013-08-19)order=0}], value=[ImmutableChoiceNode{nodeIdentifier=(urn:opendaylight:flow:statistics?revision=2013-08-19)instruction, value=[ImmutableContainerNode{nodeIdentifier=(urn:opendaylight:flow:statistics?revision=2013-08-19)apply-actions, value=[ImmutableMapNode{nodeIdentifier=(urn:opendaylight:flow:statistics?revision=2013-08-19)action, value=[ImmutableMapEntryNode{nodeIdentifier=(urn:opendaylight:flow:statistics?revision=2013-08-19)action[{(urn:opendaylight:flow:statistics?revision=2013-08-19)order=0}], value=[ImmutableChoiceNode{nodeIdentifier=(urn:opendaylight:flow:statistics?revision=2013-08-19)action, value=[ImmutableContainerNode{nodeIdentifier=(urn:opendaylight:flow:statistics?revision=2013-08-19)output-action, value=[ImmutableLeafNode{nodeIdentifier=(urn:opendaylight:flow:statistics?revision=2013-08-19)output-node-connector, value=4294967293, attributes={}}, ImmutableLeafNode{nodeIdentifier=(urn:opendaylight:flow:statistics?revision=2013-08-19)max-length, value=0, attributes={}}], attributes={}}]}, ImmutableLeafNode{nodeIdentifier=(urn:opendaylight:flow:statistics?revision=2013-08-19)order, value=0, attributes={}}], attributes={}}]}], attributes={}}]}, ImmutableLeafNode{nodeIdentifier=(urn:opendaylight:flow:statistics?revision=2013-08-19)order, value=0, 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:332) ~[bundlefile:na] • at org.opendaylight.controller.config.yang.md.sal.binding.impl.RuntimeMappingModule$RuntimeGeneratedMappingServiceProxy.fromDataDom(RuntimeMappingModule.java:147) ~[bundlefile:na] • at org.opendaylight.controller.md.sal.binding.impl.BindingToNormalizedNodeCodec.toBindingImpl(BindingToNormalizedNodeCodec.java:183) ~[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:233) ~[bundlefile:na] • at org.opendaylight.controller.md.sal.binding.impl.AbstractForwardedDataBroker.toBinding(AbstractForwardedDataBroker.java:99) ~[bundlefile:na] • at org.opendaylight.controller.md.sal.binding.impl.AbstractForwardedDataBroker$TranslatedDataChangeEvent.getCreatedData(AbstractForwardedDataBroker.java:183) [bundlefile:na] • at org.opendaylight.controller.md.sal.binding.impl.LegacyDataChangeEvent$OperationalChangeEvent.getCreatedOperationalData(LegacyDataChangeEvent.java:108) [bundlefile:na] • at org.opendaylight.controller.md.statistics.manager.FlowCapableTracker.onDataChanged(FlowCapableTracker.java:93) [bundlefile:na] • at org.opendaylight.controller.md.sal.binding.impl.ForwardedBackwardsCompatibleDataBroker$BackwardsCompatibleOperationalDataChangeInvoker.onDataChanged(ForwardedBackwardsCompatibleDataBroker.java:434) [bundlefile:na] • at org.opendaylight.controller.md.sal.binding.impl.AbstractForwardedDataBroker$TranslatingDataChangeInvoker.onDataChanged(AbstractForwardedDataBroker.java:158) [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_55] • at java.util.concurrent.FutureTask.run(FutureTask.java:262) [na:1.7.0_55] • at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [na:1.7.0_55] • at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [na:1.7.0_55] • at java.lang.Thread.run(Thread.java:745) [na:1.7.0_55] • Caused by: java.lang.IllegalStateException: Failed to lookup instantiated type for path SchemaPath [path=[(urn:opendaylight:inventory?revision=2013-08-19)nodes, (urn:opendaylight:inventory?revision=2013-08-19)node, (urn:opendaylight:flow:inventory?revision=2013-08-19)table, (urn:opendaylight:flow:inventory?revision=2013-08-19)flow, (urn:opendaylight:flow:statistics?revision=2013-08-19)flow-statistics], 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:208) ~[bundlefile:na] • at org.opendaylight.yangtools.sal.binding.generator.impl.InstanceIdentifierCodecImpl._deserializePathArgument(InstanceIdentifierCodecImpl.java:94) ~[bundlefile:na] • at org.opendaylight.yangtools.sal.binding.generator.impl.InstanceIdentifierCodecImpl.deserializePathArgument(InstanceIdentifierCodecImpl.java:193) ~[bundlefile:na] • at org.opendaylight.yangtools.sal.binding.generator.impl.InstanceIdentifierCodecImpl.deserialize(InstanceIdentifierCodecImpl.java:66) ~[bundlefile:na] • at org.opendaylight.yangtools.sal.binding.generator.impl.RuntimeGeneratedMappingServiceImpl.fromDataDom(RuntimeGeneratedMappingServiceImpl.java:329) ~[bundlefile:na] • ... 16 common frames omitted • 2014-05-18 23:13:05.016 EDT [pool-14-thread-1] WARN o.o.y.s.b.g.i.RuntimeGeneratedMappingServiceImpl - Failed to deserialize entry (urn:opendaylight:inventory?revision=2013-08-19)nodes/(urn:opendaylight:inventory?revision=2013-08-19)node[{(urn:opendaylight:inventory?revision=2013-08-19)id=openflow:249065639468610}]/(urn:opendaylight:flow:inventory?revision=2013-08-19)table[{(urn:opendaylight:flow:inventory?revision=2013-08-19)id=0}]/(urn:opendaylight:flow:inventory?revision=2013-08-19)flow[{(urn:opendaylight:flow:inventory?revision=2013-08-19)id=LLDP}]/(urn:opendaylight:flow:statistics?revision=2013-08-19)flow-statistics/(urn:opendaylight:flow:statistics?

revision=2013-08-19)match/(urn:opendaylight:flow:statistics?revision=2013-08-19)ethernet-match • 2014-05-18 23:13:05.017 EDT [pool-14-thread-1] WARN o.o.c.m.s.b.i.AbstractForwardedDataBroker - Failed to transform (urn:opendaylight:inventory?revision=2013-08-19)nodes/(urn:opendaylight:inventory?revision=2013-08-19)node/(urn:opendaylight:inventory?revision=2013-08-19)node[{(urn:opendaylight:inventory?revision=2013-08-19)id=openflow:249065639468610}]/AugmentationIdentifier{childNames=[(urn:opendaylight:flow:inventory?revision=2013-08-19)description, (urn:opendaylight:flow:inventory?revision=2013-08-19)group, (urn:opendaylight:flow:inventory?revision=2013-08-19)hardware, (urn:opendaylight:flow:inventory?revision=2013-08-19)manufacturer, (urn:opendaylight:flow:inventory?

revision=2013-08-19)meter, (urn:opendaylight:flow:inventory?revision=2013-08-19)serial-number, (urn:opendaylight:flow:inventory?revision=2013-08-19)software, (urn:opendaylight:flow:inventory?revision=2013-08-19)supported-actions, (urn:opendaylight:flow:inventory?revision=2013-08-19)supported-instructions, (urn:opendaylight:flow:inventory?revision=2013-08-19)supported-match-types, (urn:opendaylight:flow:inventory?revision=2013-08-19)switch-features, (urn:opendaylight:flow:inventory?revision=2013-08-19)table]}/(urn:opendaylight:flow:inventory?revision=2013-08-19)table/(urn:opendaylight:flow:inventory?revision=2013-08-19)table[{(urn:opendaylight:flow:inventory?revision=2013-08-19)id=0}]/(urn:opendaylight:flow:inventory?revision=2013-08-19)flow/(urn:opendaylight:flow:inventory?revision=2013-08-19)flow[{(urn:opendaylight:flow:inventory?revision=2013-08-19)id=LLDP}]/AugmentationIdentifier{childNames=[(urn:opendaylight:flow:statistics?revision=2013-08-19)flow-statistics]}/(urn:opendaylight:flow:statistics?revision=2013-08-19)flow-statistics/(urn:opendaylight:flow:statistics?revision=2013-08-19)match/(urn:opendaylight:flow:statistics?revision=2013-08-19)ethernet-match=ImmutableContainerNode{nodeIdentifier=(urn:opendaylight:flow:statistics?revision=2013-08-19)ethernet-match, value=[ImmutableContainerNode{nodeIdentifier=(urn:opendaylight:flow:statistics?revision=2013-08-19)ethernet-type, value=[ImmutableLeafNode{nodeIdentifier=(urn:opendaylight:flow:statistics?revision=2013-08-19)type, value=35020, attributes={}}], 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:332) ~[bundlefile:na] • at org.opendaylight.controller.config.yang.md.sal.binding.impl.RuntimeMappingModule$RuntimeGeneratedMappingServiceProxy.fromDataDom(RuntimeMappingModule.java:147) ~[bundlefile:na] • at org.opendaylight.controller.md.sal.binding.impl.BindingToNormalizedNodeCodec.toBindingImpl(BindingToNormalizedNodeCodec.java:183) ~[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:233) ~[bundlefile:na] • at org.opendaylight.controller.md.sal.binding.impl.AbstractForwardedDataBroker.toBinding(AbstractForwardedDataBroker.java:99) ~[bundlefile:na] • at org.opendaylight.controller.md.sal.binding.impl.AbstractForwardedDataBroker$TranslatedDataChangeEvent.getCreatedData(AbstractForwardedDataBroker.java:183) [bundlefile:na] • at org.opendaylight.controller.md.sal.binding.impl.LegacyDataChangeEvent$OperationalChangeEvent.getCreatedOperationalData(LegacyDataChangeEvent.java:108) [bundlefile:na] • at org.opendaylight.controller.md.statistics.manager.FlowCapableTracker.onDataChanged(FlowCapableTracker.java:93) [bundlefile:na] • at org.opendaylight.controller.md.sal.binding.impl.ForwardedBackwardsCompatibleDataBroker$BackwardsCompatibleOperationalDataChangeInvoker.onDataChanged(ForwardedBackwardsCompatibleDataBroker.java:434) [bundlefile:na] • at org.opendaylight.controller.md.sal.binding.impl.AbstractForwardedDataBroker$TranslatingDataChangeInvoker.onDataChanged(AbstractForwardedDataBroker.java:158) [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_55] • at java.util.concurrent.FutureTask.run(FutureTask.java:262) [na:1.7.0_55] • at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [na:1.7.0_55] • at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [na:1.7.0_55] • at java.lang.Thread.run(Thread.java:745) [na:1.7.0_55] • Caused by: java.lang.IllegalStateException: Failed to lookup instantiated type for path SchemaPath [path=[(urn:opendaylight:inventory?revision=2013-08-19)nodes, (urn:opendaylight:inventory?revision=2013-08-19)node, (urn:opendaylight:flow:inventory?revision=2013-08-19)table, (urn:opendaylight:flow:inventory?revision=2013-08-19)flow, (urn:opendaylight:flow:statistics?revision=2013-08-19)flow-statistics], 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:208) ~[bundlefile:na] • at org.opendaylight.yangtools.sal.binding.generator.impl.InstanceIdentifierCodecImpl._deserializePathArgument(InstanceIdentifierCodecImpl.java:94) ~[bundlefile:na] • at org.opendaylight.yangtools.sal.binding.generator.impl.InstanceIdentifierCodecImpl.deserializePathArgument(InstanceIdentifierCodecImpl.java:193) ~[bundlefile:na] • at org.opendaylight.yangtools.sal.binding.generator.impl.InstanceIdentifierCodecImpl.deserialize(InstanceIdentifierCodecImpl.java:66) ~[bundlefile:na] • at org.opendaylight.yangtools.sal.binding.generator.impl.RuntimeGeneratedMappingServiceImpl.fromDataDom(RuntimeGeneratedMappingServiceImpl.java:329) ~[bundlefile:na] • ... 16 common frames omitted • 2014-05-18 23:13:05.018 EDT [pool-14-thread-1] WARN o.o.y.s.b.g.i.RuntimeGeneratedMappingServiceImpl - Failed to deserialize entry (urn:opendaylight:inventory?revision=2013-08-19)nodes/(urn:opendaylight:inventory?revision=2013-08-19)node[{(urn:opendaylight:inventory?revision=2013-08-19)id=openflow:249065639468610}]/(urn:opendaylight:flow:inventory?revision=2013-08-19)table[{(urn:opendaylight:flow:inventory?revision=2013-08-19)id=0}]/(urn:opendaylight:flow:inventory?revision=2013-08-19)flow[{(urn:opendaylight:flow:inventory?revision=2013-08-19)id=LLDP}]/(urn:opendaylight:flow:statistics?revision=2013-08-19)flow-statistics/(urn:opendaylight:flow:statistics?revision=2013-08-19)match • 2014-05-18 23:13:05.019 EDT [pool-14-thread-1] WARN o.o.c.m.s.b.i.AbstractForwardedDataBroker - Failed to transform (urn:opendaylight:inventory?revision=2013-08-19)nodes/(urn:opendaylight:inventory?revision=2013-08-19)node/(urn:opendaylight:inventory?revision=2013-08-19)node[{(urn:opendaylight:inventory?revision=2013-08-19)id=openflow:249065639468610}]/AugmentationIdentifier{childNames=[(urn:opendaylight:flow:inventory?revision=2013-08-19)description, (urn:opendaylight:flow:inventory?revision=2013-08-19)group, (urn:opendaylight:flow:inventory?revision=2013-08-19)hardware, (urn:opendaylight:flow:inventory?revision=2013-08-19)manufacturer, (urn:opendaylight:flow:inventory?

revision=2013-08-19)meter, (urn:opendaylight:flow:inventory?revision=2013-08-19)serial-number, (urn:opendaylight:flow:inventory?revision=2013-08-19)software, (urn:opendaylight:flow:inventory?revision=2013-08-19)supported-actions, (urn:opendaylight:flow:inventory?revision=2013-08-19)supported-instructions, (urn:opendaylight:flow:inventory?revision=2013-08-19)supported-match-types, (urn:opendaylight:flow:inventory?revision=2013-08-19)switch-features, (urn:opendaylight:flow:inventory?revision=2013-08-19)table]}/(urn:opendaylight:flow:inventory?revision=2013-08-19)table/(urn:opendaylight:flow:inventory?revision=2013-08-19)table[{(urn:opendaylight:flow:inventory?revision=2013-08-19)id=0}]/(urn:opendaylight:flow:inventory?revision=2013-08-19)flow/(urn:opendaylight:flow:inventory?revision=2013-08-19)flow[{(urn:opendaylight:flow:inventory?revision=2013-08-19)id=LLDP}]/AugmentationIdentifier{childNames=[(urn:opendaylight:flow:statistics?revision=2013-08-19)flow-statistics]}/(urn:opendaylight:flow:statistics?revision=2013-08-19)flow-statistics/(urn:opendaylight:flow:statistics?revision=2013-08-19)match=ImmutableContainerNode{nodeIdentifier=(urn:opendaylight:flow:statistics?revision=2013-08-19)match, value=[ImmutableContainerNode{nodeIdentifier=(urn:opendaylight:flow:statistics?revision=2013-08-19)ethernet-match, value=[ImmutableContainerNode{nodeIdentifier=(urn:opendaylight:flow:statistics?revision=2013-08-19)ethernet-type, value=[ImmutableLeafNode{nodeIdentifier=(urn:opendaylight:flow:statistics?revision=2013-08-19)type, value=35020, attributes={}}], attributes={}}], 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:332) ~[bundlefile:na] • at org.opendaylight.controller.config.yang.md.sal.binding.impl.RuntimeMappingModule$RuntimeGeneratedMappingServiceProxy.fromDataDom(RuntimeMappingModule.java:147) ~[bundlefile:na] • at org.opendaylight.controller.md.sal.binding.impl.BindingToNormalizedNodeCodec.toBindingImpl(BindingToNormalizedNodeCodec.java:183) ~[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:233) ~[bundlefile:na] • at org.opendaylight.controller.md.sal.binding.impl.AbstractForwardedDataBroker.toBinding(AbstractForwardedDataBroker.java:99) ~[bundlefile:na] • at org.opendaylight.controller.md.sal.binding.impl.AbstractForwardedDataBroker$TranslatedDataChangeEvent.getCreatedData(AbstractForwardedDataBroker.java:183) [bundlefile:na] • at org.opendaylight.controller.md.sal.binding.impl.LegacyDataChangeEvent$OperationalChangeEvent.getCreatedOperationalData(LegacyDataChangeEvent.java:108) [bundlefile:na] • at org.opendaylight.controller.md.statistics.manager.FlowCapableTracker.onDataChanged(FlowCapableTracker.java:93) [bundlefile:na] • at org.opendaylight.controller.md.sal.binding.impl.ForwardedBackwardsCompatibleDataBroker$BackwardsCompatibleOperationalDataChangeInvoker.onDataChanged(ForwardedBackwardsCompatibleDataBroker.java:434) [bundlefile:na] • at org.opendaylight.controller.md.sal.binding.impl.AbstractForwardedDataBroker$TranslatingDataChangeInvoker.onDataChanged(AbstractForwardedDataBroker.java:158) [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_55] • at java.util.concurrent.FutureTask.run(FutureTask.java:262) [na:1.7.0_55] • at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [na:1.7.0_55] • at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [na:1.7.0_55] • at java.lang.Thread.run(Thread.java:745) [na:1.7.0_55] • Caused by: java.lang.IllegalStateException: Failed to lookup instantiated type for path SchemaPath [path=[(urn:opendaylight:inventory?revision=2013-08-19)nodes, (urn:opendaylight:inventory?revision=2013-08-19)node, (urn:opendaylight:flow:inventory?revision=2013-08-19)table, (urn:opendaylight:flow:inventory?revision=2013-08-19)flow, (urn:opendaylight:flow:statistics?revision=2013-08-19)flow-statistics], 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:208) ~[bundlefile:na] • at org.opendaylight.yangtools.sal.binding.generator.impl.InstanceIdentifierCodecImpl._deserializePathArgument(InstanceIdentifierCodecImpl.java:94) ~[bundlefile:na] • at org.opendaylight.yangtools.sal.binding.generator.impl.InstanceIdentifierCodecImpl.deserializePathArgument(InstanceIdentifierCodecImpl.java:193) ~[bundlefile:na] • at org.opendaylight.yangtools.sal.binding.generator.impl.InstanceIdentifierCodecImpl.deserialize(InstanceIdentifierCodecImpl.java:66) ~[bundlefile:na] • at org.opendaylight.yangtools.sal.binding.generator.impl.RuntimeGeneratedMappingServiceImpl.fromDataDom(RuntimeGeneratedMappingServiceImpl.java:329) ~[bundlefile:na] • ... 16 common frames omitted • 2014-05-18 23:13:05.020 EDT [pool-14-thread-1] WARN o.o.y.s.b.g.i.RuntimeGeneratedMappingServiceImpl - Failed to deserialize entry (urn:opendaylight:inventory?revision=2013-08-19)nodes/(urn:opendaylight:inventory?revision=2013-08-19)node[{(urn:opendaylight:inventory?revision=2013-08-19)id=openflow:249065639468610}]/(urn:opendaylight:flow:inventory?revision=2013-08-19)table[{(urn:opendaylight:flow:inventory?revision=2013-08-19)id=0}]/(urn:opendaylight:flow:inventory?revision=2013-08-19)flow[{(urn:opendaylight:flow:inventory?revision=2013-08-19)id=LLDP}]/(urn:opendaylight:flow:statistics?revision=2013-08-19)flow-statistics/(urn:opendaylight:flow:statistics?

revision=2013-08-19)duration • 2014-05-18 23:13:05.021 EDT [pool-14-thread-1] WARN o.o.c.m.s.b.i.AbstractForwardedDataBroker - Failed to transform (urn:opendaylight:inventory?revision=2013-08-19)nodes/(urn:opendaylight:inventory?revision=2013-08-19)node/(urn:opendaylight:inventory?revision=2013-08-19)node[{(urn:opendaylight:inventory?revision=2013-08-19)id=openflow:249065639468610}]/AugmentationIdentifier{childNames=[(urn:opendaylight:flow:inventory?revision=2013-08-19)description, (urn:opendaylight:flow:inventory?revision=2013-08-19)group, (urn:opendaylight:flow:inventory?revision=2013-08-19)hardware, (urn:opendaylight:flow:inventory?revision=2013-08-19)manufacturer, (urn:opendaylight:flow:inventory?

revision=2013-08-19)meter, (urn:opendaylight:flow:inventory?revision=2013-08-19)serial-number, (urn:opendaylight:flow:inventory?revision=2013-08-19)software, (urn:opendaylight:flow:inventory?revision=2013-08-19)supported-actions, (urn:opendaylight:flow:inventory?revision=2013-08-19)supported-instructions, (urn:opendaylight:flow:inventory?revision=2013-08-19)supported-match-types, (urn:opendaylight:flow:inventory?revision=2013-08-19)switch-features, (urn:opendaylight:flow:inventory?revision=2013-08-19)table]}/(urn:opendaylight:flow:inventory?revision=2013-08-19)table/(urn:opendaylight:flow:inventory?revision=2013-08-19)table[{(urn:opendaylight:flow:inventory?revision=2013-08-19)id=0}]/(urn:opendaylight:flow:inventory?revision=2013-08-19)flow/(urn:opendaylight:flow:inventory?revision=2013-08-19)flow[{(urn:opendaylight:flow:inventory?revision=2013-08-19)id=LLDP}]/AugmentationIdentifier{childNames=[(urn:opendaylight:flow:statistics?revision=2013-08-19)flow-statistics]}/(urn:opendaylight:flow:statistics?revision=2013-08-19)flow-statistics/(urn:opendaylight:flow:statistics?revision=2013-08-19)duration=ImmutableContainerNode{nodeIdentifier=(urn:opendaylight:flow:statistics?revision=2013-08-19)duration, value=[ImmutableLeafNode{nodeIdentifier=(urn:opendaylight:flow:statistics?revision=2013-08-19)nanosecond, value=989000000, attributes={}}, ImmutableLeafNode{nodeIdentifier=(urn:opendaylight:flow:statistics?revision=2013-08-19)second, value=0, 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:332) ~[bundlefile:na] • at org.opendaylight.controller.config.yang.md.sal.binding.impl.RuntimeMappingModule$RuntimeGeneratedMappingServiceProxy.fromDataDom(RuntimeMappingModule.java:147) ~[bundlefile:na] • at org.opendaylight.controller.md.sal.binding.impl.BindingToNormalizedNodeCodec.toBindingImpl(BindingToNormalizedNodeCodec.java:183) ~[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:233) ~[bundlefile:na] • at org.opendaylight.controller.md.sal.binding.impl.AbstractForwardedDataBroker.toBinding(AbstractForwardedDataBroker.java:99) ~[bundlefile:na] • at org.opendaylight.controller.md.sal.binding.impl.AbstractForwardedDataBroker$TranslatedDataChangeEvent.getCreatedData(AbstractForwardedDataBroker.java:183) [bundlefile:na] • at org.opendaylight.controller.md.sal.binding.impl.LegacyDataChangeEvent$OperationalChangeEvent.getCreatedOperationalData(LegacyDataChangeEvent.java:108) [bundlefile:na] • at org.opendaylight.controller.md.statistics.manager.FlowCapableTracker.onDataChanged(FlowCapableTracker.java:93) [bundlefile:na] • at org.opendaylight.controller.md.sal.binding.impl.ForwardedBackwardsCompatibleDataBroker$BackwardsCompatibleOperationalDataChangeInvoker.onDataChanged(ForwardedBackwardsCompatibleDataBroker.java:434) [bundlefile:na] • at org.opendaylight.controller.md.sal.binding.impl.AbstractForwardedDataBroker$TranslatingDataChangeInvoker.onDataChanged(AbstractForwardedDataBroker.java:158) [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_55] • at java.util.concurrent.FutureTask.run(FutureTask.java:262) [na:1.7.0_55] • at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [na:1.7.0_55] • at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [na:1.7.0_55] • at java.lang.Thread.run(Thread.java:745) [na:1.7.0_55] • Caused by: java.lang.IllegalStateException: Failed to lookup instantiated type for path SchemaPath [path=[(urn:opendaylight:inventory?revision=2013-08-19)nodes, (urn:opendaylight:inventory?revision=2013-08-19)node, (urn:opendaylight:flow:inventory?revision=2013-08-19)table, (urn:opendaylight:flow:inventory?revision=2013-08-19)flow, (urn:opendaylight:flow:statistics?revision=2013-08-19)flow-statistics], 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:208) ~[bundlefile:na] • at org.opendaylight.yangtools.sal.binding.generator.impl.InstanceIdentifierCodecImpl._deserializePathArgument(InstanceIdentifierCodecImpl.java:94) ~[bundlefile:na]

My Case for Turning off Flow Statistics Logging!Until Thoroughly Debugged and Operational

Page 37: Augmenting Flow Operations and Feedback on the Model Driven MD_SAL Approach in OpenDaylight

Things I think would be Helpful• We need to engage the community to contribute, not feature requests

to the project to scale. ✦ Examples, Examples, Examples. ✦ OFTestCommandProvider is the Holy Grail and needs to be treated as such. It is the

reference implementation, if its wrong, so will the rest be. ✦ NodeConnectors need clarity. Most think in ports, not topology. We are missing an

abstraction to say otherwise. ✦ Understand where MD_SAL stops and OFPlugin Starts. ✦ Is MD_SAL + OFPlugin and AD_SAL + OpenflowJ two separate controllers? <-Not trying

to stir it up here, I just don’t see the connections short of modules running in OSGI. ✦ OVS specific system integration tests. TestCommandProvider tests the kitchen sink. No

datapath can pass all of those so we wind up with expected failures that we will ignore until we shouldn't ignore and it breaks a project.

✦ Turn off FlowStatistics Exception Logs until they are less verbose. ✦ Add debug and trace logging statements to help the consumer not just core MD_SAL

devs. Two different needs and levels of understand. ✦ More IT/UT/CI tests. Need examples and tests for all flowmod CRUD operations.

Page 38: Augmenting Flow Operations and Feedback on the Model Driven MD_SAL Approach in OpenDaylight

/* Some Extra Notes !!

### Controller ### !Yang Models (High Level) -------------------- ~/controller/opendaylight/md-sal/model/model-flow-base/src/main/yang/ ~/controller/opendaylight/md-sal/model/model-flow-base/src/main/yang/opendaylight-action-types.yang ~/controller/opendaylight/md-sal/model/model-flow-base/src/main/yang/opendaylight-flow-types.yang ~/controller/opendaylight/md-sal/model/model-flow-base/src/main/yang/opendaylight-group-types.yang ~/controller/opendaylight/md-sal/model/model-flow-base/src/main/yang/opendaylight-match-types.yang ~/controller/opendaylight/md-sal/model/model-flow-base/src/main/yang/opendaylight-meter-types.yang ~/controller/opendaylight/md-sal/model/model-flow-base/src/main/yang/opendaylight-port-types.yang ~/controller/opendaylight/md-sal/model/model-flow-base/src/main/yang/opendaylight-queue-types.yang ~/controller/opendaylight/md-sal/model/model-flow-base/src/main/yang/opendaylight-table-types.yang !Generated Classes -------------- ~/controller/opendaylight/md-sal/model/model-flow-base/src/main/yang-gen-sal/ ~/controller/opendaylight/md-sal/model/model-flow-base/src/main/yang-gen-sal/org/opendaylight/yang/gen/v1/urn/opendaylight ~/controller/opendaylight/md-sal/model/model-flow-base/src/main/yang-gen-sal/org/opendaylight/yang/gen/v1/urn/opendaylight/action/types/rev131112 ~/controller/opendaylight/md-sal/model/model-flow-base/src/main/yang-gen-sal/org/opendaylight/yang/gen/v1/urn/opendaylight/flow/types ~/controller/opendaylight/md-sal/model/model-flow-base/src/main/yang-gen-sal/org/opendaylight/yang/gen/v1/urn/opendaylight/group/types/rev131018 ~/controller/opendaylight/md-sal/model/model-flow-base/src/main/yang-gen-sal/org/opendaylight/yang/gen/v1/urn/opendaylight/meter/types/rev130918 ~/controller/opendaylight/md-sal/model/model-flow-base/src/main/yang-gen-sal/org/opendaylight/yang/gen/v1/urn/opendaylight/model/match/types/rev131026 ~/controller/opendaylight/md-sal/model/model-flow-base/src/main/yang-gen-sal/org/opendaylight/yang/gen/v1/urn/opendaylight/table/types/rev131026 !!

Page 39: Augmenting Flow Operations and Feedback on the Model Driven MD_SAL Approach in OpenDaylight

Yang Models (Low Level) ### OpenFlowJava ### ------------------- ~/openflowjava/openflow-protocol-api/src/main/yang ~/openflowjava/openflow-protocol-api/src/main/yang/openflow-action.yang ~/openflowjava/openflow-protocol-api/src/main/yang/openflow-augments.yang ~/openflowjava/openflow-protocol-api/src/main/yang/openflow-extensible-match.yang *** ~/openflowjava/openflow-protocol-api/src/main/yang/openflow-instruction.yang ~/openflowjava/openflow-protocol-api/src/main/yang/openflow-protocol.yang ~/openflowjava/openflow-protocol-api/src/main/yang/openflow-types.yang ~/openflowjava/openflow-protocol-api/src/main/yang/system-notifications.yang !Generated Classes -------------- ~/openflowjava/openflow-protocol-api/target/generated-sources/sal ~/openflowjava/openflow-protocol-api/target/generated-sources/sal/org/opendaylight/yang/gen/v1/urn/opendaylight/openflow ~/openflowjava/openflow-protocol-api/target/generated-sources/sal/org/opendaylight/yang/gen/v1/urn/opendaylight/openflow/augments/rev131002 ~/openflowjava/openflow-protocol-api/target/generated-sources/sal/org/opendaylight/yang/gen/v1/urn/opendaylight/openflow/common ~/openflowjava/openflow-protocol-api/target/generated-sources/sal/org/opendaylight/yang/gen/v1/urn/opendaylight/openflow/oxm/rev130731 ~/openflowjava/openflow-protocol-api/target/generated-sources/sal/org/opendaylight/yang/gen/v1/urn/opendaylight/openflow/protocol/rev130731 ~/openflowjava/openflow-protocol-api/target/generated-sources/sal/org/opendaylight/yang/gen/v1/urn/opendaylight/openflow/system/rev130927 !!

Page 40: Augmenting Flow Operations and Feedback on the Model Driven MD_SAL Approach in OpenDaylight

### OpenFlowPlugin Translates Between Controller (HighLevel) and OpenflowJava (LowLevel) !### BUT Controller is not required for OF13 except for class generations from its Yang Models for TestCommandProvider. ###!!

SetFieldMatchBuilder Converts High order Controller to Low order Yang OXM Fields!-----------------------------------------------------------------!~/controller/opendaylight/md-sal/model/model-flow-base/src/main/yang-gen-sal/org/opendaylight/yang/gen/v1/urn/opendaylight/table/types/rev131026/!~/controller/opendaylight/md-sal/model/model-flow-base/src/main/yang-gen-sal/org/opendaylight/yang/gen/v1/urn/opendaylight/table/types/rev131026/set/field/match!~/controller/opendaylight/md-sal/model/model-flow-base/src/main/yang-gen-sal/org/opendaylight/yang/gen/v1/urn/opendaylight/table/types/rev131026/set/field/match/SetFieldMatch.java!~/controller/opendaylight/md-sal/model/model-flow-base/src/main/yang-gen-sal/org/opendaylight/yang/gen/v1/urn/opendaylight/table/types/rev131026/set/field/match/SetFieldMatchBuilder.java!~/controller/opendaylight/md-sal/model/model-flow-base/src/main/yang-gen-sal/org/opendaylight/yang/gen/v1/urn/opendaylight/table/types/rev131026/set/field/match/SetFieldMatchKey.java!!Actions!-------!~/openflowplugin/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/action/!~/openflowplugin/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/action/ActionSetNwDstConvertorImpl.java!~/openflowplugin/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/action/ActionSetNwDstConvertorV10Impl.java!~/openflowplugin/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/action/ActionSetNwDstReactor.java!~/openflowplugin/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/action/ActionSetNwDstReactorMappingFactory.java!~/openflowplugin/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/action/ActionSetNwSrcConvertorImpl.java!~/openflowplugin/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/action/ActionSetNwSrcConvertorV10Impl.java!~/openflowplugin/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/action/ActionSetNwSrcReactor.java!~/openflowplugin/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/action/ActionSetNwSrcReactorMappingFactory.java!!Match!-----!~/openflowplugin/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/match/!~/openflowplugin/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/match/MatchConvertor.java!~/openflowplugin/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/match/MatchConvertorImpl.java!~/openflowplugin/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/match/MatchConvertorV10Impl.java!~/openflowplugin/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/match/MatchReactor.java!~/openflowplugin/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/match/MatchReactorMappingFactory.java!!Convertors!---------!~/openflowplugin/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/!~/openflowplugin/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/ActionConvertor.java!~/openflowplugin/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/TableFeaturesConvertor.java