@@ -38,6 +38,7 @@ import (
38
38
"github.com/contiv/libOpenflow/protocol"
39
39
"github.com/contiv/ofnet/ofctrl"
40
40
cmap "github.com/streamrail/concurrent-map"
41
+ utilerrors "k8s.io/apimachinery/pkg/util/errors"
41
42
)
42
43
43
44
// Vlrouter state.
@@ -338,14 +339,18 @@ func (vl *Vlrouter) AddLocalEndpoint(endpoint OfnetEndpoint) error {
338
339
*/
339
340
func (vl * Vlrouter ) RemoveLocalEndpoint (endpoint OfnetEndpoint ) error {
340
341
342
+ var errList []error
343
+
341
344
log .Infof ("Received Remove Local Endpoint for endpoint:{%+v}" , endpoint )
342
345
// Remove the port vlan flow.
343
346
portVlanFlow := vl .portVlanFlowDb [endpoint .PortNo ]
344
347
if portVlanFlow != nil {
345
348
err := portVlanFlow .Delete ()
346
349
if err != nil {
350
+ errList = append (errList , err )
347
351
log .Errorf ("Error deleting portvlan flow. Err: %v" , err )
348
352
}
353
+ delete (vl .portVlanFlowDb , endpoint .PortNo )
349
354
}
350
355
351
356
// Remove dscp flows.
@@ -354,46 +359,46 @@ func (vl *Vlrouter) RemoveLocalEndpoint(endpoint OfnetEndpoint) error {
354
359
for _ , dflow := range dscpFlows {
355
360
err := dflow .Delete ()
356
361
if err != nil {
362
+ errList = append (errList , err )
357
363
log .Errorf ("Error deleting dscp flow {%+v}. Err: %v" , dflow , err )
358
364
}
359
365
}
366
+ delete (vl .dscpFlowDb , endpoint .PortNo )
360
367
}
361
368
362
369
// Find the flow entry
363
370
flowId := endpoint .EndpointID
364
371
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 )
374
380
}
375
381
376
382
flowId = endpoint .EndpointID + "vlan"
377
383
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 )
387
392
}
388
393
389
394
vl .svcProxy .DelEndpoint (& endpoint )
390
395
391
396
// Remove the endpoint from policy tables
392
397
if ! vl .agent .isInternalBgp (& endpoint ) {
393
- err = vl .policyAgent .DelEndpoint (& endpoint )
398
+ err : = vl .policyAgent .DelEndpoint (& endpoint )
394
399
if err != nil {
400
+ errList = append (errList , err )
395
401
log .Errorf ("Error deleting endpoint to policy agent{%+v}. Err: %v" , endpoint , err )
396
- return err
397
402
}
398
403
}
399
404
@@ -408,12 +413,14 @@ func (vl *Vlrouter) RemoveLocalEndpoint(endpoint OfnetEndpoint) error {
408
413
vl .agent .DeleteLocalProtoRoute ([]* OfnetProtoRouteInfo {path })
409
414
410
415
if endpoint .Ipv6Addr != nil && endpoint .Ipv6Addr .String () != "" {
411
- err = vl .RemoveLocalIpv6Flow (endpoint )
416
+ err : = vl .RemoveLocalIpv6Flow (endpoint )
412
417
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 )
414
420
}
415
421
}
416
- return nil
422
+
423
+ return utilerrors .NewAggregate (errList )
417
424
}
418
425
419
426
// UpdateLocalEndpoint update local endpoint state
0 commit comments