diff --git a/pkg/reconciler/revision/reconcile_resources.go b/pkg/reconciler/revision/reconcile_resources.go index cdb90c553794..8089fb120ab6 100644 --- a/pkg/reconciler/revision/reconcile_resources.go +++ b/pkg/reconciler/revision/reconcile_resources.go @@ -120,7 +120,7 @@ func (c *Reconciler) reconcileDeployment(ctx context.Context, rev *v1.Revision) } } - if deployment.Status.ReadyReplicas > 0 { + if deployment.Spec.Replicas != nil && deployment.Status.ReadyReplicas >= *deployment.Spec.Replicas { rev.Status.MarkContainerHealthyTrue() } diff --git a/test/e2e/minscale_readiness_test.go b/test/e2e/minscale_readiness_test.go index 95d6fb5c0e3a..bb2b54136a3a 100644 --- a/test/e2e/minscale_readiness_test.go +++ b/test/e2e/minscale_readiness_test.go @@ -85,24 +85,32 @@ func TestMinScale(t *testing.T) { revName := latestRevisionName(t, clients, names.Config, "") serviceName := PrivateServiceName(t, clients, revName) - t.Log("Waiting for revision to scale to minScale before becoming ready") - if lr, err := waitForDesiredScale(clients, serviceName, gte(minScale)); err != nil { - t.Fatalf("The revision %q scaled to %d < %d before becoming ready: %v", revName, lr, minScale, err) - } - - t.Log("Waiting for revision to become ready") + t.Log("Waiting for new revision to become ready") if err := v1test.WaitForRevisionState( clients.ServingClient, revName, v1test.IsRevisionReady, "RevisionIsReady", ); err != nil { t.Fatalf("The Revision %q did not become ready: %v", revName, err) } + revision, err := clients.ServingClient.Revisions.Get(context.Background(), revName, metav1.GetOptions{}) + if err != nil { + t.Fatalf("An error occurred getting revision %v, %v", revName, err) + } + if replicas := *revision.Status.ActualReplicas; replicas < minScale { + t.Fatalf("Container is indicated as healthy. Expected actual replicas for revision %v to be %v but got %v", revision.Name, minScale, replicas) + } + + t.Log("Waiting for revision to scale to minScale before becoming ready") + if lr, err := waitForDesiredScale(clients, serviceName, gte(minScale)); err != nil { + t.Fatalf("The revision %q scaled to %d < %d before becoming ready: %v", revName, lr, minScale, err) + } + t.Log("Holding revision at minScale after becoming ready") if lr, ok := ensureDesiredScale(clients, t, serviceName, gte(minScale)); !ok { t.Fatalf("The revision %q observed scale %d < %d after becoming ready", revName, lr, minScale) } - revision, err := clients.ServingClient.Revisions.Get(context.Background(), revName, metav1.GetOptions{}) + revision, err = clients.ServingClient.Revisions.Get(context.Background(), revName, metav1.GetOptions{}) if err != nil { t.Fatalf("An error occurred getting revision %v, %v", revName, err) } @@ -118,11 +126,6 @@ func TestMinScale(t *testing.T) { newRevName := latestRevisionName(t, clients, names.Config, revName) newServiceName := PrivateServiceName(t, clients, newRevName) - t.Log("Waiting for new revision to scale to minScale after update") - if lr, err := waitForDesiredScale(clients, newServiceName, gte(minScale)); err != nil { - t.Fatalf("The revision %q scaled to %d < %d after creating route: %v", newRevName, lr, minScale, err) - } - t.Log("Waiting for new revision to become ready") if err := v1test.WaitForRevisionState( clients.ServingClient, newRevName, v1test.IsRevisionReady, "RevisionIsReady", @@ -130,6 +133,19 @@ func TestMinScale(t *testing.T) { t.Fatalf("The Revision %q did not become ready: %v", newRevName, err) } + revision, err = clients.ServingClient.Revisions.Get(context.Background(), newRevName, metav1.GetOptions{}) + if err != nil { + t.Fatalf("An error occurred getting revision %v, %v", newRevName, err) + } + if replicas := *revision.Status.ActualReplicas; replicas < minScale { + t.Fatalf("Container is indicated as healthy. Expected actual replicas for revision %v to be %v but got %v", revision.Name, minScale, replicas) + } + + t.Log("Waiting for new revision to scale to minScale after update") + if lr, err := waitForDesiredScale(clients, newServiceName, gte(minScale)); err != nil { + t.Fatalf("The revision %q scaled to %d < %d after creating route: %v", newRevName, lr, minScale, err) + } + t.Log("Holding new revision at minScale after becoming ready") if lr, ok := ensureDesiredScale(clients, t, newServiceName, gte(minScale)); !ok { t.Fatalf("The revision %q observed scale %d < %d after becoming ready", newRevName, lr, minScale)