Merge pull request #5193 from bprashanth/e2e_stop_controller

Properly reap replication controllers in e2e test
This commit is contained in:
Daniel Smith 2015-03-09 15:38:26 -07:00
commit 6de2e615cb
4 changed files with 24 additions and 20 deletions

View File

@ -26,8 +26,9 @@ import (
) )
const ( const (
interval = time.Second * 3 shortInterval = time.Millisecond * 100
timeout = time.Minute * 5 interval = time.Second * 3
timeout = time.Minute * 5
) )
// A Reaper handles terminating an object as gracefully as possible. // 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 { if err != nil {
return "", err return "", err
} }
resizer, err := ResizerFor("ReplicationController", *reaper)
controller.Spec.Replicas = 0 if err != nil {
// TODO: do retry on 409 errors here? return "", err
if _, err := rc.Update(controller); err != nil { }
cond := ResizeCondition(resizer, &ResizePrecondition{-1, ""}, namespace, name, 0)
if err = wait.Poll(shortInterval, reaper.timeout, cond); err != nil {
return "", err return "", err
} }
if err := wait.Poll(reaper.pollInterval, reaper.timeout, if err := wait.Poll(reaper.pollInterval, reaper.timeout,

View File

@ -43,10 +43,10 @@ func TestReplicationControllerStop(t *testing.T) {
if s != expected { if s != expected {
t.Errorf("expected %s, got %s", expected, s) 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) 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" { if fake.Actions[i].Action != action+"-controller" {
t.Errorf("unexpected action: %v, expected %s-controller", fake.Actions[i], action) t.Errorf("unexpected action: %v, expected %s-controller", fake.Actions[i], action)
} }

View File

@ -23,6 +23,7 @@ import (
"github.com/GoogleCloudPlatform/kubernetes/pkg/api" "github.com/GoogleCloudPlatform/kubernetes/pkg/api"
"github.com/GoogleCloudPlatform/kubernetes/pkg/client" "github.com/GoogleCloudPlatform/kubernetes/pkg/client"
"github.com/GoogleCloudPlatform/kubernetes/pkg/kubectl"
"github.com/GoogleCloudPlatform/kubernetes/pkg/util" "github.com/GoogleCloudPlatform/kubernetes/pkg/util"
. "github.com/onsi/ginkgo" . "github.com/onsi/ginkgo"
@ -123,13 +124,13 @@ var _ = Describe("Networking", func() {
defer func() { defer func() {
defer GinkgoRecover() defer GinkgoRecover()
By("Cleaning up the replication controller") By("Cleaning up the replication controller")
rc.Spec.Replicas = 0 // Resize the replication controller to zero to get rid of pods.
rc, err = c.ReplicationControllers(ns).Update(rc) rcReaper, err := kubectl.ReaperFor("ReplicationController", c)
if err != nil { 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 { if _, err = rcReaper.Stop(ns, rc.Name); err != nil {
Fail(fmt.Sprintf("unable to delete rc %v: %v", rc.Name, err)) Fail(fmt.Sprintf("unable to stop rc %v: %v", rc.Name, err))
} }
}() }()

View File

@ -24,6 +24,7 @@ import (
"github.com/GoogleCloudPlatform/kubernetes/pkg/api" "github.com/GoogleCloudPlatform/kubernetes/pkg/api"
"github.com/GoogleCloudPlatform/kubernetes/pkg/client" "github.com/GoogleCloudPlatform/kubernetes/pkg/client"
"github.com/GoogleCloudPlatform/kubernetes/pkg/kubectl"
"github.com/GoogleCloudPlatform/kubernetes/pkg/labels" "github.com/GoogleCloudPlatform/kubernetes/pkg/labels"
"github.com/GoogleCloudPlatform/kubernetes/pkg/util" "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. // Cleanup the replication controller when we are done.
defer func() { defer func() {
// Resize the replication controller to zero to get rid of pods. // Resize the replication controller to zero to get rid of pods.
controller.Spec.Replicas = 0 By("Cleaning up the replication controller")
if _, err = c.ReplicationControllers(ns).Update(controller); err != nil { rcReaper, err := kubectl.ReaperFor("ReplicationController", c)
Logf("Failed to resize replication controller %s to zero: %v", name, err) if err != nil {
Logf("Failed to cleanup replication controller %v: %v.", controller.Name, err)
} }
if _, err = rcReaper.Stop(ns, controller.Name); err != nil {
// Delete the replication controller. Logf("Failed to stop replication controller %v: %v.", controller.Name, err)
if err = c.ReplicationControllers(ns).Delete(name); err != nil {
Logf("Failed to delete replication controller %s: %v", name, err)
} }
}() }()