From d7fc4637e9553ec48c7a27b2e50641d1e735edc4 Mon Sep 17 00:00:00 2001 From: Kouhei Ueno Date: Tue, 5 Aug 2014 05:42:01 +0900 Subject: [PATCH] ServiceRegistryStorage.Delete should respect zone. --- pkg/registry/servicestorage.go | 45 ++++++++++++++++++++--------- pkg/registry/servicestorage_test.go | 2 +- 2 files changed, 33 insertions(+), 14 deletions(-) diff --git a/pkg/registry/servicestorage.go b/pkg/registry/servicestorage.go index 35d0df7d9b8..fdcdf520981 100644 --- a/pkg/registry/servicestorage.go +++ b/pkg/registry/servicestorage.go @@ -118,25 +118,44 @@ func (sr *ServiceRegistryStorage) Get(id string) (interface{}, error) { return service, err } +func (sr *ServiceRegistryStorage) deleteExternalLoadBalancer(service *api.Service) error { + if !service.CreateExternalLoadBalancer || sr.cloud == nil { + return nil + } + + zones, ok := sr.cloud.Zones() + if !ok { + // We failed to get zone enumerator. + // As this should have failed when we tried in "create" too, + // assume external load balancer was never created. + return nil + } + + balancer, ok := sr.cloud.TCPLoadBalancer() + if !ok { + // See comment above. + return nil + } + + zone, err := zones.GetZone() + if err != nil { + return err + } + + if err := balancer.DeleteTCPLoadBalancer(service.JSONBase.ID, zone); err != nil { + return err + } + + return nil +} + func (sr *ServiceRegistryStorage) Delete(id string) (<-chan interface{}, error) { service, err := sr.registry.GetService(id) if err != nil { return nil, err } return apiserver.MakeAsync(func() (interface{}, error) { - if service.CreateExternalLoadBalancer { - var balancer cloudprovider.TCPLoadBalancer - var ok bool - if sr.cloud != nil { - balancer, ok = sr.cloud.TCPLoadBalancer() - } - if ok && balancer != nil { - err = balancer.DeleteTCPLoadBalancer(id, "us-central1") - if err != nil { - return nil, err - } - } - } + sr.deleteExternalLoadBalancer(service) return api.Status{Status: api.StatusSuccess}, sr.registry.DeleteService(id) }), nil } diff --git a/pkg/registry/servicestorage_test.go b/pkg/registry/servicestorage_test.go index 0492d37ba98..866b0026224 100644 --- a/pkg/registry/servicestorage_test.go +++ b/pkg/registry/servicestorage_test.go @@ -211,7 +211,7 @@ func TestServiceRegistryDeleteExternal(t *testing.T) { c, _ := storage.Delete(svc.ID) <-c - if len(fakeCloud.Calls) != 1 || fakeCloud.Calls[0] != "delete" { + if len(fakeCloud.Calls) != 2 || fakeCloud.Calls[0] != "get-zone" || fakeCloud.Calls[1] != "delete" { t.Errorf("Unexpected call(s): %#v", fakeCloud.Calls) } srv, err := memory.GetService(svc.ID)