telstra / open-kilda

OpenKilda is an open-source OpenFlow controller initially designed for use in a global network with high control-plane latency and a heavy emphasis on latency-centric data path optimisation.
Apache License 2.0
78 stars 53 forks source link

Switch sync with 'remove excess' during reroute may lead to reroute failure+rollback #4214

Open rtretyak opened 3 years ago

rtretyak commented 3 years ago
  1. Create a flow with reroute potential (flow wants to change path)
  2. Reroute the flow and simultaneously call switch sync with removeExcess=true for related switches Expected: System remains in consistent state, flow is successfully rerouted, no rule discrepancies observed Actual: Flow history shows rule validation errors. Flow reroute is rolled back to previous path
                "action": "Rule validation failed",
                "details": "Failed to validate the ingress rule: commandId 8cbbb9a0-a1d9-11eb-a5c5-67aaf0ed9bcc, switch 00:00:00:00:00:00:00:03, cookie 0x200000000000E360. Error FlowErrorResponse(super=SpeakerFlowSegmentResponse(super=AbstractMessage(messageContext=MessageContext(correlationId=8ca6aafc-a1d9-11eb-a5c5-13d030ab82ad : bc14826e-61ec-4fd2-8dff-b9ae9b1f6e16 : fn-tests-b6c31b6a-a36e-474c-9a1e-e3b00de05440, createTime=1618924130464)), metadata=FlowSegmentMetadata(flowId=20Apr160845_647_pasta5595, cookie=0x200000000000E360, multiTable=true), success=false, requestCreateTime=0, executionTime=0), errorCode=MISSING_OF_FLOWS, description=Detect 1 missing OF flows with cookies [0x0080000007B5000A] on 00:00:00:00:00:00:00:03 related to flow 20Apr160845_647_pasta5595 with cookie 0x200000000000E360 (total verified 5 OF messages))"
rtretyak commented 3 years ago

reproducible by test "Reroute can be simultaneously performed with sync rules requests, removeExcess=#removeExcess"