Repository: knative/serving
Pull request #10500 (2021-01-07 11:27:02)

[Automated] Update net-contour nightly
Produced via:
```shell
for x in net-contour.yaml contour.yaml; do
  curl https://storage.googleapis.com/knative-nightly/net-contour/latest/$x > ${GITHUB_WORKSPACE}/./third_party/contour-latest/$x
done
```
/assign @knative/networking-wg-leads
/cc @knative/networking-wg-leads

knative-prow-robot: [APPROVALNOTIFIER] This PR is **NOT APPROVED**

This pull-request has been approved by: *<a href="https://github.com/knative/serving/pull/10500#" title="Author self-approved">knative-automation</a>*
To complete the [pull request process](https://git.k8s.io/community/contributors/guide/owners.md#the-code-review-process), please assign **yanweiguo** after the PR has been reviewed.
You can assign the PR to them by writing `/assign @yanweiguo` in a comment when ready.

The full list of commands accepted by this bot can be found [here](https://go.k8s.io/bot-commands?repo=knative%2Fserving).

<details open>
Needs approval from an approver in each of these files:

- **[third_party/OWNERS](https://github.com/knative/serving/blob/master/third_party/OWNERS)**

Approvers can indicate their approval by writing `/approve` in a comment
Approvers can cancel approval by writing `/approve cancel` in a comment
</details>
<!-- META={"approvers":["yanweiguo"]} -->
codecov[bot]: # [Codecov](https://codecov.io/gh/knative/serving/pull/10500?src=pr&el=h1) Report
> Merging [#10500](https://codecov.io/gh/knative/serving/pull/10500?src=pr&el=desc) (28e9f13) into [master](https://codecov.io/gh/knative/serving/commit/edf5ae036c246b98b4392017fb1d94b7ced066b0?el=desc) (edf5ae0) will **not change** coverage.
> The diff coverage is `n/a`.

[![Impacted file tree graph](https://codecov.io/gh/knative/serving/pull/10500/graphs/tree.svg?width=650&height=150&src=pr&token=MPpDfAj4Ui)](https://codecov.io/gh/knative/serving/pull/10500?src=pr&el=tree)

```diff
@@           Coverage Diff           @@
##           master   #10500   +/-   ##
=======================================
  Coverage   88.06%   88.06%           
=======================================
  Files         187      187           
  Lines        8855     8855           
=======================================
  Hits         7798     7798           
+ Misses        817      816    -1     
- Partials      240      241    +1     
```


| [Impacted Files](https://codecov.io/gh/knative/serving/pull/10500?src=pr&el=tree) | Coverage Δ | |
|---|---|---|
| [pkg/reconciler/autoscaling/kpa/scaler.go](https://codecov.io/gh/knative/serving/pull/10500/diff?src=pr&el=tree#diff-cGtnL3JlY29uY2lsZXIvYXV0b3NjYWxpbmcva3BhL3NjYWxlci5nbw==) | `88.57% <0.00%> (-1.43%)` | :arrow_down: |
| [pkg/activator/net/revision\_backends.go](https://codecov.io/gh/knative/serving/pull/10500/diff?src=pr&el=tree#diff-cGtnL2FjdGl2YXRvci9uZXQvcmV2aXNpb25fYmFja2VuZHMuZ28=) | `91.32% <0.00%> (+0.91%)` | :arrow_up: |

------

[Continue to review full report at Codecov](https://codecov.io/gh/knative/serving/pull/10500?src=pr&el=continue).
> **Legend** - [Click here to learn more](https://docs.codecov.io/docs/codecov-delta)
> `Δ = absolute <relative> (impact)`, `ø = not affected`, `? = missing data`
> Powered by [Codecov](https://codecov.io/gh/knative/serving/pull/10500?src=pr&el=footer). Last update [edf5ae0...28e9f13](https://codecov.io/gh/knative/serving/pull/10500?src=pr&el=lastupdated). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments).

knative-prow-robot: @knative-automation: The following test **failed**, say `/retest` to rerun all failed tests:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
pull-knative-serving-contour-tls | 28e9f13f730405fdcd6b9580348951fd922bbff5 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative_serving/10500/pull-knative-serving-contour-tls/1347142724070936576) | `/test pull-knative-serving-contour-tls`

[Full PR test history](https://gubernator.knative.dev/pr/knative_serving/10500). [Your PR dashboard](https://gubernator.knative.dev/pr/knative-automation).

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository. I understand the commands that are listed [here](https://go.k8s.io/bot-commands).
</details>
<!-- test report -->
knative-prow-robot: @knative-automation: The following tests **failed**, say `/retest` to rerun all failed tests:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
pull-knative-serving-contour-tls | 28e9f13f730405fdcd6b9580348951fd922bbff5 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative_serving/10500/pull-knative-serving-contour-tls/1347142724070936576) | `/test pull-knative-serving-contour-tls`
pull-knative-serving-istio-stable-no-mesh-tls | 28e9f13f730405fdcd6b9580348951fd922bbff5 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative_serving/10500/pull-knative-serving-istio-stable-no-mesh-tls/1347142724041576448) | `/test pull-knative-serving-istio-stable-no-mesh-tls`

[Full PR test history](https://gubernator.knative.dev/pr/knative_serving/10500). [Your PR dashboard](https://gubernator.knative.dev/pr/knative-automation).

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository. I understand the commands that are listed [here](https://go.k8s.io/bot-commands).
</details>
<!-- test report -->

Patch:
diff --git a/config/core/configmaps/deployment.yaml b/config/core/configmaps/deployment.yaml
index d21d1a98e..a112982eb 100644
--- a/config/core/configmaps/deployment.yaml
+++ b/config/core/configmaps/deployment.yaml
@@ -20,7 +20,7 @@ metadata:
   labels:
     serving.knative.dev/release: devel
   annotations:
-    knative.dev/example-checksum: "52900e59"
+    knative.dev/example-checksum: "fa67b403"
 data:
   # This is the Go import path for the binary that is containerized
   # and substituted here.
@@ -50,7 +50,7 @@ data:
 
     # ProgressDeadline is the duration we wait for the deployment to
     # be ready before considering it failed.
-    progressDeadline: "120s"
+    progressDeadline: "600s"
 
     # queueSidecarCPURequest is the requests.cpu to set for the queue proxy sidecar container.
     # If omitted, a default value (currently "25m"), is used.
diff --git a/go.mod b/go.mod
index 087111ef6..2f95dc1ab 100644
--- a/go.mod
+++ b/go.mod
@@ -33,9 +33,9 @@ require (
 	k8s.io/client-go v0.18.12
 	k8s.io/code-generator v0.18.12
 	k8s.io/kube-openapi v0.0.0-20200410145947-bcb3869e6f29
-	knative.dev/caching v0.0.0-20201221023403-116224f358cd
+	knative.dev/caching v0.0.0-20210107021736-1ee47505018d
 	knative.dev/hack v0.0.0-20201214230143-4ed1ecb8db24
-	knative.dev/networking v0.0.0-20201223042504-b9e08949dfbc
-	knative.dev/pkg v0.0.0-20201224024804-27db5ac24cfb
+	knative.dev/networking v0.0.0-20210107024535-ecb89ced52d9
+	knative.dev/pkg v0.0.0-20210107022335-51c72e24c179
 	sigs.k8s.io/yaml v1.2.0
 )
diff --git a/go.sum b/go.sum
index a25abfa2a..4a7e8aaec 100644
--- a/go.sum
+++ b/go.sum
@@ -1223,15 +1223,16 @@ k8s.io/legacy-cloud-providers v0.18.8/go.mod h1:tgp4xYf6lvjrWnjQwTOPvWQE9IVqSBGP
 k8s.io/utils v0.0.0-20200324210504-a9aa75ae1b89/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew=
 k8s.io/utils v0.0.0-20200603063816-c1c6865ac451 h1:v8ud2Up6QK1lNOKFgiIVrZdMg7MpmSnvtrOieolJKoE=
 k8s.io/utils v0.0.0-20200603063816-c1c6865ac451/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
-knative.dev/caching v0.0.0-20201221023403-116224f358cd h1:73rkMpAj6VVCdIKW8yKQKg2hj99n3Thzdipv60CrPM4=
-knative.dev/caching v0.0.0-20201221023403-116224f358cd/go.mod h1:upxMcX1I08HDdYA1nusUFzkgwV88C0hKbgGWYnzsgmc=
+knative.dev/caching v0.0.0-20210107021736-1ee47505018d h1:C5JgxpCO4Dv+pqUHxIS+e+OVOf4QLGjcQUTbe9+SNB8=
+knative.dev/caching v0.0.0-20210107021736-1ee47505018d/go.mod h1:N3jOlbf/CWZsEcfEpthv5b+LB9e+TqiDTVLH/Ti+vWE=
 knative.dev/hack v0.0.0-20201214230143-4ed1ecb8db24 h1:kIztWfvnIFV8Lhlea02K3YO2mIzcDyQNzrBLn0Oq9sA=
 knative.dev/hack v0.0.0-20201214230143-4ed1ecb8db24/go.mod h1:PHt8x8yX5Z9pPquBEfIj0X66f8iWkWfR0S/sarACJrI=
-knative.dev/networking v0.0.0-20201223042504-b9e08949dfbc h1:I9oJW2LwMaZ/e2MwClWLTVxSVF9457o4qSJTzGK6CP8=
-knative.dev/networking v0.0.0-20201223042504-b9e08949dfbc/go.mod h1:MTHF/89uQ3XDklu7Uny5TuobSC9UkHBWmMvFWgnZ5Rk=
-knative.dev/pkg v0.0.0-20201218185703-e41409af6cff/go.mod h1:hckgW978SdzPA2H5EDvRPY8xsnPuDZLJLbPf8Jte7Q0=
+knative.dev/networking v0.0.0-20210107024535-ecb89ced52d9 h1:7SXik2ulHr7URICeDYHPVdnyuT72RW9GouJ97XRkWbo=
+knative.dev/networking v0.0.0-20210107024535-ecb89ced52d9/go.mod h1:N123KICErXy+bPo1oBszM6TVYGG0Za2wMmnEqX4MlFg=
 knative.dev/pkg v0.0.0-20201224024804-27db5ac24cfb h1:XVcmpSvfDMZ5Z+1pebSm5Msq5sQey/V4NHF2+dFNU1o=
 knative.dev/pkg v0.0.0-20201224024804-27db5ac24cfb/go.mod h1:hckgW978SdzPA2H5EDvRPY8xsnPuDZLJLbPf8Jte7Q0=
+knative.dev/pkg v0.0.0-20210107022335-51c72e24c179 h1:lkrgrv69iUk2qhOG9symy15kJUaJZmMybSloi7C3gIw=
+knative.dev/pkg v0.0.0-20210107022335-51c72e24c179/go.mod h1:hckgW978SdzPA2H5EDvRPY8xsnPuDZLJLbPf8Jte7Q0=
 modernc.org/cc v1.0.0/go.mod h1:1Sk4//wdnYJiUIxnW8ddKpaOJCF37yAdqYnkxUpaYxw=
 modernc.org/golex v1.0.0/go.mod h1:b/QX9oBD/LhixY6NDh+IdGv17hgB+51fET1i2kPSmvk=
 modernc.org/mathutil v1.0.0/go.mod h1:wU0vUrJsVWBZ4P6e7xtFJEhFSNsfRLJ8H458uRjg03k=
diff --git a/pkg/deployment/config.go b/pkg/deployment/config.go
index 8bf3eff61..dcce6d7d2 100644
--- a/pkg/deployment/config.go
+++ b/pkg/deployment/config.go
@@ -36,8 +36,8 @@ const (
 	QueueSidecarImageKey = "queueSidecarImage"
 
 	// ProgressDeadlineDefault is the default value for the config's
-	// ProgressDeadlineSeconds. This does not match the K8s default value of 600s.
-	ProgressDeadlineDefault = 120 * time.Second
+	// ProgressDeadlineSeconds. This matches the K8s default value of 600s.
+	ProgressDeadlineDefault = 600 * time.Second
 
 	// ProgressDeadlineKey is the key to configure deployment progress deadline.
 	ProgressDeadlineKey = "progressDeadline"
diff --git a/pkg/reconciler/route/traffic/rollout.go b/pkg/reconciler/route/traffic/rollout.go
index 8336ab43f..a7fa4d924 100644
--- a/pkg/reconciler/route/traffic/rollout.go
+++ b/pkg/reconciler/route/traffic/rollout.go
@@ -37,7 +37,7 @@ import (
 // same configuration if there is a tag configured traffic target.
 type Rollout struct {
 	// Configurations are sorted by tag first and within same tag, by configuration name.
-	Configurations []ConfigurationRollout `json:"configurations,omitempty"`
+	Configurations []*ConfigurationRollout `json:"configurations,omitempty"`
 }
 
 // ConfigurationRollout describes the rollout state for a given config+tag pair.
@@ -105,7 +105,7 @@ func (cur *Rollout) RolloutsByTag(t string) []*ConfigurationRollout {
 	// Now append all configs rollouts with given tag.
 	// If tag != "", then there'll be only one such entry.
 	for ; st < len(cur.Configurations) && cur.Configurations[st].Tag == t; st++ {
-		ret = append(ret, &cur.Configurations[st])
+		ret = append(ret, cur.Configurations[st])
 	}
 	return ret
 }
@@ -155,7 +155,7 @@ func (cur *Rollout) Validate() bool {
 func (cur *Rollout) ObserveReady(ctx context.Context, nowTS int64, durationSecs float64) {
 	logger := logging.FromContext(ctx)
 	for i := range cur.Configurations {
-		c := &cur.Configurations[i]
+		c := cur.Configurations[i]
 		if c.StepParams.StepDuration == 0 && c.StepParams.StartTime > 0 {
 			// In really ceil(nowTS-params.StartTime) should always give 1s, but
 			// given possible time drift, we'll ensure that at least 1s is returned.
@@ -188,13 +188,13 @@ func (cur *Rollout) Step(ctx context.Context, prev *Rollout, nowTS int64) (*Roll
 	// Map the configs by tag.
 	currConfigs, prevConfigs := map[string][]*ConfigurationRollout{}, map[string][]*ConfigurationRollout{}
 	for i, cfg := range cur.Configurations {
-		currConfigs[cfg.Tag] = append(currConfigs[cfg.Tag], &cur.Configurations[i])
+		currConfigs[cfg.Tag] = append(currConfigs[cfg.Tag], cur.Configurations[i])
 	}
 	for i, cfg := range prev.Configurations {
-		prevConfigs[cfg.Tag] = append(prevConfigs[cfg.Tag], &prev.Configurations[i])
+		prevConfigs[cfg.Tag] = append(prevConfigs[cfg.Tag], prev.Configurations[i])
 	}
 
-	var ret []ConfigurationRollout
+	var ret []*ConfigurationRollout
 	returnTS := int64(math.MaxInt64)
 	for t, ccfgs := range currConfigs {
 		pcfgs, ok := prevConfigs[t]
@@ -204,7 +204,7 @@ func (cur *Rollout) Step(ctx context.Context, prev *Rollout, nowTS int64) (*Roll
 		// So just append to the return list.
 		// TODO(vagababov): perhaps just ignore and remove from the return?
 		if !ok {
-			ret = append(ret, *ccfgs[0])
+			ret = append(ret, ccfgs[0])
 			continue
 		}
 		// This is basically an intersect algorithm,
@@ -214,7 +214,7 @@ func (cur *Rollout) Step(ctx context.Context, prev *Rollout, nowTS int64) (*Roll
 			case j >= len(pcfgs):
 				// Those are the new configs that were added during this reconciliation.
 				// So we just copy them to the result.
-				ret = append(ret, *ccfgs[i])
+				ret = append(ret, ccfgs[i])
 				i++
 			case ccfgs[i].ConfigurationName == pcfgs[j].ConfigurationName:
 				// Config might have >0% traffic assigned, unless it is a tag only route (i.e.
@@ -222,7 +222,7 @@ func (cur *Rollout) Step(ctx context.Context, prev *Rollout, nowTS int64) (*Roll
 				// altogether.
 				switch p := ccfgs[i].Percent; {
 				case p > 1:
-					sc := *stepConfig(ctx, ccfgs[i], pcfgs[j], nowTS)
+					sc := stepConfig(ctx, ccfgs[i], pcfgs[j], nowTS)
 					ret = append(ret, sc)
 					// Keep the minimum value if it is not 0.
 					if nst := sc.StepParams.NextStepTime; nst > 0 && nst < returnTS {
@@ -231,7 +231,7 @@ func (cur *Rollout) Step(ctx context.Context, prev *Rollout, nowTS int64) (*Roll
 				case p == 1:
 					// Skip all the work if it's a common A/B scenario where the test config
 					// receives just 1% of traffic.
-					ret = append(ret, *ccfgs[i])
+					ret = append(ret, ccfgs[i])
 					// default p == 0 => just ignore for rollout.
 				}
 				i++
@@ -240,7 +240,7 @@ func (cur *Rollout) Step(ctx context.Context, prev *Rollout, nowTS int64) (*Roll
 				// A new config, has been added. No action for rollout though.
 				// Keep it for future rollout actions.
 				if ccfgs[i].Percent != 0 {
-					ret = append(ret, *ccfgs[i])
+					ret = append(ret, ccfgs[i])
 				}
 				i++
 			default: // cur > prev.
diff --git a/pkg/reconciler/route/traffic/traffic.go b/pkg/reconciler/route/traffic/traffic.go
index 1af1c348e..463ff4bf0 100644
--- a/pkg/reconciler/route/traffic/traffic.go
+++ b/pkg/reconciler/route/traffic/traffic.go
@@ -251,7 +251,7 @@ func buildRolloutForTag(r *Rollout, tag string, rts RevisionTargets) {
 			continue
 		}
 		// The targets with the same revision are already joined together.
-		r.Configurations = append(r.Configurations, ConfigurationRollout{
+		r.Configurations = append(r.Configurations, &ConfigurationRollout{
 			ConfigurationName: rt.ConfigurationName,
 			Tag:               tag,
 			Percent:           int(*rt.Percent),
diff --git a/vendor/knative.dev/networking/pkg/apis/networking/v1alpha1/domainclaim_types.go b/vendor/knative.dev/networking/pkg/apis/networking/v1alpha1/domainclaim_types.go
index 5248b51fb..df19f31d7 100644
--- a/vendor/knative.dev/networking/pkg/apis/networking/v1alpha1/domainclaim_types.go
+++ b/vendor/knative.dev/networking/pkg/apis/networking/v1alpha1/domainclaim_types.go
@@ -32,6 +32,11 @@ type ClusterDomainClaim struct {
 	// More info: https://github.com/kubernetes/community/blob/master/contributors/devel/sig-architecture/api-conventions.md#metadata
 	// +optional
 	metav1.ObjectMeta `json:"metadata,omitempty"`
+
+	// Spec is the desired state of the ClusterDomainClaim.
+	// More info: https://github.com/kubernetes/community/blob/master/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
+	// +optional
+	Spec ClusterDomainClaimSpec `json:"spec,omitempty"`
 }
 
 var (
@@ -52,3 +57,12 @@ type ClusterDomainClaimList struct {
 	// Items is the list of ClusterDomainClaim objects.
 	Items []ClusterDomainClaim `json:"items"`
 }
+
+// ClusterDomainClaimSpec is the desired state of the ClusterDomainClaim.
+// Its only field is `namespace`, which controls which namespace currently owns
+// the ability to create a DomainMapping with the ClusterDomainClaim's name.
+type ClusterDomainClaimSpec struct {
+	// Namespace is the namespace which is allowed to create a DomainMapping
+	// using this ClusterDomainClaim's name.
+	Namespace string `json:"namespace"`
+}
diff --git a/vendor/knative.dev/networking/pkg/apis/networking/v1alpha1/zz_generated.deepcopy.go b/vendor/knative.dev/networking/pkg/apis/networking/v1alpha1/zz_generated.deepcopy.go
index abecc7d77..312909684 100644
--- a/vendor/knative.dev/networking/pkg/apis/networking/v1alpha1/zz_generated.deepcopy.go
+++ b/vendor/knative.dev/networking/pkg/apis/networking/v1alpha1/zz_generated.deepcopy.go
@@ -141,6 +141,7 @@ func (in *ClusterDomainClaim) DeepCopyInto(out *ClusterDomainClaim) {
 	*out = *in
 	out.TypeMeta = in.TypeMeta
 	in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
+	out.Spec = in.Spec
 	return
 }
 
@@ -195,6 +196,22 @@ func (in *ClusterDomainClaimList) DeepCopyObject() runtime.Object {
 	return nil
 }
 
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *ClusterDomainClaimSpec) DeepCopyInto(out *ClusterDomainClaimSpec) {
+	*out = *in
+	return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterDomainClaimSpec.
+func (in *ClusterDomainClaimSpec) DeepCopy() *ClusterDomainClaimSpec {
+	if in == nil {
+		return nil
+	}
+	out := new(ClusterDomainClaimSpec)
+	in.DeepCopyInto(out)
+	return out
+}
+
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 func (in *Domain) DeepCopyInto(out *Domain) {
 	*out = *in
diff --git a/vendor/knative.dev/pkg/version/version.go b/vendor/knative.dev/pkg/version/version.go
index cac1399a4..34504debf 100644
--- a/vendor/knative.dev/pkg/version/version.go
+++ b/vendor/knative.dev/pkg/version/version.go
@@ -30,6 +30,9 @@ const (
 	// the Kubernetes minimum version required by Knative.
 	KubernetesMinVersionKey = "KUBERNETES_MIN_VERSION"
 
+	// NOTE: If you are changing this line, please also update the minimum kubernetes
+	// version listed here:
+	// https://github.com/knative/docs/blob/master/docs/install/any-kubernetes-cluster.md#before-you-begin
 	defaultMinimumVersion = "v1.17.0"
 )
 
diff --git a/vendor/modules.txt b/vendor/modules.txt
index 5ac625083..20fb2f499 100644
--- a/vendor/modules.txt
+++ b/vendor/modules.txt
@@ -963,7 +963,7 @@ k8s.io/utils/buffer
 k8s.io/utils/integer
 k8s.io/utils/pointer
 k8s.io/utils/trace
-# knative.dev/caching v0.0.0-20201221023403-116224f358cd
+# knative.dev/caching v0.0.0-20210107021736-1ee47505018d
 ## explicit
 knative.dev/caching/config
 knative.dev/caching/pkg/apis/caching
@@ -988,7 +988,7 @@ knative.dev/caching/pkg/client/listers/caching/v1alpha1
 ## explicit
 knative.dev/hack
 knative.dev/hack/shell
-# knative.dev/networking v0.0.0-20201223042504-b9e08949dfbc
+# knative.dev/networking v0.0.0-20210107024535-ecb89ced52d9
 ## explicit
 knative.dev/networking/config
 knative.dev/networking/pkg
@@ -1022,7 +1022,7 @@ knative.dev/networking/test/conformance/ingress
 knative.dev/networking/test/defaultsystem
 knative.dev/networking/test/test_images/grpc-ping/proto
 knative.dev/networking/test/types
-# knative.dev/pkg v0.0.0-20201224024804-27db5ac24cfb
+# knative.dev/pkg v0.0.0-20210107022335-51c72e24c179
 ## explicit
 knative.dev/pkg/apiextensions/storageversion
 knative.dev/pkg/apiextensions/storageversion/cmd/migrate


Test patch:
diff --git a/.github/workflows/kind-e2e.yaml b/.github/workflows/kind-e2e.yaml
index 5a4ff8fce..637e8f6f9 100644
--- a/.github/workflows/kind-e2e.yaml
+++ b/.github/workflows/kind-e2e.yaml
@@ -190,6 +190,12 @@ jobs:
           --type merge \
           --patch '{"data":{"ingress.class":"${{ matrix.kingress }}.ingress.networking.knative.dev"}}'
 
+        # Reduce the progress deadline so failure tests don't take forever.
+        kubectl patch configmap/config-deployment \
+          --namespace knative-serving \
+          --type merge \
+          --patch '{"data":{"progressDeadline":"120s"}}'
+
         # Be KinD to these tests.
         kubectl scale -nknative-serving deployment/chaosduck --replicas=0
 
diff --git a/pkg/reconciler/route/reconcile_resources_test.go b/pkg/reconciler/route/reconcile_resources_test.go
index 4c00c6ac8..48025e261 100644
--- a/pkg/reconciler/route/reconcile_resources_test.go
+++ b/pkg/reconciler/route/reconcile_resources_test.go
@@ -294,7 +294,7 @@ func TestReconcileIngressRolloutDeserializeFail(t *testing.T) {
 		name: "invalid",
 		val: func() string {
 			ro := &traffic.Rollout{
-				Configurations: []traffic.ConfigurationRollout{{
+				Configurations: []*traffic.ConfigurationRollout{{
 					ConfigurationName: "configuration",
 					Percent:           202, // <- this is not right!
 				}},
diff --git a/pkg/reconciler/route/resources/ingress_test.go b/pkg/reconciler/route/resources/ingress_test.go
index 7fc2b840a..110d5e0c7 100644
--- a/pkg/reconciler/route/resources/ingress_test.go
+++ b/pkg/reconciler/route/resources/ingress_test.go
@@ -157,7 +157,7 @@ func TestMakeIngressWithTaggedRollout(t *testing.T) {
 func TestMakeIngressWithActualRollout(t *testing.T) {
 	const ingressClass = "ng-ingress"
 	ro := &traffic.Rollout{
-		Configurations: []traffic.ConfigurationRollout{{
+		Configurations: []*traffic.ConfigurationRollout{{
 			ConfigurationName: "rune",
 			Percent:           1,
 			Revisions: []traffic.RevisionRollout{{
diff --git a/pkg/reconciler/route/table_test.go b/pkg/reconciler/route/table_test.go
index edd9063f2..becf69d37 100644
--- a/pkg/reconciler/route/table_test.go
+++ b/pkg/reconciler/route/table_test.go
@@ -434,7 +434,7 @@ func TestReconcile(t *testing.T) {
 					},
 				},
 				&traffic.Rollout{
-					Configurations: []traffic.ConfigurationRollout{{
+					Configurations: []*traffic.ConfigurationRollout{{
 						ConfigurationName: "config",
 						Revisions: []traffic.RevisionRollout{{
 							RevisionName: "config-00000",
@@ -895,7 +895,7 @@ func TestReconcile(t *testing.T) {
 					},
 				},
 				&traffic.Rollout{
-					Configurations: []traffic.ConfigurationRollout{{
+					Configurations: []*traffic.ConfigurationRollout{{
 						ConfigurationName: "config",
 						Revisions: []traffic.RevisionRollout{{
 							RevisionName: "config-00001",
@@ -2886,7 +2886,7 @@ func simpleRollout(cfg string, revs []traffic.RevisionRollout,
 	now time.Time, ros ...rolloutOption) IngressOption {
 	return func(i *netv1alpha1.Ingress) {
 		r := &traffic.Rollout{
-			Configurations: []traffic.ConfigurationRollout{{
+			Configurations: []*traffic.ConfigurationRollout{{
 				ConfigurationName: cfg,
 				StepParams: traffic.RolloutParams{
 					StartTime: now.UnixNano(),
diff --git a/pkg/reconciler/route/traffic/rollout_test.go b/pkg/reconciler/route/traffic/rollout_test.go
index ad6bba478..948099806 100644
--- a/pkg/reconciler/route/traffic/rollout_test.go
+++ b/pkg/reconciler/route/traffic/rollout_test.go
@@ -46,7 +46,7 @@ func TestStep(t *testing.T) {
 	}, {
 		name: "prev is empty",
 		cur: &Rollout{
-			Configurations: []ConfigurationRollout{{
+			Configurations: []*ConfigurationRollout{{
 				ConfigurationName: "mick",
 				Percent:           100,
 				Revisions: []RevisionRollout{{
@@ -56,13 +56,13 @@ func TestStep(t *testing.T) {
 			}},
 		},
 		prev: &Rollout{
-			Configurations: []ConfigurationRollout{{
+			Configurations: []*ConfigurationRollout{{
 				ConfigurationName: "mick",
 				Percent:           100,
 			}},
 		},
 		want: &Rollout{
-			Configurations: []ConfigurationRollout{{
+			Configurations: []*ConfigurationRollout{{
 				ConfigurationName: "mick",
 				Percent:           100,
 				Revisions: []RevisionRollout{{
@@ -74,7 +74,7 @@ func TestStep(t *testing.T) {
 	}, {
 		name: "simplest, same",
 		cur: &Rollout{
-			Configurations: []ConfigurationRollout{{
+			Configurations: []*ConfigurationRollout{{
 				ConfigurationName: "mick",
 				Percent:           100,
 				Revisions: []RevisionRollout{{
@@ -90,7 +90,7 @@ func TestStep(t *testing.T) {
 			}},
 		},
 		prev: &Rollout{
-			Configurations: []ConfigurationRollout{{
+			Configurations: []*ConfigurationRollout{{
 				ConfigurationName: "mick",
 				Percent:           100,
 				Revisions: []RevisionRollout{{
@@ -100,7 +100,7 @@ func TestStep(t *testing.T) {
 			}},
 		},
 		want: &Rollout{
-			Configurations: []ConfigurationRollout{{
+			Configurations: []*ConfigurationRollout{{
 				ConfigurationName: "mick",
 				Percent:           100,
 				Revisions: []RevisionRollout{{
@@ -112,7 +112,7 @@ func TestStep(t *testing.T) {
 	}, {
 		name: "simplest, step",
 		cur: &Rollout{
-			Configurations: []ConfigurationRollout{{
+			Configurations: []*ConfigurationRollout{{
 				ConfigurationName: "mick",
 				Percent:           100,
 				Revisions: []RevisionRollout{{
@@ -122,7 +122,7 @@ func TestStep(t *testing.T) {
 			}},
 		},
 		prev: &Rollout{
-			Configurations: []ConfigurationRollout{{
+			Configurations: []*ConfigurationRollout{{
 				ConfigurationName: "mick",
 				Percent:           100,
 				StepParams: RolloutParams{
@@ -141,7 +141,7 @@ func TestStep(t *testing.T) {
 			}},
 		},
 		want: &Rollout{
-			Configurations: []ConfigurationRollout{{
+			Configurations: []*ConfigurationRollout{{
 				ConfigurationName: "mick",
 				Percent:           100,
 				Revisions: []RevisionRollout{{
@@ -163,7 +163,7 @@ func TestStep(t *testing.T) {
 	}, {
 		name: "multiple configs step",
 		cur: &Rollout{
-			Configurations: []ConfigurationRollout{{
+			Configurations: []*ConfigurationRollout{{
 				ConfigurationName: "mick",
 				Percent:           42,
 				Revisions: []RevisionRollout{{
@@ -181,7 +181,7 @@ func TestStep(t *testing.T) {
 			// 6% allocated to the revision direct, say.
 		},
 		prev: &Rollout{
-			Configurations: []ConfigurationRollout{{
+			Configurations: []*ConfigurationRollout{{
 				ConfigurationName: "mick",
 				Percent:           42,
 				StepParams: RolloutParams{
@@ -217,7 +217,7 @@ func TestStep(t *testing.T) {
 		},
 		want: &Rollout{
 			// Note: order will change, since we sort.
-			Configurations: []ConfigurationRollout{{
+			Configurations: []*ConfigurationRollout{{
 				ConfigurationName: "keith",
 				Percent:           52,
 				StepParams: RolloutParams{
@@ -255,7 +255,7 @@ func TestStep(t *testing.T) {
 	}, {
 		name: "multiple configs step and roll",
 		cur: &Rollout{
-			Configurations: []ConfigurationRollout{{
+			Configurations: []*ConfigurationRollout{{
 				ConfigurationName: "mick",
 				Percent:           42,
 				Revisions: []RevisionRollout{{
@@ -273,7 +273,7 @@ func TestStep(t *testing.T) {
 			// 6% allocated to the revision direct, say.
 		},
 		prev: &Rollout{
-			Configurations: []ConfigurationRollout{{
+			Configurations: []*ConfigurationRollout{{
 				ConfigurationName: "mick",
 				Percent:           42,
 				StepParams: RolloutParams{
@@ -309,7 +309,7 @@ func TestStep(t *testing.T) {
 		},
 		want: &Rollout{
 			// Note: order will change, since we sort.
-			Configurations: []ConfigurationRollout{{
+			Configurations: []*ConfigurationRollout{{
 				ConfigurationName: "keith",
 				Percent:           52,
 				StepParams: RolloutParams{
@@ -347,7 +347,7 @@ func TestStep(t *testing.T) {
 	}, {
 		name: "simplest, step, when stepsize=0",
 		cur: &Rollout{
-			Configurations: []ConfigurationRollout{{
+			Configurations: []*ConfigurationRollout{{
 				ConfigurationName: "mick",
 				Percent:           100,
 				Revisions: []RevisionRollout{{
@@ -363,7 +363,7 @@ func TestStep(t *testing.T) {
 			}},
 		},
 		prev: &Rollout{
-			Configurations: []ConfigurationRollout{{
+			Configurations: []*ConfigurationRollout{{
 				ConfigurationName: "mick",
 				Percent:           100,
 				StepParams: RolloutParams{
@@ -380,7 +380,7 @@ func TestStep(t *testing.T) {
 			}},
 		},
 		want: &Rollout{
-			Configurations: []ConfigurationRollout{{
+			Configurations: []*ConfigurationRollout{{
 				ConfigurationName: "mick",
 				Percent:           100,
 				Revisions: []RevisionRollout{{
@@ -398,7 +398,7 @@ func TestStep(t *testing.T) {
 	}, {
 		name: "when new revision becomes 0%",
 		cur: &Rollout{
-			Configurations: []ConfigurationRollout{{
+			Configurations: []*ConfigurationRollout{{
 				ConfigurationName: "charlie",
 				Percent:           0,
 				Revisions: []RevisionRollout{{
@@ -408,7 +408,7 @@ func TestStep(t *testing.T) {
 			}},
 		},
 		prev: &Rollout{
-			Configurations: []ConfigurationRollout{{
+			Configurations: []*ConfigurationRollout{{
 				ConfigurationName: "charlie",
 				Percent:           100,
 				Revisions: []RevisionRollout{{
@@ -421,7 +421,7 @@ func TestStep(t *testing.T) {
 	}, {
 		name: "when new config is added but it's 0%",
 		cur: &Rollout{
-			Configurations: []ConfigurationRollout{{
+			Configurations: []*ConfigurationRollout{{
 				ConfigurationName: "charlie",
 				Percent:           0,
 				Revisions: []RevisionRollout{{
@@ -438,7 +438,7 @@ func TestStep(t *testing.T) {
 			}},
 		},
 		prev: &Rollout{
-			Configurations: []ConfigurationRollout{{
+			Configurations: []*ConfigurationRollout{{
 				ConfigurationName: "mick",
 				Percent:           100,
 				Revisions: []RevisionRollout{{
@@ -448,7 +448,7 @@ func TestStep(t *testing.T) {
 			}},
 		},
 		want: &Rollout{
-			Configurations: []ConfigurationRollout{{
+			Configurations: []*ConfigurationRollout{{
 				ConfigurationName: "mick",
 				Percent:           100,
 				Revisions: []RevisionRollout{{
@@ -460,7 +460,7 @@ func TestStep(t *testing.T) {
 	}, {
 		name: "simplest, roll",
 		cur: &Rollout{
-			Configurations: []ConfigurationRollout{{
+			Configurations: []*ConfigurationRollout{{
 				ConfigurationName: "mick",
 				Percent:           100,
 				Revisions: []RevisionRollout{{
@@ -470,7 +470,7 @@ func TestStep(t *testing.T) {
 			}},
 		},
 		prev: &Rollout{
-			Configurations: []ConfigurationRollout{{
+			Configurations: []*ConfigurationRollout{{
 				ConfigurationName: "mick",
 				Percent:           100,
 				Revisions: []RevisionRollout{{
@@ -486,7 +486,7 @@ func TestStep(t *testing.T) {
 			}},
 		},
 		want: &Rollout{
-			Configurations: []ConfigurationRollout{{
+			Configurations: []*ConfigurationRollout{{
 				ConfigurationName: "mick",
 				Percent:           100,
 				StepParams: RolloutParams{
@@ -504,7 +504,7 @@ func TestStep(t *testing.T) {
 	}, {
 		name: "roll with percentage change down",
 		cur: &Rollout{
-			Configurations: []ConfigurationRollout{{
+			Configurations: []*ConfigurationRollout{{
 				ConfigurationName: "mick",
 				Percent:           33,
 				Revisions: []RevisionRollout{{
@@ -514,7 +514,7 @@ func TestStep(t *testing.T) {
 			}},
 		},
 		prev: &Rollout{
-			Configurations: []ConfigurationRollout{{
+			Configurations: []*ConfigurationRollout{{
 				ConfigurationName: "mick",
 				Percent:           42,
 				Revisions: []RevisionRollout{{
@@ -527,7 +527,7 @@ func TestStep(t *testing.T) {
 			}},
 		},
 		want: &Rollout{
-			Configurations: []ConfigurationRollout{{
+			Configurations: []*ConfigurationRollout{{
 				ConfigurationName: "mick",
 				Percent:           33,
 				StepParams: RolloutParams{
@@ -548,7 +548,7 @@ func TestStep(t *testing.T) {
 	}, {
 		name: "roll with percentage change up",
 		cur: &Rollout{
-			Configurations: []ConfigurationRollout{{
+			Configurations: []*ConfigurationRollout{{
 				ConfigurationName: "mick",
 				Percent:           75,
 				Revisions: []RevisionRollout{{
@@ -558,7 +558,7 @@ func TestStep(t *testing.T) {
 			}},
 		},
 		prev: &Rollout{
-			Configurations: []ConfigurationRollout{{
+			Configurations: []*ConfigurationRollout{{
 				ConfigurationName: "mick",
 				Percent:           25,
 				Revisions: []RevisionRollout{{
@@ -571,7 +571,7 @@ func TestStep(t *testing.T) {
 			}},
 		},
 		want: &Rollout{
-			Configurations: []ConfigurationRollout{{
+			Configurations: []*ConfigurationRollout{{
 				ConfigurationName: "mick",
 				StepParams: RolloutParams{
 					StartTime: now,
@@ -592,7 +592,7 @@ func TestStep(t *testing.T) {
 	}, {
 		name: "roll, where sum < 100% (one route targets a revision, e.g.)",
 		cur: &Rollout{
-			Configurations: []ConfigurationRollout{{
+			Configurations: []*ConfigurationRollout{{
 				ConfigurationName: "brian",
 				Percent:           70,
 				Revisions: []RevisionRollout{{
@@ -602,7 +602,7 @@ func TestStep(t *testing.T) {
 			}},
 		},
 		prev: &Rollout{
-			Configurations: []ConfigurationRollout{{
+			Configurations: []*ConfigurationRollout{{
 				ConfigurationName: "brian",
 				Percent:           70,
 				Revisions: []RevisionRollout{{
@@ -612,7 +612,7 @@ func TestStep(t *testing.T) {
 			}},
 		},
 		want: &Rollout{
-			Configurations: []ConfigurationRollout{{
+			Configurations: []*ConfigurationRollout{{
 				ConfigurationName: "brian",
 				Percent:           70,
 				StepParams: RolloutParams{
@@ -630,7 +630,7 @@ func TestStep(t *testing.T) {
 	}, {
 		name: "roll with two existing revisions, no deletes",
 		cur: &Rollout{
-			Configurations: []ConfigurationRollout{{
+			Configurations: []*ConfigurationRollout{{
 				ConfigurationName: "mick",
 				Percent:           100,
 				Revisions: []RevisionRollout{{
@@ -640,7 +640,7 @@ func TestStep(t *testing.T) {
 			}},
 		},
 		prev: &Rollout{
-			Configurations: []ConfigurationRollout{{
+			Configurations: []*ConfigurationRollout{{
 				ConfigurationName: "mick",
 				Percent:           100,
 				StepParams: RolloutParams{
@@ -656,7 +656,7 @@ func TestStep(t *testing.T) {
 			}},
 		},
 		want: &Rollout{
-			Configurations: []ConfigurationRollout{{
+			Configurations: []*ConfigurationRollout{{
 				ConfigurationName: "mick",
 				Percent:           100,
 				StepParams: RolloutParams{
@@ -677,7 +677,7 @@ func TestStep(t *testing.T) {
 	}, {
 		name: "roll with delete (two fast successive rolls)",
 		cur: &Rollout{
-			Configurations: []ConfigurationRollout{{
+			Configurations: []*ConfigurationRollout{{
 				ConfigurationName: "mick",
 				Percent:           100,
 				Revisions: []RevisionRollout{{
@@ -687,7 +687,7 @@ func TestStep(t *testing.T) {
 			}},
 		},
 		prev: &Rollout{
-			Configurations: []ConfigurationRollout{{
+			Configurations: []*ConfigurationRollout{{
 				ConfigurationName: "mick",
 				Percent:           100,
 				StepParams: RolloutParams{
@@ -703,7 +703,7 @@ func TestStep(t *testing.T) {
 			}},
 		},
 		want: &Rollout{
-			Configurations: []ConfigurationRollout{{
+			Configurations: []*ConfigurationRollout{{
 				ConfigurationName: "mick",
 				StepParams: RolloutParams{
 					StartTime: now,
@@ -721,7 +721,7 @@ func TestStep(t *testing.T) {
 	}, {
 		name: "roll with delete (minimal config target)",
 		cur: &Rollout{
-			Configurations: []ConfigurationRollout{{
+			Configurations: []*ConfigurationRollout{{
 				ConfigurationName: "mick",
 				Percent:           1,
 				Revisions: []RevisionRollout{{
@@ -731,7 +731,7 @@ func TestStep(t *testing.T) {
 			}},
 		},
 		prev: &Rollout{
-			Configurations: []ConfigurationRollout{{
+			Configurations: []*ConfigurationRollout{{
 				ConfigurationName: "mick",
 				Percent:           1,
 				Revisions: []RevisionRollout{{
@@ -741,7 +741,7 @@ func TestStep(t *testing.T) {
 			}},
 		},
 		want: &Rollout{
-			Configurations: []ConfigurationRollout{{
+			Configurations: []*ConfigurationRollout{{
 				ConfigurationName: "mick",
 				Percent:           1,
 				Revisions: []RevisionRollout{{
@@ -753,7 +753,7 @@ func TestStep(t *testing.T) {
 	}, {
 		name: "new tag, no roll", // just attached a tag to an existing route.
 		cur: &Rollout{
-			Configurations: []ConfigurationRollout{{
+			Configurations: []*ConfigurationRollout{{
 				ConfigurationName: "mick",
 				Percent:           100,
 				Revisions: []RevisionRollout{{
@@ -771,7 +771,7 @@ func TestStep(t *testing.T) {
 			}},
 		},
 		prev: &Rollout{
-			Configurations: []ConfigurationRollout{{
+			Configurations: []*ConfigurationRollout{{
 				ConfigurationName: "mick",
 				Percent:           100,
 				Revisions: []RevisionRollout{{
@@ -781,7 +781,7 @@ func TestStep(t *testing.T) {
 			}},
 		},
 		want: &Rollout{
-			Configurations: []ConfigurationRollout{{
+			Configurations: []*ConfigurationRollout{{
 				ConfigurationName: "mick",
 				Percent:           100,
 				Revisions: []RevisionRollout{{
@@ -801,7 +801,7 @@ func TestStep(t *testing.T) {
 	}, {
 		name: "deleted config, no roll",
 		cur: &Rollout{
-			Configurations: []ConfigurationRollout{{
+			Configurations: []*ConfigurationRollout{{
 				ConfigurationName: "mick",
 				Percent:           100,
 				Revisions: []RevisionRollout{{
@@ -811,7 +811,7 @@ func TestStep(t *testing.T) {
 			}},
 		},
 		prev: &Rollout{
-			Configurations: []ConfigurationRollout{{
+			Configurations: []*ConfigurationRollout{{
 				ConfigurationName: "keith",
 				Percent:           50,
 				Revisions: []RevisionRollout{{
@@ -828,7 +828,7 @@ func TestStep(t *testing.T) {
 			}},
 		},
 		want: &Rollout{
-			Configurations: []ConfigurationRollout{{
+			Configurations: []*ConfigurationRollout{{
 				ConfigurationName: "mick",
 				Percent:           100,
 				Revisions: []RevisionRollout{{
@@ -840,7 +840,7 @@ func TestStep(t *testing.T) {
 	}, {
 		name: "a/b config, roll both",
 		cur: &Rollout{
-			Configurations: []ConfigurationRollout{{
+			Configurations: []*ConfigurationRollout{{
 				ConfigurationName: "keith",
 				Percent:           99,
 				Revisions: []RevisionRollout{{
@@ -857,7 +857,7 @@ func TestStep(t *testing.T) {
 			}},
 		},
 		prev: &Rollout{
-			Configurations: []ConfigurationRollout{{
+			Configurations: []*ConfigurationRollout{{
 				ConfigurationName: "keith",
 				Percent:           99,
 				Revisions: []RevisionRollout{{
@@ -874,7 +874,7 @@ func TestStep(t *testing.T) {
 			}},
 		},
 		want: &Rollout{
-			Configurations: []ConfigurationRollout{{
+			Configurations: []*ConfigurationRollout{{
 				ConfigurationName: "keith",
 				Percent:           99,
 				StepParams: RolloutParams{
@@ -899,7 +899,7 @@ func TestStep(t *testing.T) {
 	}, {
 		name: "new config, no roll, newer smaller",
 		cur: &Rollout{
-			Configurations: []ConfigurationRollout{{
+			Configurations: []*ConfigurationRollout{{
 				ConfigurationName: "keith",
 				Percent:           50,
 				Revisions: []RevisionRollout{{
@@ -916,7 +916,7 @@ func TestStep(t *testing.T) {
 			}},
 		},
 		prev: &Rollout{
-			Configurations: []ConfigurationRollout{{
+			Configurations: []*ConfigurationRollout{{
 				ConfigurationName: "mick",
 				Percent:           100,
 				Revisions: []RevisionRollout{{
@@ -926,7 +926,7 @@ func TestStep(t *testing.T) {
 			}},
 		},
 		want: &Rollout{
-			Configurations: []ConfigurationRollout{{
+			Configurations: []*ConfigurationRollout{{
 				ConfigurationName: "keith",
 				Percent:           50,
 				Revisions: []RevisionRollout{{
@@ -945,7 +945,7 @@ func TestStep(t *testing.T) {
 	}, {
 		name: "new config, no roll, newer larger",
 		cur: &Rollout{
-			Configurations: []ConfigurationRollout{{
+			Configurations: []*ConfigurationRollout{{
 				ConfigurationName: "keith",
 				Percent:           50,
 				Revisions: []RevisionRollout{{
@@ -962,7 +962,7 @@ func TestStep(t *testing.T) {
 			}},
 		},
 		prev: &Rollout{
-			Configurations: []ConfigurationRollout{{
+			Configurations: []*ConfigurationRollout{{
 				ConfigurationName: "keith",
 				Percent:           100,
 				Revisions: []RevisionRollout{{
@@ -972,7 +972,7 @@ func TestStep(t *testing.T) {
 			}},
 		},
 		want: &Rollout{
-			Configurations: []ConfigurationRollout{{
+			Configurations: []*ConfigurationRollout{{
 				ConfigurationName: "keith",
 				Percent:           50,
 				Revisions: []RevisionRollout{{
@@ -1017,7 +1017,7 @@ func TestObserveReady(t *testing.T) {
 		duration    = 120.
 	)
 	ro := Rollout{
-		Configurations: []ConfigurationRollout{{
+		Configurations: []*ConfigurationRollout{{
 			Percent:           100,
 			ConfigurationName: "has-step",
 			StepParams: RolloutParams{
@@ -1063,7 +1063,7 @@ func TestObserveReady(t *testing.T) {
 	}
 
 	want := Rollout{
-		Configurations: []ConfigurationRollout{{
+		Configurations: []*ConfigurationRollout{{
 			Percent:           100,
 			ConfigurationName: "has-step",
 			StepParams: RolloutParams{
@@ -1264,7 +1264,7 @@ func TestValidateFailures(t *testing.T) {
 	}{{
 		name: "config > 100%",
 		r: &Rollout{
-			Configurations: []ConfigurationRollout{{
+			Configurations: []*ConfigurationRollout{{
 				ConfigurationName: "keith",
 				Percent:           101,
 				Revisions: []RevisionRollout{{
@@ -1276,7 +1276,7 @@ func TestValidateFailures(t *testing.T) {
 	}, {
 		name: "rev more than config",
 		r: &Rollout{
-			Configurations: []ConfigurationRollout{{
+			Configurations: []*ConfigurationRollout{{
 				ConfigurationName: "keith",
 				Percent:           42,
 				Revisions: []RevisionRollout{{
@@ -1288,7 +1288,7 @@ func TestValidateFailures(t *testing.T) {
 	}, {
 		name: "revs more than config",
 		r: &Rollout{
-			Configurations: []ConfigurationRollout{{
+			Configurations: []*ConfigurationRollout{{
 				ConfigurationName: "keith",
 				Percent:           42,
 				Revisions: []RevisionRollout{{
@@ -1303,7 +1303,7 @@ func TestValidateFailures(t *testing.T) {
 	}, {
 		name: "2nd config > 100%",
 		r: &Rollout{
-			Configurations: []ConfigurationRollout{{
+			Configurations: []*ConfigurationRollout{{
 				ConfigurationName: "rob",
 				Percent:           10,
 				Revisions: []RevisionRollout{{
@@ -1334,7 +1334,7 @@ func TestValidateFailures(t *testing.T) {
 
 func TestConfigDone(t *testing.T) {
 	r := &Rollout{
-		Configurations: []ConfigurationRollout{{
+		Configurations: []*ConfigurationRollout{{
 			ConfigurationName: "nil",
 			Percent:           100,
 		}, {
@@ -1383,7 +1383,7 @@ func TestConfigDone(t *testing.T) {
 
 func TestJSONRoundtrip(t *testing.T) {
 	orig := &Rollout{
-		Configurations: []ConfigurationRollout{{
+		Configurations: []*ConfigurationRollout{{
 			ConfigurationName: "one",
 			Percent:           100,
 			Revisions: []RevisionRollout{{
@@ -1620,7 +1620,7 @@ func TestStepRevisions(t *testing.T) {
 
 func TestGetByTag(t *testing.T) {
 	r := &Rollout{
-		Configurations: []ConfigurationRollout{{
+		Configurations: []*ConfigurationRollout{{
 			ConfigurationName: "one",
 			Percent:           50,
 			Revisions: []RevisionRollout{{
@@ -1670,9 +1670,9 @@ func TestGetByTag(t *testing.T) {
 	}
 	sortRollout(r)
 
-	wantDef := []*ConfigurationRollout{&r.Configurations[0], &r.Configurations[1], &r.Configurations[2]}
-	wantGilberto := []*ConfigurationRollout{&r.Configurations[3]}
-	wantJobim := []*ConfigurationRollout{&r.Configurations[4]}
+	wantDef := []*ConfigurationRollout{r.Configurations[0], r.Configurations[1], r.Configurations[2]}
+	wantGilberto := []*ConfigurationRollout{r.Configurations[3]}
+	wantJobim := []*ConfigurationRollout{r.Configurations[4]}
 
 	if got, want := r.RolloutsByTag(""), wantDef; !cmp.Equal(got, want) {
 		t.Errorf(`RolloutsByTag("") mismatch: diff(-want,+got):\n%s`, cmp.Diff(want, got))
diff --git a/pkg/reconciler/route/traffic/traffic_test.go b/pkg/reconciler/route/traffic/traffic_test.go
index 2c9ef4371..f96fefdbe 100644
--- a/pkg/reconciler/route/traffic/traffic_test.go
+++ b/pkg/reconciler/route/traffic/traffic_test.go
@@ -179,7 +179,7 @@ func TestBuildTrafficConfigurationVanilla(t *testing.T) {
 	}
 	gotR := tc.BuildRollout()
 	wantR := &Rollout{
-		Configurations: []ConfigurationRollout{{
+		Configurations: []*ConfigurationRollout{{
 			ConfigurationName: goodConfig.Name,
 			Percent:           100,
 			Revisions: []RevisionRollout{{
@@ -279,7 +279,7 @@ func TestBuildTrafficConfigurationVanillaScaledToZero(t *testing.T) {
 	// Inactive shouldn't matter for rollout state.
 	gotR := tc.BuildRollout()
 	wantR := &Rollout{
-		Configurations: []ConfigurationRollout{{
+		Configurations: []*ConfigurationRollout{{
 			ConfigurationName: inactiveConfig.Name,
 			Percent:           100,
 			Revisions: []RevisionRollout{{
@@ -424,7 +424,7 @@ func TestBuildTrafficConfigurationTwoEntriesSameConfig(t *testing.T) {
 
 	gotR := tc.BuildRollout()
 	wantR := &Rollout{
-		Configurations: []ConfigurationRollout{{
+		Configurations: []*ConfigurationRollout{{
 			ConfigurationName: niceConfig.Name,
 			Percent:           100,
 			Revisions: []RevisionRollout{{
@@ -551,7 +551,7 @@ func TestBuildTrafficConfigThreeConfigs(t *testing.T) {
 	gotR := tc.BuildRollout()
 	wantR := &Rollout{
 		// Default tag configs are sorted as well.
-		Configurations: []ConfigurationRollout{{
+		Configurations: []*ConfigurationRollout{{
 			ConfigurationName: goodConfig.Name,
 			Percent:           35,
 			Revisions: []RevisionRollout{{
@@ -661,7 +661,7 @@ func TestBuildTrafficConfigurationTwoEntriesSameConfigDifferentTags(t *testing.T
 
 	gotR := tc.BuildRollout()
 	wantR := &Rollout{
-		Configurations: []ConfigurationRollout{{
+		Configurations: []*ConfigurationRollout{{
 			ConfigurationName: niceConfig.Name,
 			Percent:           100,
 			Revisions: []RevisionRollout{{
@@ -746,7 +746,7 @@ func TestBuildTrafficConfigurationCanary(t *testing.T) {
 	// Ensure just the 10% is going to be rolled out.
 	gotR := tc.BuildRollout()
 	wantR := &Rollout{
-		Configurations: []ConfigurationRollout{{
+		Configurations: []*ConfigurationRollout{{
 			ConfigurationName: goodConfig.Name,
 			Percent:           10,
 			Revisions: []RevisionRollout{{
@@ -1202,7 +1202,7 @@ func TestBuildTrafficConfigurationReadyNotReadyConfig(t *testing.T) {
 	}
 	gotR := tc.BuildRollout()
 	wantR := &Rollout{
-		Configurations: []ConfigurationRollout{{
+		Configurations: []*ConfigurationRollout{{
 			ConfigurationName: readyUnreadyConfig.Name,
 			Percent:           100,
 			Revisions: []RevisionRollout{{
@@ -1431,7 +1431,7 @@ func TestRoundTrippingWithRollout(t *testing.T) {
 		ConfigurationName: niceConfig.Name,
 	}))
 	ro := &Rollout{
-		Configurations: []ConfigurationRollout{{
+		Configurations: []*ConfigurationRollout{{
 			ConfigurationName: goodConfig.Name,
 			Revisions: []RevisionRollout{{
 				RevisionName: "older-rev",
@@ -1651,7 +1651,7 @@ func TestBuildTrafficConfigurationTag0Percent(t *testing.T) {
 
 	gotR := tc.BuildRollout()
 	wantR := &Rollout{
-		Configurations: []ConfigurationRollout{{
+		Configurations: []*ConfigurationRollout{{
 			ConfigurationName: niceConfig.Name,
 			Percent:           100,
 			Revisions: []RevisionRollout{{
diff --git a/test/e2e-common.sh b/test/e2e-common.sh
index 1e00afed0..6f71dea33 100644
--- a/test/e2e-common.sh
+++ b/test/e2e-common.sh
@@ -422,6 +422,10 @@ function test_setup() {
     kubectl label namespace serving-tests-alt istio-injection=enabled
   fi
 
+  # Setting deadline progress to a shorter value.
+  kubectl patch cm "config-deployment" -n "${SYSTEM_NAMESPACE}" \
+    -p '{"data":{"'progressDeadline'":"'120s'"}}'
+
   echo ">> Uploading test images..."
   ${REPO_ROOT_DIR}/test/upload-test-images.sh || return 1
 
@@ -530,6 +534,7 @@ function install_latest_release() {
   install_knative_serving latest-release \
       || fail_test "Knative latest release installation failed"
   test_logging_config_setup
+
   wait_until_pods_running ${SYSTEM_NAMESPACE}
   wait_until_batch_job_complete ${SYSTEM_NAMESPACE}
 }
@@ -540,6 +545,7 @@ function install_head_reuse_ingress() {
   # makes ongoing requests fail.
   REUSE_INGRESS=true install_knative_serving || fail_test "Knative head release installation failed"
   test_logging_config_setup
+
   wait_until_pods_running ${SYSTEM_NAMESPACE}
   wait_until_batch_job_complete ${SYSTEM_NAMESPACE}
 }
diff --git a/third_party/cert-manager-latest/net-certmanager.yaml b/third_party/cert-manager-latest/net-certmanager.yaml
index 538de3a37..d14222eb1 100644
--- a/third_party/cert-manager-latest/net-certmanager.yaml
+++ b/third_party/cert-manager-latest/net-certmanager.yaml
@@ -18,7 +18,7 @@ metadata:
   # These are the permissions needed by the `cert-manager` `Certificate` implementation.
   name: knative-serving-certmanager
   labels:
-    serving.knative.dev/release: "v20210106-d4e4184"
+    serving.knative.dev/release: "v20210107-af85fbf"
     serving.knative.dev/controller: "true"
     networking.knative.dev/certificate-provider: cert-manager
 rules:
@@ -49,7 +49,7 @@ kind: ValidatingWebhookConfiguration
 metadata:
   name: config.webhook.net-certmanager.networking.internal.knative.dev
   labels:
-    serving.knative.dev/release: "v20210106-d4e4184"
+    serving.knative.dev/release: "v20210107-af85fbf"
 webhooks:
   - admissionReviewVersions:
       - v1beta1
@@ -86,7 +86,7 @@ metadata:
   name: net-certmanager-webhook-certs
   namespace: knative-serving
   labels:
-    serving.knative.dev/release: "v20210106-d4e4184"
+    serving.knative.dev/release: "v20210107-af85fbf"
 
 ---
 # Copyright 2020 The Knative Authors
@@ -109,7 +109,7 @@ metadata:
   name: config-certmanager
   namespace: knative-serving
   labels:
-    serving.knative.dev/release: "v20210106-d4e4184"
+    serving.knative.dev/release: "v20210107-af85fbf"
     networking.knative.dev/certificate-provider: cert-manager
 data:
   _example: |
@@ -156,7 +156,7 @@ metadata:
   name: networking-certmanager
   namespace: knative-serving
   labels:
-    serving.knative.dev/release: "v20210106-d4e4184"
+    serving.knative.dev/release: "v20210107-af85fbf"
     networking.knative.dev/certificate-provider: cert-manager
 spec:
   selector:
@@ -168,14 +168,14 @@ spec:
         cluster-autoscaler.kubernetes.io/safe-to-evict: "true"
       labels:
         app: networking-certmanager
-        serving.knative.dev/release: "v20210106-d4e4184"
+        serving.knative.dev/release: "v20210107-af85fbf"
     spec:
       serviceAccountName: controller
       containers:
         - name: networking-certmanager
           # This is the Go import path for the binary that is containerized
           # and substituted here.
-          image: gcr.io/knative-nightly/knative.dev/net-certmanager/cmd/controller@sha256:4be2c29913f66781a47279ab835ae704e8c708307dab7a51cc1f521cfb48c59d
+          image: gcr.io/knative-nightly/knative.dev/net-certmanager/cmd/controller@sha256:3a92347b2baf1307e9573d235b645aab9682e1cbc8f89b1a6aef015017b17630
           resources:
             requests:
               cpu: 30m
@@ -213,7 +213,7 @@ kind: Service
 metadata:
   labels:
     app: networking-certmanager
-    serving.knative.dev/release: "v20210106-d4e4184"
+    serving.knative.dev/release: "v20210107-af85fbf"
     networking.knative.dev/certificate-provider: cert-manager
   name: networking-certmanager
   namespace: knative-serving
@@ -250,7 +250,7 @@ metadata:
   name: net-certmanager-webhook
   namespace: knative-serving
   labels:
-    serving.knative.dev/release: "v20210106-d4e4184"
+    serving.knative.dev/release: "v20210107-af85fbf"
 spec:
   selector:
     matchLabels:
@@ -263,14 +263,14 @@ spec:
       labels:
         app: net-certmanager-webhook
         role: net-certmanager-webhook
-        serving.knative.dev/release: "v20210106-d4e4184"
+        serving.knative.dev/release: "v20210107-af85fbf"
     spec:
       serviceAccountName: controller
       containers:
         - name: webhook
           # This is the Go import path for the binary that is containerized
           # and substituted here.
-          image: gcr.io/knative-nightly/knative.dev/net-certmanager/cmd/webhook@sha256:0dc1bbb47ef5d51b9d7516f9171f4699d455763c89c12fb86f75a985bddce474
+          image: gcr.io/knative-nightly/knative.dev/net-certmanager/cmd/webhook@sha256:c7d9630fe24b92844b8efd64edd5f6ad82c0e7a77689aecf43fc5e8c5fb2f6c0
           resources:
             requests:
               cpu: 20m
@@ -329,7 +329,7 @@ metadata:
   namespace: knative-serving
   labels:
     role: net-certmanager-webhook
-    serving.knative.dev/release: "v20210106-d4e4184"
+    serving.knative.dev/release: "v20210107-af85fbf"
 spec:
   ports:
     # Define metrics and profiling for them to be accessible within service meshes.
diff --git a/third_party/contour-latest/contour.yaml b/third_party/contour-latest/contour.yaml
index 79d9f13aa..534602127 100644
--- a/third_party/contour-latest/contour.yaml
+++ b/third_party/contour-latest/contour.yaml
@@ -1482,7 +1482,7 @@ spec:
     spec:
       containers:
         - name: contour
-          image: gcr.io/knative-nightly/github.com/projectcontour/contour/cmd/contour@sha256:1583a4c034cfb81a824660c377e23751f91358a9fcf63e0b5a6cf3d60fa96112
+          image: gcr.io/knative-nightly/github.com/projectcontour/contour/cmd/contour@sha256:3e88236949d49b0933318ef077741e9bf6f40ae84e8b79d7c229e1aaff53220f
           imagePullPolicy: Always
           command:
             - contour
@@ -1709,7 +1709,7 @@ spec:
             - --contour-key-file=/certs/tls.key
             - --config-path=/config/contour.yaml
           command: ["contour"]
-          image: gcr.io/knative-nightly/github.com/projectcontour/contour/cmd/contour@sha256:1583a4c034cfb81a824660c377e23751f91358a9fcf63e0b5a6cf3d60fa96112
+          image: gcr.io/knative-nightly/github.com/projectcontour/contour/cmd/contour@sha256:3e88236949d49b0933318ef077741e9bf6f40ae84e8b79d7c229e1aaff53220f
           imagePullPolicy: IfNotPresent
           name: contour
           ports:
@@ -1798,7 +1798,7 @@ spec:
           args:
             - envoy
             - shutdown-manager
-          image: gcr.io/knative-nightly/github.com/projectcontour/contour/cmd/contour@sha256:1583a4c034cfb81a824660c377e23751f91358a9fcf63e0b5a6cf3d60fa96112
+          image: gcr.io/knative-nightly/github.com/projectcontour/contour/cmd/contour@sha256:3e88236949d49b0933318ef077741e9bf6f40ae84e8b79d7c229e1aaff53220f
           imagePullPolicy: IfNotPresent
           lifecycle:
             preStop:
@@ -1875,7 +1875,7 @@ spec:
             - --envoy-key-file=/certs/tls.key
           command:
             - contour
-          image: gcr.io/knative-nightly/github.com/projectcontour/contour/cmd/contour@sha256:1583a4c034cfb81a824660c377e23751f91358a9fcf63e0b5a6cf3d60fa96112
+          image: gcr.io/knative-nightly/github.com/projectcontour/contour/cmd/contour@sha256:3e88236949d49b0933318ef077741e9bf6f40ae84e8b79d7c229e1aaff53220f
           imagePullPolicy: IfNotPresent
           name: envoy-initconfig
           volumeMounts:
@@ -2097,7 +2097,7 @@ spec:
     spec:
       containers:
         - name: contour
-          image: gcr.io/knative-nightly/github.com/projectcontour/contour/cmd/contour@sha256:1583a4c034cfb81a824660c377e23751f91358a9fcf63e0b5a6cf3d60fa96112
+          image: gcr.io/knative-nightly/github.com/projectcontour/contour/cmd/contour@sha256:3e88236949d49b0933318ef077741e9bf6f40ae84e8b79d7c229e1aaff53220f
           imagePullPolicy: Always
           command:
             - contour
@@ -2217,7 +2217,7 @@ spec:
             - --contour-key-file=/certs/tls.key
             - --config-path=/config/contour.yaml
           command: ["contour"]
-          image: gcr.io/knative-nightly/github.com/projectcontour/contour/cmd/contour@sha256:1583a4c034cfb81a824660c377e23751f91358a9fcf63e0b5a6cf3d60fa96112
+          image: gcr.io/knative-nightly/github.com/projectcontour/contour/cmd/contour@sha256:3e88236949d49b0933318ef077741e9bf6f40ae84e8b79d7c229e1aaff53220f
           imagePullPolicy: IfNotPresent
           name: contour
           ports:
@@ -2306,7 +2306,7 @@ spec:
           args:
             - envoy
             - shutdown-manager
-          image: gcr.io/knative-nightly/github.com/projectcontour/contour/cmd/contour@sha256:1583a4c034cfb81a824660c377e23751f91358a9fcf63e0b5a6cf3d60fa96112
+          image: gcr.io/knative-nightly/github.com/projectcontour/contour/cmd/contour@sha256:3e88236949d49b0933318ef077741e9bf6f40ae84e8b79d7c229e1aaff53220f
           imagePullPolicy: IfNotPresent
           lifecycle:
             preStop:
@@ -2383,7 +2383,7 @@ spec:
             - --envoy-key-file=/certs/tls.key
           command:
             - contour
-          image: gcr.io/knative-nightly/github.com/projectcontour/contour/cmd/contour@sha256:1583a4c034cfb81a824660c377e23751f91358a9fcf63e0b5a6cf3d60fa96112
+          image: gcr.io/knative-nightly/github.com/projectcontour/contour/cmd/contour@sha256:3e88236949d49b0933318ef077741e9bf6f40ae84e8b79d7c229e1aaff53220f
           imagePullPolicy: IfNotPresent
           name: envoy-initconfig
           volumeMounts:
diff --git a/third_party/contour-latest/net-contour.yaml b/third_party/contour-latest/net-contour.yaml
index a4e4ce13b..c5646d5bc 100644
--- a/third_party/contour-latest/net-contour.yaml
+++ b/third_party/contour-latest/net-contour.yaml
@@ -33,7 +33,7 @@ metadata:
   namespace: knative-serving
   labels:
     networking.knative.dev/ingress-provider: contour
-    serving.knative.dev/release: "v20210105-47e72ff3"
+    serving.knative.dev/release: "v20210107-0df7ed85"
 data:
   _example: |
     ################################
@@ -103,7 +103,7 @@ spec:
         - name: controller
           # This is the Go import path for the binary that is containerized
           # and substituted here.
-          image: gcr.io/knative-nightly/knative.dev/net-contour/cmd/controller@sha256:41eba25f803191f018a6b5429b2284470d5e339f22798d36240327e21a5053b8
+          image: gcr.io/knative-nightly/knative.dev/net-contour/cmd/controller@sha256:6973702a1b5dab880e61548c29cf369fe2a6c42edfe5685ccf820c22edd7dc4e
           resources:
             requests:
               cpu: 40m
diff --git a/third_party/kourier-latest/kourier.yaml b/third_party/kourier-latest/kourier.yaml
index 8131e255f..f6c350282 100644
--- a/third_party/kourier-latest/kourier.yaml
+++ b/third_party/kourier-latest/kourier.yaml
@@ -18,7 +18,7 @@ metadata:
   name: kourier-system
   labels:
     networking.knative.dev/ingress-provider: kourier
-    serving.knative.dev/release: "v20210106-a4e10cc2"
+    serving.knative.dev/release: "v20210107-707240d1"
 
 ---
 # Copyright 2020 The Knative Authors
@@ -42,7 +42,7 @@ metadata:
   namespace: knative-serving
   labels:
     networking.knative.dev/ingress-provider: kourier
-    serving.knative.dev/release: "v20210106-a4e10cc2"
+    serving.knative.dev/release: "v20210107-707240d1"
 ---
 apiVersion: rbac.authorization.k8s.io/v1
 kind: ClusterRole
@@ -51,7 +51,7 @@ metadata:
   namespace: knative-serving
   labels:
     networking.knative.dev/ingress-provider: kourier
-    serving.knative.dev/release: "v20210106-a4e10cc2"
+    serving.knative.dev/release: "v20210107-707240d1"
 rules:
   - apiGroups: [""]
     resources: ["events"]
@@ -78,7 +78,7 @@ metadata:
   name: 3scale-kourier
   labels:
     networking.knative.dev/ingress-provider: kourier
-    serving.knative.dev/release: "v20210106-a4e10cc2"
+    serving.knative.dev/release: "v20210107-707240d1"
 roleRef:
   apiGroup: rbac.authorization.k8s.io
   kind: ClusterRole
@@ -110,7 +110,7 @@ metadata:
   namespace: knative-serving
   labels:
     networking.knative.dev/ingress-provider: kourier
-    serving.knative.dev/release: "v20210106-a4e10cc2"
+    serving.knative.dev/release: "v20210107-707240d1"
 spec:
   replicas: 1
   selector:
@@ -122,7 +122,7 @@ spec:
         app: 3scale-kourier-control
     spec:
       containers:
-        - image: gcr.io/knative-nightly/knative.dev/net-kourier/cmd/kourier@sha256:e1a21d7147009edb875c9651db60b1b545970295d15a70f93bfa96e8cb3cc9b3
+        - image: gcr.io/knative-nightly/knative.dev/net-kourier/cmd/kourier@sha256:ca4090e564c601bc32a487f586ad3d748d682d0e62cfce1c0c80ee0858a735e0
           name: kourier-control
           env:
             - name: CERTS_SECRET_NAMESPACE
@@ -158,7 +158,7 @@ metadata:
   namespace: knative-serving
   labels:
     networking.knative.dev/ingress-provider: kourier
-    serving.knative.dev/release: "v20210106-a4e10cc2"
+    serving.knative.dev/release: "v20210107-707240d1"
 spec:
   ports:
     - name: grpc-xds
@@ -191,7 +191,7 @@ metadata:
   namespace: kourier-system
   labels:
     networking.knative.dev/ingress-provider: kourier
-    serving.knative.dev/release: "v20210106-a4e10cc2"
+    serving.knative.dev/release: "v20210107-707240d1"
 spec:
   selector:
     matchLabels:
@@ -257,7 +257,7 @@ metadata:
   namespace: kourier-system
   labels:
     networking.knative.dev/ingress-provider: kourier
-    serving.knative.dev/release: "v20210106-a4e10cc2"
+    serving.knative.dev/release: "v20210107-707240d1"
 spec:
   ports:
     - name: http2
@@ -279,7 +279,7 @@ metadata:
   namespace: kourier-system
   labels:
     networking.knative.dev/ingress-provider: kourier
-    serving.knative.dev/release: "v20210106-a4e10cc2"
+    serving.knative.dev/release: "v20210107-707240d1"
 spec:
   ports:
     - name: http2
@@ -297,7 +297,7 @@ metadata:
   namespace: kourier-system
   labels:
     networking.knative.dev/ingress-provider: kourier
-    serving.knative.dev/release: "v20210106-a4e10cc2"
+    serving.knative.dev/release: "v20210107-707240d1"
 data:
   envoy-bootstrap.yaml: |
     dynamic_resources: