diff --git a/test/integration/daemonset/BUILD b/test/integration/daemonset/BUILD index 96e5bfa12a..86042e2796 100644 --- a/test/integration/daemonset/BUILD +++ b/test/integration/daemonset/BUILD @@ -41,6 +41,7 @@ go_test( "//staging/src/k8s.io/client-go/rest:go_default_library", "//staging/src/k8s.io/client-go/tools/cache:go_default_library", "//staging/src/k8s.io/client-go/tools/record:go_default_library", + "//staging/src/k8s.io/client-go/util/retry:go_default_library", "//test/integration/framework:go_default_library", ], ) diff --git a/test/integration/daemonset/daemonset_test.go b/test/integration/daemonset/daemonset_test.go index 1e0af57716..4b5614a9c4 100644 --- a/test/integration/daemonset/daemonset_test.go +++ b/test/integration/daemonset/daemonset_test.go @@ -51,6 +51,7 @@ import ( "k8s.io/kubernetes/pkg/scheduler/factory" labelsutil "k8s.io/kubernetes/pkg/util/labels" "k8s.io/kubernetes/pkg/util/metrics" + "k8s.io/kubernetes/staging/src/k8s.io/client-go/util/retry" "k8s.io/kubernetes/test/integration/framework" ) @@ -461,6 +462,22 @@ func validateFailedPlacementEvent(eventClient corev1typed.EventInterface, t *tes } } +func updateDS(t *testing.T, dsClient appstyped.DaemonSetInterface, dsName string, updateFunc func(*apps.DaemonSet)) *apps.DaemonSet { + var ds *apps.DaemonSet + if err := retry.RetryOnConflict(retry.DefaultBackoff, func() error { + newDS, err := dsClient.Get(dsName, metav1.GetOptions{}) + if err != nil { + return err + } + updateFunc(newDS) + ds, err = dsClient.Update(newDS) + return err + }); err != nil { + t.Fatalf("Failed to update DaemonSet: %v", err) + } + return ds +} + func forEachFeatureGate(t *testing.T, tf func(t *testing.T)) { for _, fg := range featureGates() { func() { @@ -832,7 +849,7 @@ func TestLaunchWithHashCollision(t *testing.T) { // Wait for the DaemonSet to be created before proceeding err = waitForDaemonSetAndControllerRevisionCreated(clientset, ds.Name, ds.Namespace) if err != nil { - t.Fatalf("Failed to create DeamonSet: %v", err) + t.Fatalf("Failed to create DaemonSet: %v", err) } ds, err = dsClient.Get(ds.Name, metav1.GetOptions{}) @@ -875,10 +892,9 @@ func TestLaunchWithHashCollision(t *testing.T) { // Make an update of the DaemonSet which we know will create a hash collision when // the next ControllerRevision is created. - _, err = dsClient.Update(ds) - if err != nil { - t.Fatalf("Failed to update DaemonSet: %v", err) - } + ds = updateDS(t, dsClient, ds.Name, func(updateDS *apps.DaemonSet) { + updateDS.Spec.Template.Spec.TerminationGracePeriodSeconds = &one + }) // Wait for any pod with the latest Spec to exist err = wait.PollImmediate(100*time.Millisecond, 10*time.Second, func() (bool, error) {