@@ -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*/
339340func (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