tokers commented on a change in pull request #176:
URL:
https://github.com/apache/apisix-ingress-controller/pull/176#discussion_r559972425
##########
File path: pkg/seven/state/solver.go
##########
@@ -57,92 +57,58 @@ func (s *ApisixCombination) Solver() (string, error) {
func (s *ApisixCombination) Remove() error {
// services
for _, svc := range s.Services {
- if err := RemoveService(svc); err != nil {
- return err
+ var cluster string
+ if svc.Group != nil {
+ cluster = *svc.Group
}
- }
-
- // upstreams
- for _, up := range s.Upstreams {
- if err := RemoveUpstream(up); err != nil {
- return err
- }
- }
- return nil
-}
-
-func RemoveService(svc *v1.Service) error {
- // find svc ID
- serviceRequest := db.ServiceRequest{FullName: *svc.FullName}
- if service, err := serviceRequest.FindByName(); err != nil {
- // if not found, keep going on.
- if errors.Is(err, utils.ErrNotFound) {
- return nil
- }
- return err
- } else {
- svc.ID = service.ID
- }
- // find ref route
- routeRequest := db.RouteRequest{ServiceId: *svc.ID}
- if route, err := routeRequest.ExistByServiceId(); err != nil {
- if !errors.Is(err, utils.ErrNotFound) {
- // except ErrNotFound, need to retry
- return err
- } else {
- // do delete svc
- var cluster string
- if svc.Group != nil {
- cluster = *svc.Group
- }
- if err :=
conf.Client.Cluster(cluster).Service().Delete(context.TODO(), svc); err != nil {
- log.Errorf("failed to delete svc %s from
APISIX: %s", *svc.FullName, err)
+ svcInCache, err :=
conf.Client.Cluster(cluster).Service().Get(context.TODO(), *svc.FullName)
+ if err != nil {
+ if err == cache.ErrNotFound {
+ log.Errorf("failed to remove service %s: %s",
*svc.FullName, err)
+ continue
+ } else {
return err
+ }
+ }
+ paddingService(svc, svcInCache)
+ err =
conf.Client.Cluster(cluster).Service().Delete(context.TODO(), svc)
+ if err != nil {
+ if err == cache.ErrNotFound {
+ log.Errorf("failed to remove service %s: %s",
*svc.FullName, err)
+ } else if err == cache.ErrStillInUse {
+ log.Warnf("failed to remove service %s: %s",
*svc.FullName, err)
} else {
- db := db.ServiceDB{Services: []*v1.Service{svc}}
- db.DeleteService()
- return nil
+ return err
}
}
- } else {
- return fmt.Errorf("svc %s is still referenced by route %s",
*svc.FullName, *route.FullName)
}
-}
-func RemoveUpstream(up *v1.Upstream) error {
- upstreamRequest := db.UpstreamRequest{FullName: *up.FullName}
- if upstream, err := upstreamRequest.FindByName(); err != nil {
- // if not found, keep going on.
- if errors.Is(err, utils.ErrNotFound) {
- return nil
+ // upstreams
+ for _, ups := range s.Upstreams {
+ var cluster string
+ if ups.Group != nil {
+ cluster = *ups.Group
}
- return err
- } else {
- up.ID = upstream.ID
- }
- serviceRequest := db.ServiceRequest{UpstreamId: *up.ID}
- if svc, err := serviceRequest.ExistByUpstreamId(); err != nil {
Review comment:
In Delete implementations.
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]