From 9996654c4c089cec48d694151b2c18717903ce18 Mon Sep 17 00:00:00 2001 From: gmarek Date: Tue, 24 Feb 2015 14:29:17 +0100 Subject: [PATCH 1/2] Add waiting for GCE operations to finish before proceeding in various functions. --- pkg/cloudprovider/gce/gce.go | 31 ++++++++++++++++++++++++++----- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/pkg/cloudprovider/gce/gce.go b/pkg/cloudprovider/gce/gce.go index 529c810643e..da8f6d2ff70 100644 --- a/pkg/cloudprovider/gce/gce.go +++ b/pkg/cloudprovider/gce/gce.go @@ -174,7 +174,11 @@ func (gce *GCECloud) makeTargetPool(name, region string, hosts []string, affinit Instances: instances, SessionAffinity: string(affinityType), } - _, err := gce.service.TargetPools.Insert(gce.projectID, region, pool).Do() + op, err := gce.service.TargetPools.Insert(gce.projectID, region, pool).Do() + if err != nil { + return "", err + } + err = gce.waitForRegionOp(op, region) if err != nil { return "", err } @@ -186,7 +190,7 @@ func (gce *GCECloud) waitForRegionOp(op *compute.Operation, region string) error pollOp := op for pollOp.Status != "DONE" { var err error - time.Sleep(time.Second * 10) + time.Sleep(time.Second) pollOp, err = gce.service.RegionOperations.Get(gce.projectID, region, op.Name).Do() if err != nil { return err @@ -254,17 +258,34 @@ func (gce *GCECloud) UpdateTCPLoadBalancer(name, region string, hosts []string) Instances: refs, } - _, err := gce.service.TargetPools.AddInstance(gce.projectID, region, name, req).Do() + op, err := gce.service.TargetPools.AddInstance(gce.projectID, region, name, req).Do() + gce.waitForRegionOp(op, region) + if err != nil { + return err + } return err } // DeleteTCPLoadBalancer is an implementation of TCPLoadBalancer.DeleteTCPLoadBalancer. func (gce *GCECloud) DeleteTCPLoadBalancer(name, region string) error { - _, err := gce.service.ForwardingRules.Delete(gce.projectID, region, name).Do() + op, err := gce.service.ForwardingRules.Delete(gce.projectID, region, name).Do() if err != nil { + glog.Warningln("Failed to delete Forwarding Rules %s: got error %s. Trying to delete Target Pool", name, err.Error()) return err + } else { + err = gce.waitForRegionOp(op, region) + if err != nil { + glog.Warningln("Failed waiting for Forwarding Rule %s to be deleted: got error %s. Trying to delete Target Pool", name, err.Error()) + } + } + op, err = gce.service.TargetPools.Delete(gce.projectID, region, name).Do() + if err != nil { + glog.Warningln("Failed to delete Target Pool %s, got error %s.", name, err.Error()) + } + err = gce.waitForRegionOp(op, region) + if err != nil { + glog.Warningln("Failed waiting for Target Pool %s to be deleted: got error %s.", name, err.Error()) } - _, err = gce.service.TargetPools.Delete(gce.projectID, region, name).Do() return err } From 0be5aa52e653ed645d960c533bf6874673c3dfef Mon Sep 17 00:00:00 2001 From: gmarek Date: Wed, 25 Feb 2015 08:06:45 +0100 Subject: [PATCH 2/2] Apply comments --- pkg/cloudprovider/gce/gce.go | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/pkg/cloudprovider/gce/gce.go b/pkg/cloudprovider/gce/gce.go index da8f6d2ff70..9210b7f0320 100644 --- a/pkg/cloudprovider/gce/gce.go +++ b/pkg/cloudprovider/gce/gce.go @@ -178,8 +178,7 @@ func (gce *GCECloud) makeTargetPool(name, region string, hosts []string, affinit if err != nil { return "", err } - err = gce.waitForRegionOp(op, region) - if err != nil { + if err = gce.waitForRegionOp(op, region); err != nil { return "", err } link := fmt.Sprintf("https://www.googleapis.com/compute/v1/projects/%s/regions/%s/targetPools/%s", gce.projectID, region, name) @@ -259,10 +258,10 @@ func (gce *GCECloud) UpdateTCPLoadBalancer(name, region string, hosts []string) } op, err := gce.service.TargetPools.AddInstance(gce.projectID, region, name, req).Do() - gce.waitForRegionOp(op, region) if err != nil { return err } + err = gce.waitForRegionOp(op, region) return err }