[SFC-222] SFC pipeline seems to be broken in fluorine Created: 02/Jul/18  Updated: 09/Jul/18

Status: Open
Project: sfc
Component/s: None
Affects Version/s: Fluorine
Fix Version/s: None

Type: Bug Priority: Medium
Reporter: Y Ananth Assignee: Unassigned
Resolution: Unresolved Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified

Issue Links:
Relates
relates to GENIUS-174 IFM getEgressActionsForInterface RPC ... Resolved

 Description   

In nsh flows
cookie=0xf005ba1100000005, duration=3764.575s, table=223, n_packets=25, n_bytes=2800, priority=260,nsp=120 actions=resubmit(,83)

It resubmits packets to table 83 which is not present

steps to reproduce:
1. create network
2. create three ports sf_port, source_port, dest_port
3. create three instances with ports.
4. create flowclassifier (without --logical-source-port option flow classifier doesn't work)
(openstack) sfc flow classifier create --ethertype IPv4 --source-ip-prefix 10.0.0.5/32 --destination-ip-prefix 10.0.0.6/32 --protocol tcp --destination-port 80:80 --logical-source-port source_vm_port FC_1
5. create port pairs using
(openstack) sfc port pair create --ingress=sf_port --egress=sf_port PP1
6. create port pair group
(openstack) sfc port pair group create --port-pair PP1 PG1
7. create port chain
(openstack) sfc port chain create --port-pair-group PG1 --flow-classifier FC_1 PC1
8 check communication between source_vm and dest_vm

flows are created but table=223 tries to resubmit to table=83 which is not present

note: create ports with security group allow all rules



 Comments   
Comment by Jaime Caamaño Ruiz [ 05/Jul/18 ]

Table 83 should be there, it is the first table of the SFF pipeline and get initialize as soon as any SF is running as a gest on that compute. I don't see anything particular on the scenario you describe that makes me think it would not work. Can you reproduce consistently?

Comment by Y Ananth [ 05/Jul/18 ]

Yes, below are the flow entries in compute node where it doesn't have table=83

https://logs.opendaylight.org/sandbox/vex-yul-odl-jenkins-2/netvirt-csit-1node-openstack-queens-sfc-fluorine/4/robot-plugin/log_full.html.gz#s1-t16-k8-k1-k1-k2-k1-k12-k4

this occurs only in fluorine

Comment by Jaime Caamaño Ruiz [ 05/Jul/18 ]

If you checked the sfc module in the debug output, the rendered service path is not there. Looking at the logs, there is an exception indicating that something is amiss with the model. Need to check further...

The exception:

 

Caused by: org.opendaylight.mdsal.binding.dom.codec.impl.IncorrectNestingException: Supplied class interface org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nodes.node.table.flow.instructions.instruction.instruction.apply.actions._case.apply.actions.action.action.NxActionRegLoadNodesNodeTableFlowApplyActionsCase is not valid case in org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action at org.opendaylight.mdsal.binding.dom.codec.impl.IncorrectNestingException.create(IncorrectNestingException.java:25) ~[279:org.opendaylight.mdsal.binding-dom-codec:0.13.0.SNAPSHOT] at org.opendaylight.mdsal.binding.dom.codec.impl.DataContainerCodecContext.childNonNull(DataContainerCodecContext.java:180) ~[279:org.opendaylight.mdsal.binding-dom-codec:0.13.0.SNAPSHOT] at org.opendaylight.mdsal.binding.dom.codec.impl.ChoiceNodeCodecContext.streamChild(ChoiceNodeCodecContext.java:193) ~[279:org.opendaylight.mdsal.binding-dom-codec:0.13.0.SNAPSHOT] at org.opendaylight.mdsal.binding.dom.codec.impl.BindingToNormalizedStreamWriter.enter(BindingToNormalizedStreamWriter.java:76) ~[279:org.opendaylight.mdsal.binding-dom-codec:0.13.0.SNAPSHOT] at org.opendaylight.mdsal.binding.dom.codec.impl.BindingToNormalizedStreamWriter.startCase(BindingToNormalizedStreamWriter.java:146) ~[279:org.opendaylight.mdsal.binding-dom-codec:0.13.0.SNAPSHOT] at org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nodes.node.table.flow.instructions.instruction.instruction.apply.actions._case.apply.actions.action.action.NxActionRegLoadNodesNodeTableFlowApplyActionsCase$StreamWriter.serialize(DataObjectSerializerPrototype.java) ~[381:org.opendaylight.openflowplugin.extension-nicira:0.7.0.SNAPSHOT] at org.opendaylight.mdsal.binding.dom.codec.impl.BindingNormalizedNodeCodecRegistry$DataObjectSerializerProxy.serialize(BindingNormalizedNodeCodecRegistry.java:303) ~[279:org.opendaylight.mdsal.binding-dom-codec:0.13.0.SNAPSHOT] at org.opendaylight.mdsal.binding.dom.codec.util.ChoiceDispatchSerializer.serialize(ChoiceDispatchSerializer.java:46) ~[279:org.opendaylight.mdsal.binding-dom-codec:0.13.0.SNAPSHOT] at org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action$StreamWriter.serialize(DataObjectSerializerPrototype.java) ~[385:org.opendaylight.openflowplugin.model.flow-base:0.7.0.SNAPSHOT] at org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rpcs.rev160406.GetEgressActionsForInterfaceOutput$StreamWriter.serialize(DataObjectSerializerPrototype.java) ~[248:org.opendaylight.genius.interfacemanager-api:0.5.0.SNAPSHOT] at org.opendaylight.mdsal.binding.dom.codec.impl.BindingNormalizedNodeCodecRegistry$DataObjectSerializerProxy.serialize(BindingNormalizedNodeCodecRegistry.java:303) ~[279:org.opendaylight.mdsal.binding-dom-codec:0.13.0.SNAPSHOT] at org.opendaylight.mdsal.binding.dom.codec.impl.BindingNormalizedNodeCodecRegistry.toNormalizedNodeRpcData(BindingNormalizedNodeCodecRegistry.java:145) ~[279:org.opendaylight.mdsal.binding-dom-codec:0.13.0.SNAPSHOT] at org.opendaylight.mdsal.binding.dom.adapter.LazyDOMRpcResultFuture.transform(LazyDOMRpcResultFuture.java:115) ~[278:org.opendaylight.mdsal.binding-dom-adapter:2.5.0.SNAPSHOT] at org.opendaylight.mdsal.binding.dom.adapter.LazyDOMRpcResultFuture.transformIfNecessary(LazyDOMRpcResultFuture.java:106) ~[278:org.opendaylight.mdsal.binding-dom-adapter:2.5.0.SNAPSHOT] at org.opendaylight.mdsal.binding.dom.adapter.LazyDOMRpcResultFuture.get(LazyDOMRpcResultFuture.java:62) ~[278:org.opendaylight.mdsal.binding-dom-adapter:2.5.0.SNAPSHOT] at org.opendaylight.mdsal.binding.dom.adapter.LazyDOMRpcResultFuture.get(LazyDOMRpcResultFuture.java:26) ~[278:org.opendaylight.mdsal.binding-dom-adapter:2.5.0.SNAPSHOT] at com.google.common.util.concurrent.Uninterruptibles.getUninterruptibly(Uninterruptibles.java:168) ~[32:com.google.guava:23.6.1.jre] at com.google.common.util.concurrent.Futures.getDone(Futures.java:1436) ~[32:com.google.guava:23.6.1.jre] at com.google.common.util.concurrent.AbstractTransformFuture.run(AbstractTransformFuture.java:85) ~[32:com.google.guava:23.6.1.jre] at com.google.common.util.concurrent.MoreExecutors$DirectExecutor.execute(MoreExecutors.java:398) ~[32:com.google.guava:23.6.1.jre] at com.google.common.util.concurrent.AbstractFuture.executeListener(AbstractFuture.java:1015) ~[32:com.google.guava:23.6.1.jre] at com.google.common.util.concurrent.AbstractFuture.addListener(AbstractFuture.java:672) ~[32:com.google.guava:23.6.1.jre] at com.google.common.util.concurrent.AbstractFuture$TrustedFuture.addListener(AbstractFuture.java:107) ~[32:com.google.guava:23.6.1.jre] at org.opendaylight.mdsal.binding.dom.adapter.LazyDOMRpcResultFuture.addListener(LazyDOMRpcResultFuture.java:54) ~[278:org.opendaylight.mdsal.binding-dom-adapter:2.5.0.SNAPSHOT] at com.google.common.util.concurrent.AbstractTransformFuture.create(AbstractTransformFuture.java:40) ~[32:com.google.guava:23.6.1.jre] at com.google.common.util.concurrent.Futures.transformAsync(Futures.java:627) ~[32:com.google.guava:23.6.1.jre] at org.opendaylight.controller.md.sal.dom.broker.impl.DOMRpcRouter.invokeRpc(DOMRpcRouter.java:151) ~[219:org.opendaylight.controller.sal-broker-impl:1.8.0.SNAPSHOT] at Proxy033a91ec_d2f0_4526_980c_ff2540edaabd.invokeRpc(Unknown Source) ~[?:?] at Proxy9c8b5e87_2b63_4ef3_bc2f_08c97c815aca.invokeRpc(Unknown Source) ~[?:?] at org.opendaylight.controller.md.sal.binding.impl.RpcServiceAdapter.invoke0(RpcServiceAdapter.java:68) ~[217:org.opendaylight.controller.sal-binding-broker-impl:1.8.0.SNAPSHOT] at org.opendaylight.controller.md.sal.binding.impl.RpcServiceAdapter.access$000(RpcServiceAdapter.java:46) ~[217:org.opendaylight.controller.sal-binding-broker-impl:1.8.0.SNAPSHOT] at org.opendaylight.controller.md.sal.binding.impl.RpcServiceAdapter$RpcInvocationStrategy.invoke(RpcServiceAdapter.java:165) ~[217:org.opendaylight.controller.sal-binding-broker-impl:1.8.0.SNAPSHOT] at org.opendaylight.controller.md.sal.binding.impl.RpcServiceAdapter.invoke(RpcServiceAdapter.java:99) ~[217:org.opendaylight.controller.sal-binding-broker-impl:1.8.0.SNAPSHOT] at com.sun.proxy.$Proxy170.getEgressActionsForInterface(Unknown Source) ~[?:?] at org.opendaylight.sfc.genius.util.SfcGeniusRpcClient.getEgressActionsFromGeniusRPC(SfcGeniusRpcClient.java:101) ~[412:org.opendaylight.sfc.genius:0.8.0.SNAPSHOT] ... 22 more

Comment by Jaime Caamaño Ruiz [ 09/Jul/18 ]

Related MSDSAL patches workaround the issue by (re)adding a shortcut for local RPC invocation that avoids serialization and prevents this specific issue.

Root cause is GENIUS-174.

Generated at Wed Feb 07 20:38:57 UTC 2024 using Jira 8.20.10#820010-sha1:ace47f9899e9ee25d7157d59aa17ab06aee30d3d.