Skip to content

Commit c27d23e

Browse files
zhouzijiangunknown
authored and
unknown
committed
Deleted flow cache in vlrouter when removing local endpoint
Signed-off-by: zhouzijiang <[email protected]>
1 parent c080e5b commit c27d23e

File tree

1 file changed

+30
-23
lines changed

1 file changed

+30
-23
lines changed

vlrouter.go

+30-23
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ import (
3838
"github.com/contiv/libOpenflow/protocol"
3939
"github.com/contiv/ofnet/ofctrl"
4040
cmap "github.com/streamrail/concurrent-map"
41+
utilerrors "k8s.io/apimachinery/pkg/util/errors"
4142
)
4243

4344
// Vlrouter state.
@@ -338,14 +339,18 @@ func (vl *Vlrouter) AddLocalEndpoint(endpoint OfnetEndpoint) error {
338339
*/
339340
func (vl *Vlrouter) RemoveLocalEndpoint(endpoint OfnetEndpoint) error {
340341

342+
var errList []error
343+
341344
log.Infof("Received Remove Local Endpoint for endpoint:{%+v}", endpoint)
342345
// Remove the port vlan flow.
343346
portVlanFlow := vl.portVlanFlowDb[endpoint.PortNo]
344347
if portVlanFlow != nil {
345348
err := portVlanFlow.Delete()
346349
if err != nil {
350+
errList = append(errList, err)
347351
log.Errorf("Error deleting portvlan flow. Err: %v", err)
348352
}
353+
delete(vl.portVlanFlowDb, endpoint.PortNo)
349354
}
350355

351356
// Remove dscp flows.
@@ -354,46 +359,46 @@ func (vl *Vlrouter) RemoveLocalEndpoint(endpoint OfnetEndpoint) error {
354359
for _, dflow := range dscpFlows {
355360
err := dflow.Delete()
356361
if err != nil {
362+
errList = append(errList, err)
357363
log.Errorf("Error deleting dscp flow {%+v}. Err: %v", dflow, err)
358364
}
359365
}
366+
delete(vl.dscpFlowDb, endpoint.PortNo)
360367
}
361368

362369
// Find the flow entry
363370
flowId := endpoint.EndpointID
364371
ipFlow := vl.flowDb[flowId]
365-
if ipFlow == nil {
366-
log.Errorf("Error finding the flow for endpoint: %+v", endpoint)
367-
return errors.New("Flow not found")
368-
}
369-
370-
// Delete the Fgraph entry
371-
err := ipFlow.Delete()
372-
if err != nil {
373-
log.Errorf("Error deleting the endpoint: %+v. Err: %v", endpoint, err)
372+
if ipFlow != nil {
373+
// Delete the Fgraph entry
374+
err := ipFlow.Delete()
375+
if err != nil {
376+
errList = append(errList, err)
377+
log.Errorf("Error deleting the endpoint: %+v. Err: %v", endpoint, err)
378+
}
379+
delete(vl.flowDb, flowId)
374380
}
375381

376382
flowId = endpoint.EndpointID + "vlan"
377383
ipFlow = vl.flowDb[flowId]
378-
if ipFlow == nil {
379-
log.Errorf("Error finding the tagged flow for endpoint: %+v", endpoint)
380-
return errors.New("Flow not found")
381-
}
382-
383-
// Delete the Fgraph entry
384-
err = ipFlow.Delete()
385-
if err != nil {
386-
log.Errorf("Error deleting the endpoint: %+v. Err: %v", endpoint, err)
384+
if ipFlow != nil {
385+
// Delete the Fgraph entry
386+
err := ipFlow.Delete()
387+
if err != nil {
388+
errList = append(errList, err)
389+
log.Errorf("Error deleting the endpoint: %+v. Err: %v", endpoint, err)
390+
}
391+
delete(vl.flowDb, flowId)
387392
}
388393

389394
vl.svcProxy.DelEndpoint(&endpoint)
390395

391396
// Remove the endpoint from policy tables
392397
if !vl.agent.isInternalBgp(&endpoint) {
393-
err = vl.policyAgent.DelEndpoint(&endpoint)
398+
err := vl.policyAgent.DelEndpoint(&endpoint)
394399
if err != nil {
400+
errList = append(errList, err)
395401
log.Errorf("Error deleting endpoint to policy agent{%+v}. Err: %v", endpoint, err)
396-
return err
397402
}
398403
}
399404

@@ -408,12 +413,14 @@ func (vl *Vlrouter) RemoveLocalEndpoint(endpoint OfnetEndpoint) error {
408413
vl.agent.DeleteLocalProtoRoute([]*OfnetProtoRouteInfo{path})
409414

410415
if endpoint.Ipv6Addr != nil && endpoint.Ipv6Addr.String() != "" {
411-
err = vl.RemoveLocalIpv6Flow(endpoint)
416+
err := vl.RemoveLocalIpv6Flow(endpoint)
412417
if err != nil {
413-
return err
418+
errList = append(errList, err)
419+
log.Errorf("Error deleting the endpoint ipv6 flow{%+v}. Err: %v", endpoint, err)
414420
}
415421
}
416-
return nil
422+
423+
return utilerrors.NewAggregate(errList)
417424
}
418425

419426
// UpdateLocalEndpoint update local endpoint state

0 commit comments

Comments
 (0)