diff --git a/pkg/kubectl/stop.go b/pkg/kubectl/stop.go index 9f3537c917..344d45a24c 100644 --- a/pkg/kubectl/stop.go +++ b/pkg/kubectl/stop.go @@ -26,8 +26,9 @@ import ( ) const ( - interval = time.Second * 3 - timeout = time.Minute * 5 + shortInterval = time.Millisecond * 100 + interval = time.Second * 3 + timeout = time.Minute * 5 ) // A Reaper handles terminating an object as gracefully as possible. @@ -69,10 +70,12 @@ func (reaper *ReplicationControllerReaper) Stop(namespace, name string) (string, if err != nil { return "", err } - - controller.Spec.Replicas = 0 - // TODO: do retry on 409 errors here? - if _, err := rc.Update(controller); err != nil { + resizer, err := ResizerFor("ReplicationController", *reaper) + if err != nil { + return "", err + } + cond := ResizeCondition(resizer, &ResizePrecondition{-1, ""}, namespace, name, 0) + if err = wait.Poll(shortInterval, reaper.timeout, cond); err != nil { return "", err } if err := wait.Poll(reaper.pollInterval, reaper.timeout, diff --git a/pkg/kubectl/stop_test.go b/pkg/kubectl/stop_test.go index 0d7c3f3a22..ed1518f241 100644 --- a/pkg/kubectl/stop_test.go +++ b/pkg/kubectl/stop_test.go @@ -43,10 +43,10 @@ func TestReplicationControllerStop(t *testing.T) { if s != expected { t.Errorf("expected %s, got %s", expected, s) } - if len(fake.Actions) != 4 { + if len(fake.Actions) != 5 { t.Errorf("unexpected actions: %v, expected 4 actions (get, update, get, delete)", fake.Actions) } - for i, action := range []string{"get", "update", "get", "delete"} { + for i, action := range []string{"get", "get", "update", "get", "delete"} { if fake.Actions[i].Action != action+"-controller" { t.Errorf("unexpected action: %v, expected %s-controller", fake.Actions[i], action) } diff --git a/test/e2e/networking.go b/test/e2e/networking.go index 34de4720cb..3ae46ad845 100644 --- a/test/e2e/networking.go +++ b/test/e2e/networking.go @@ -23,6 +23,7 @@ import ( "github.com/GoogleCloudPlatform/kubernetes/pkg/api" "github.com/GoogleCloudPlatform/kubernetes/pkg/client" + "github.com/GoogleCloudPlatform/kubernetes/pkg/kubectl" "github.com/GoogleCloudPlatform/kubernetes/pkg/util" . "github.com/onsi/ginkgo" @@ -123,13 +124,13 @@ var _ = Describe("Networking", func() { defer func() { defer GinkgoRecover() By("Cleaning up the replication controller") - rc.Spec.Replicas = 0 - rc, err = c.ReplicationControllers(ns).Update(rc) + // Resize the replication controller to zero to get rid of pods. + rcReaper, err := kubectl.ReaperFor("ReplicationController", c) if err != nil { - Fail(fmt.Sprintf("unable to modify replica count for rc %v: %v", rc.Name, err)) + Fail(fmt.Sprintf("unable to stop rc %v: %v", rc.Name, err)) } - if err = c.ReplicationControllers(ns).Delete(rc.Name); err != nil { - Fail(fmt.Sprintf("unable to delete rc %v: %v", rc.Name, err)) + if _, err = rcReaper.Stop(ns, rc.Name); err != nil { + Fail(fmt.Sprintf("unable to stop rc %v: %v", rc.Name, err)) } }() diff --git a/test/e2e/rc.go b/test/e2e/rc.go index cf67dd62ed..fdfa9816d5 100644 --- a/test/e2e/rc.go +++ b/test/e2e/rc.go @@ -24,6 +24,7 @@ import ( "github.com/GoogleCloudPlatform/kubernetes/pkg/api" "github.com/GoogleCloudPlatform/kubernetes/pkg/client" + "github.com/GoogleCloudPlatform/kubernetes/pkg/kubectl" "github.com/GoogleCloudPlatform/kubernetes/pkg/labels" "github.com/GoogleCloudPlatform/kubernetes/pkg/util" @@ -97,14 +98,13 @@ func ServeImageOrFail(c *client.Client, test string, image string) { // Cleanup the replication controller when we are done. defer func() { // Resize the replication controller to zero to get rid of pods. - controller.Spec.Replicas = 0 - if _, err = c.ReplicationControllers(ns).Update(controller); err != nil { - Logf("Failed to resize replication controller %s to zero: %v", name, err) + By("Cleaning up the replication controller") + rcReaper, err := kubectl.ReaperFor("ReplicationController", c) + if err != nil { + Logf("Failed to cleanup replication controller %v: %v.", controller.Name, err) } - - // Delete the replication controller. - if err = c.ReplicationControllers(ns).Delete(name); err != nil { - Logf("Failed to delete replication controller %s: %v", name, err) + if _, err = rcReaper.Stop(ns, controller.Name); err != nil { + Logf("Failed to stop replication controller %v: %v.", controller.Name, err) } }()