Repository: knative/serving
Pull request #10742 (2021-02-10 21:04:59)

Restrict the Clock interface to the passive where possible.
Accept wide, require narrow in effect.

Also remove the c'tors that were not even used in the tests.

/assign @dprotaso @whaught mattmoor

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

This pull-request has been approved by: *<a href="https://github.com/knative/serving/pull/10742#" title="Author self-approved">vagababov</a>*

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

The pull request process is described [here](https://git.k8s.io/community/contributors/guide/owners.md#the-code-review-process)

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

- ~~[pkg/apis/OWNERS](https://github.com/knative/serving/blob/master/pkg/apis/OWNERS)~~ [vagababov]
- ~~[pkg/reconciler/OWNERS](https://github.com/knative/serving/blob/master/pkg/reconciler/OWNERS)~~ [vagababov]
- ~~[pkg/testing/OWNERS](https://github.com/knative/serving/blob/master/pkg/testing/OWNERS)~~ [vagababov]

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":[]} -->
codecov[bot]: # [Codecov](https://codecov.io/gh/knative/serving/pull/10742?src=pr&el=h1) Report
> Merging [#10742](https://codecov.io/gh/knative/serving/pull/10742?src=pr&el=desc) (5e4f62e) into [master](https://codecov.io/gh/knative/serving/commit/914855f55bf9738f6924a4ff5b8dc41ed2771b6b?el=desc) (914855f) will **increase** coverage by `0.04%`.
> The diff coverage is `100.00%`.

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

```diff
@@            Coverage Diff             @@
##           master   #10742      +/-   ##
==========================================
+ Coverage   88.05%   88.09%   +0.04%     
==========================================
  Files         188      188              
  Lines        9061     9058       -3     
==========================================
+ Hits         7979     7980       +1     
+ Misses        830      827       -3     
+ Partials      252      251       -1     
```


| [Impacted Files](https://codecov.io/gh/knative/serving/pull/10742?src=pr&el=tree) | Coverage Δ | |
|---|---|---|
| [pkg/apis/serving/v1/revision\_helpers.go](https://codecov.io/gh/knative/serving/pull/10742/diff?src=pr&el=tree#diff-cGtnL2FwaXMvc2VydmluZy92MS9yZXZpc2lvbl9oZWxwZXJzLmdv) | `100.00% <ø> (ø)` | |
| [pkg/reconciler/configuration/configuration.go](https://codecov.io/gh/knative/serving/pull/10742/diff?src=pr&el=tree#diff-cGtnL3JlY29uY2lsZXIvY29uZmlndXJhdGlvbi9jb25maWd1cmF0aW9uLmdv) | `86.71% <ø> (-1.57%)` | :arrow_down: |
| [pkg/reconciler/configuration/resources/revision.go](https://codecov.io/gh/knative/serving/pull/10742/diff?src=pr&el=tree#diff-cGtnL3JlY29uY2lsZXIvY29uZmlndXJhdGlvbi9yZXNvdXJjZXMvcmV2aXNpb24uZ28=) | `78.57% <ø> (ø)` | |
| [pkg/reconciler/configuration/controller.go](https://codecov.io/gh/knative/serving/pull/10742/diff?src=pr&el=tree#diff-cGtnL3JlY29uY2lsZXIvY29uZmlndXJhdGlvbi9jb250cm9sbGVyLmdv) | `100.00% <100.00%> (ø)` | |
| [pkg/reconciler/labeler/accessors.go](https://codecov.io/gh/knative/serving/pull/10742/diff?src=pr&el=tree#diff-cGtnL3JlY29uY2lsZXIvbGFiZWxlci9hY2Nlc3NvcnMuZ28=) | `87.95% <100.00%> (ø)` | |
| [pkg/reconciler/labeler/controller.go](https://codecov.io/gh/knative/serving/pull/10742/diff?src=pr&el=tree#diff-cGtnL3JlY29uY2lsZXIvbGFiZWxlci9jb250cm9sbGVyLmdv) | `100.00% <100.00%> (ø)` | |
| [pkg/activator/net/revision\_backends.go](https://codecov.io/gh/knative/serving/pull/10742/diff?src=pr&el=tree#diff-cGtnL2FjdGl2YXRvci9uZXQvcmV2aXNpb25fYmFja2VuZHMuZ28=) | `91.32% <0.00%> (+0.91%)` | :arrow_up: |
| [pkg/reconciler/autoscaling/kpa/scaler.go](https://codecov.io/gh/knative/serving/pull/10742/diff?src=pr&el=tree#diff-cGtnL3JlY29uY2lsZXIvYXV0b3NjYWxpbmcva3BhL3NjYWxlci5nbw==) | `90.14% <0.00%> (+1.40%)` | :arrow_up: |
| [pkg/autoscaler/statforwarder/leases.go](https://codecov.io/gh/knative/serving/pull/10742/diff?src=pr&el=tree#diff-cGtnL2F1dG9zY2FsZXIvc3RhdGZvcndhcmRlci9sZWFzZXMuZ28=) | `78.41% <0.00%> (+1.43%)` | :arrow_up: |

------

[Continue to review full report at Codecov](https://codecov.io/gh/knative/serving/pull/10742?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/10742?src=pr&el=footer). Last update [914855f...b1da923](https://codecov.io/gh/knative/serving/pull/10742?src=pr&el=lastupdated). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments).

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

This pull-request has been approved by: *<a href="https://github.com/knative/serving/pull/10742#" title="Author self-approved">vagababov</a>*, *<a href="https://github.com/knative/serving/pull/10742#pullrequestreview-588057770" title="Approved">whaught</a>*

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

The pull request process is described [here](https://git.k8s.io/community/contributors/guide/owners.md#the-code-review-process)

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

- ~~[pkg/apis/OWNERS](https://github.com/knative/serving/blob/master/pkg/apis/OWNERS)~~ [vagababov]
- ~~[pkg/reconciler/OWNERS](https://github.com/knative/serving/blob/master/pkg/reconciler/OWNERS)~~ [vagababov]
- ~~[pkg/testing/OWNERS](https://github.com/knative/serving/blob/master/pkg/testing/OWNERS)~~ [vagababov]

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":[]} -->
dprotaso: /lgtm
/approve
knative-prow-robot: [APPROVALNOTIFIER] This PR is **APPROVED**

This pull-request has been approved by: *<a href="https://github.com/knative/serving/pull/10742#issuecomment-777049703" title="Approved">dprotaso</a>*, *<a href="https://github.com/knative/serving/pull/10742#" title="Author self-approved">vagababov</a>*, *<a href="https://github.com/knative/serving/pull/10742#pullrequestreview-588057770" title="Approved">whaught</a>*

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

The pull request process is described [here](https://git.k8s.io/community/contributors/guide/owners.md#the-code-review-process)

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

- ~~[pkg/apis/OWNERS](https://github.com/knative/serving/blob/master/pkg/apis/OWNERS)~~ [dprotaso,vagababov]
- ~~[pkg/reconciler/OWNERS](https://github.com/knative/serving/blob/master/pkg/reconciler/OWNERS)~~ [dprotaso,vagababov]
- ~~[pkg/testing/OWNERS](https://github.com/knative/serving/blob/master/pkg/testing/OWNERS)~~ [dprotaso,vagababov]

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":[]} -->

Patch:
diff --git a/pkg/apis/serving/v1/revision_helpers.go b/pkg/apis/serving/v1/revision_helpers.go
index 64869a289..9286ce9a8 100644
--- a/pkg/apis/serving/v1/revision_helpers.go
+++ b/pkg/apis/serving/v1/revision_helpers.go
@@ -89,7 +89,7 @@ func (rs *RevisionSpec) GetContainer() *corev1.Container {
 
 // SetRoutingState sets the routingState label on this Revision and updates the
 // routingStateModified annotation.
-func (r *Revision) SetRoutingState(state RoutingState, clock clock.Clock) {
+func (r *Revision) SetRoutingState(state RoutingState, clock clock.PassiveClock) {
 	stateStr := string(state)
 	if t := r.Annotations[serving.RoutingStateModifiedAnnotationKey]; t != "" &&
 		r.Labels[serving.RoutingStateLabelKey] == stateStr {
@@ -106,7 +106,7 @@ func (r *Revision) SetRoutingState(state RoutingState, clock clock.Clock) {
 }
 
 // RoutingStateModifiedString gives a formatted now timestamp.
-func RoutingStateModifiedString(clock clock.Clock) string {
+func RoutingStateModifiedString(clock clock.PassiveClock) string {
 	return clock.Now().UTC().Format(time.RFC3339)
 }
 
diff --git a/pkg/reconciler/configuration/configuration.go b/pkg/reconciler/configuration/configuration.go
index 771282401..2cff7ca4e 100644
--- a/pkg/reconciler/configuration/configuration.go
+++ b/pkg/reconciler/configuration/configuration.go
@@ -49,7 +49,7 @@ type Reconciler struct {
 	// listers index properties about resources
 	revisionLister listers.RevisionLister
 
-	clock clock.Clock
+	clock clock.PassiveClock
 }
 
 // Check that our Reconciler implements configreconciler.Interface
diff --git a/pkg/reconciler/configuration/controller.go b/pkg/reconciler/configuration/controller.go
index a67f48331..90d974612 100644
--- a/pkg/reconciler/configuration/controller.go
+++ b/pkg/reconciler/configuration/controller.go
@@ -36,15 +36,6 @@ import (
 func NewController(
 	ctx context.Context,
 	cmw configmap.Watcher,
-) *controller.Impl {
-	return NewControllerWithClock(ctx, cmw, clock.RealClock{})
-}
-
-// NewControllerWithClock creates a new Configuration controller with a clock
-func NewControllerWithClock(
-	ctx context.Context,
-	cmw configmap.Watcher,
-	clock clock.Clock,
 ) *controller.Impl {
 	logger := logging.FromContext(ctx)
 	configurationInformer := configurationinformer.Get(ctx)
@@ -57,7 +48,7 @@ func NewControllerWithClock(
 	c := &Reconciler{
 		client:         servingclient.Get(ctx),
 		revisionLister: revisionInformer.Lister(),
-		clock:          clock,
+		clock:          &clock.RealClock{},
 	}
 	impl := configreconciler.NewImpl(ctx, c, func(*controller.Impl) controller.Options {
 		return controller.Options{ConfigStore: configStore}
diff --git a/pkg/reconciler/configuration/resources/revision.go b/pkg/reconciler/configuration/resources/revision.go
index 4782bcb91..49c952aa0 100644
--- a/pkg/reconciler/configuration/resources/revision.go
+++ b/pkg/reconciler/configuration/resources/revision.go
@@ -28,7 +28,7 @@ import (
 )
 
 // MakeRevision creates a revision object from configuration.
-func MakeRevision(ctx context.Context, configuration *v1.Configuration, clock clock.Clock) *v1.Revision {
+func MakeRevision(ctx context.Context, configuration *v1.Configuration, clock clock.PassiveClock) *v1.Revision {
 	// Start from the ObjectMeta/Spec inlined in the Configuration resources.
 	rev := &v1.Revision{
 		ObjectMeta: configuration.Spec.GetTemplate().ObjectMeta,
diff --git a/pkg/reconciler/labeler/accessors.go b/pkg/reconciler/labeler/accessors.go
index abcc02f80..94c510668 100644
--- a/pkg/reconciler/labeler/accessors.go
+++ b/pkg/reconciler/labeler/accessors.go
@@ -49,7 +49,7 @@ type RevisionAccessor struct {
 	tracker tracker.Interface
 	lister  listers.RevisionLister
 	indexer cache.Indexer
-	clock   clock.Clock
+	clock   clock.PassiveClock
 }
 
 // RevisionAccessor implements Accessor
@@ -61,7 +61,7 @@ func newRevisionAccessor(
 	tracker tracker.Interface,
 	lister listers.RevisionLister,
 	indexer cache.Indexer,
-	clock clock.Clock) *RevisionAccessor {
+	clock clock.PassiveClock) *RevisionAccessor {
 	return &RevisionAccessor{
 		client:  client,
 		tracker: tracker,
@@ -73,7 +73,7 @@ func newRevisionAccessor(
 
 // makeMetadataPatch makes a metadata map to be patched or nil if no changes are needed.
 func makeMetadataPatch(
-	acc kmeta.Accessor, routeName string, addRoutingState, remove bool, clock clock.Clock) (map[string]interface{}, error) {
+	acc kmeta.Accessor, routeName string, addRoutingState, remove bool, clock clock.PassiveClock) (map[string]interface{}, error) {
 	labels := map[string]interface{}{}
 	annotations := map[string]interface{}{}
 
@@ -97,7 +97,7 @@ func makeMetadataPatch(
 }
 
 // markRoutingState updates the RoutingStateLabel and bumps the modified time annotation.
-func markRoutingState(acc kmeta.Accessor, clock clock.Clock, diffLabels, diffAnn map[string]interface{}) {
+func markRoutingState(acc kmeta.Accessor, clock clock.PassiveClock, diffLabels, diffAnn map[string]interface{}) {
 
 	hasRoute := acc.GetAnnotations()[serving.RoutesAnnotationKey] != ""
 	if val, has := diffAnn[serving.RoutesAnnotationKey]; has {
@@ -179,7 +179,7 @@ type ConfigurationAccessor struct {
 	tracker tracker.Interface
 	lister  listers.ConfigurationLister
 	indexer cache.Indexer
-	clock   clock.Clock
+	clock   clock.PassiveClock
 }
 
 // ConfigurationAccessor implements Accessor
@@ -191,7 +191,7 @@ func newConfigurationAccessor(
 	tracker tracker.Interface,
 	lister listers.ConfigurationLister,
 	indexer cache.Indexer,
-	clock clock.Clock) *ConfigurationAccessor {
+	clock clock.PassiveClock) *ConfigurationAccessor {
 	return &ConfigurationAccessor{
 		client:  client,
 		tracker: tracker,
diff --git a/pkg/reconciler/labeler/controller.go b/pkg/reconciler/labeler/controller.go
index 7c6bf301e..206428666 100644
--- a/pkg/reconciler/labeler/controller.go
+++ b/pkg/reconciler/labeler/controller.go
@@ -41,14 +41,6 @@ import (
 func NewController(
 	ctx context.Context,
 	cmw configmap.Watcher,
-) *controller.Impl {
-	return newControllerWithClock(ctx, cmw, clock.RealClock{})
-}
-
-func newControllerWithClock(
-	ctx context.Context,
-	cmw configmap.Watcher,
-	clock clock.Clock,
 ) *controller.Impl {
 	logger := logging.FromContext(ctx)
 	routeInformer := routeinformer.Get(ctx)
@@ -93,6 +85,7 @@ func newControllerWithClock(
 	))
 
 	client := servingclient.Get(ctx)
+	clock := &clock.RealClock{}
 	c.caccV2 = newConfigurationAccessor(client, tracker, configInformer.Lister(), configInformer.Informer().GetIndexer(), clock)
 	c.raccV2 = newRevisionAccessor(client, tracker, revisionInformer.Lister(), revisionInformer.Informer().GetIndexer(), clock)
 


Test patch:
diff --git a/pkg/apis/serving/v1/revision_helpers_test.go b/pkg/apis/serving/v1/revision_helpers_test.go
index 628252313..f689b52d9 100644
--- a/pkg/apis/serving/v1/revision_helpers_test.go
+++ b/pkg/apis/serving/v1/revision_helpers_test.go
@@ -24,6 +24,7 @@ import (
 	"k8s.io/apimachinery/pkg/api/equality"
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 	"k8s.io/apimachinery/pkg/util/clock"
+
 	net "knative.dev/networking/pkg/apis/networking"
 	duckv1 "knative.dev/pkg/apis/duck/v1"
 	"knative.dev/serving/pkg/apis/serving"
@@ -261,7 +262,7 @@ func TestGetContainer(t *testing.T) {
 func TestSetRoutingState(t *testing.T) {
 	rev := &Revision{}
 	empty := time.Time{}
-	clock := clock.RealClock{}
+	clock := &clock.RealClock{}
 
 	// Test unset timestamp
 	if rev.GetRoutingStateModified() != empty {
diff --git a/pkg/reconciler/configuration/configuration_test.go b/pkg/reconciler/configuration/configuration_test.go
index 675fa7941..96453d95f 100644
--- a/pkg/reconciler/configuration/configuration_test.go
+++ b/pkg/reconciler/configuration/configuration_test.go
@@ -58,11 +58,11 @@ var revisionSpec = v1.RevisionSpec{
 }
 
 var testCtx context.Context
-var testClock clock.Clock
+var testClock clock.PassiveClock
 
 // This is heavily based on the way the OpenShift Ingress controller tests its reconciliation method.
 func TestReconcile(t *testing.T) {
-	testClock = clock.NewFakeClock(time.Now())
+	testClock = clock.NewFakePassiveClock(time.Now())
 	testCtx = context.Background()
 
 	test(t)
diff --git a/pkg/reconciler/configuration/resources/revision_test.go b/pkg/reconciler/configuration/resources/revision_test.go
index 27551fc9d..6480f39e6 100644
--- a/pkg/reconciler/configuration/resources/revision_test.go
+++ b/pkg/reconciler/configuration/resources/revision_test.go
@@ -31,10 +31,10 @@ import (
 	v1 "knative.dev/serving/pkg/apis/serving/v1"
 )
 
-var fakeCurTime = time.Unix(1e9, 0)
+var fakeCurTime = time.Unix(1e9, 20102021)
 
 func TestMakeRevisions(t *testing.T) {
-	clock := clock.NewFakeClock(fakeCurTime)
+	clock := clock.NewFakePassiveClock(fakeCurTime)
 
 	tests := []struct {
 		name          string
diff --git a/pkg/reconciler/gc/reconciler_test.go b/pkg/reconciler/gc/reconciler_test.go
index f34fff416..ab052e814 100644
--- a/pkg/reconciler/gc/reconciler_test.go
+++ b/pkg/reconciler/gc/reconciler_test.go
@@ -75,7 +75,7 @@ func TestGCReconcile(t *testing.T) {
 			},
 		}}
 
-	fc := clock.NewFakeClock(time.Now())
+	fc := clock.NewFakePassiveClock(time.Now())
 	table := TableTest{{
 		Name: "delete oldest, keep two V2",
 		Objects: []runtime.Object{
diff --git a/pkg/reconciler/gc/v2/gc_test.go b/pkg/reconciler/gc/v2/gc_test.go
index 20387853d..8186e000b 100644
--- a/pkg/reconciler/gc/v2/gc_test.go
+++ b/pkg/reconciler/gc/v2/gc_test.go
@@ -65,7 +65,7 @@ func TestCollectMin(t *testing.T) {
 	old := now.Add(-11 * time.Minute)
 	older := now.Add(-12 * time.Minute)
 	oldest := now.Add(-13 * time.Minute)
-	fc := clock.NewFakeClock(now)
+	fc := clock.NewFakePassiveClock(now)
 
 	table := []struct {
 		name        string
@@ -229,7 +229,7 @@ func TestCollectMax(t *testing.T) {
 	old := now.Add(-11 * time.Minute)
 	older := now.Add(-12 * time.Minute)
 	oldest := now.Add(-13 * time.Minute)
-	fc := clock.NewFakeClock(now)
+	fc := clock.NewFakePassiveClock(now)
 
 	table := []struct {
 		name        string
@@ -329,7 +329,7 @@ func TestCollectSettings(t *testing.T) {
 	old := now.Add(-11 * time.Minute)
 	older := now.Add(-12 * time.Minute)
 	oldest := now.Add(-13 * time.Minute)
-	fc := clock.NewFakeClock(now)
+	fc := clock.NewFakePassiveClock(now)
 
 	cfg := cfg("settings-test", "foo", 5556,
 		WithLatestCreated("5556"),
diff --git a/pkg/reconciler/labeler/labeler_test.go b/pkg/reconciler/labeler/labeler_test.go
index 200bf6d4a..f3621d825 100644
--- a/pkg/reconciler/labeler/labeler_test.go
+++ b/pkg/reconciler/labeler/labeler_test.go
@@ -53,7 +53,7 @@ import (
 func TestV2Reconcile(t *testing.T) {
 	now := metav1.Now()
 	fakeTime := now.Time
-	clock := clock.NewFakeClock(fakeTime)
+	clock := clock.NewFakePassiveClock(fakeTime)
 
 	table := TableTest{{
 		Name: "bad workqueue key",
diff --git a/pkg/reconciler/revision/table_test.go b/pkg/reconciler/revision/table_test.go
index b5ab2c503..acd33b5e9 100644
--- a/pkg/reconciler/revision/table_test.go
+++ b/pkg/reconciler/revision/table_test.go
@@ -57,7 +57,7 @@ import (
 func TestReconcile(t *testing.T) {
 	// We don't care about the value, but that it does not change,
 	// since it leads to flakes.
-	fc := clock.NewFakeClock(time.Now())
+	fc := clock.NewFakePassiveClock(time.Now())
 
 	table := TableTest{{
 		Name: "bad workqueue key",
diff --git a/pkg/testing/v1/revision.go b/pkg/testing/v1/revision.go
index ac9b9cc51..8d38539bc 100644
--- a/pkg/testing/v1/revision.go
+++ b/pkg/testing/v1/revision.go
@@ -101,7 +101,7 @@ func WithRoutingStateModified(t time.Time) RevisionOption {
 }
 
 // WithRoutingState updates the annotation to the provided timestamp.
-func WithRoutingState(s v1.RoutingState, c clock.Clock) RevisionOption {
+func WithRoutingState(s v1.RoutingState, c clock.PassiveClock) RevisionOption {
 	return func(rev *v1.Revision) {
 		rev.SetRoutingState(s, c)
 	}
diff --git a/third_party/contour-latest/contour.yaml b/third_party/contour-latest/contour.yaml
index 8e089f970..85793754d 100644
--- a/third_party/contour-latest/contour.yaml
+++ b/third_party/contour-latest/contour.yaml
@@ -1641,7 +1641,7 @@ spec:
     spec:
       containers:
         - name: contour
-          image: gcr.io/knative-nightly/github.com/projectcontour/contour/cmd/contour@sha256:b3702010f94ed8c63bbaae1049442bde6254134a9858009e2d141186100132c6
+          image: gcr.io/knative-nightly/github.com/projectcontour/contour/cmd/contour@sha256:d56baa3a82e605f5b3c2b179346ad5921e4e948ac62e313311ab0907dd505afd
           imagePullPolicy: Always
           command:
             - contour
@@ -1868,7 +1868,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:b3702010f94ed8c63bbaae1049442bde6254134a9858009e2d141186100132c6
+          image: gcr.io/knative-nightly/github.com/projectcontour/contour/cmd/contour@sha256:d56baa3a82e605f5b3c2b179346ad5921e4e948ac62e313311ab0907dd505afd
           imagePullPolicy: IfNotPresent
           name: contour
           ports:
@@ -1957,7 +1957,7 @@ spec:
           args:
             - envoy
             - shutdown-manager
-          image: gcr.io/knative-nightly/github.com/projectcontour/contour/cmd/contour@sha256:b3702010f94ed8c63bbaae1049442bde6254134a9858009e2d141186100132c6
+          image: gcr.io/knative-nightly/github.com/projectcontour/contour/cmd/contour@sha256:d56baa3a82e605f5b3c2b179346ad5921e4e948ac62e313311ab0907dd505afd
           imagePullPolicy: IfNotPresent
           lifecycle:
             preStop:
@@ -2036,7 +2036,7 @@ spec:
             - --envoy-key-file=/certs/tls.key
           command:
             - contour
-          image: gcr.io/knative-nightly/github.com/projectcontour/contour/cmd/contour@sha256:b3702010f94ed8c63bbaae1049442bde6254134a9858009e2d141186100132c6
+          image: gcr.io/knative-nightly/github.com/projectcontour/contour/cmd/contour@sha256:d56baa3a82e605f5b3c2b179346ad5921e4e948ac62e313311ab0907dd505afd
           imagePullPolicy: IfNotPresent
           name: envoy-initconfig
           volumeMounts:
@@ -2261,7 +2261,7 @@ spec:
     spec:
       containers:
         - name: contour
-          image: gcr.io/knative-nightly/github.com/projectcontour/contour/cmd/contour@sha256:b3702010f94ed8c63bbaae1049442bde6254134a9858009e2d141186100132c6
+          image: gcr.io/knative-nightly/github.com/projectcontour/contour/cmd/contour@sha256:d56baa3a82e605f5b3c2b179346ad5921e4e948ac62e313311ab0907dd505afd
           imagePullPolicy: Always
           command:
             - contour
@@ -2381,7 +2381,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:b3702010f94ed8c63bbaae1049442bde6254134a9858009e2d141186100132c6
+          image: gcr.io/knative-nightly/github.com/projectcontour/contour/cmd/contour@sha256:d56baa3a82e605f5b3c2b179346ad5921e4e948ac62e313311ab0907dd505afd
           imagePullPolicy: IfNotPresent
           name: contour
           ports:
@@ -2470,7 +2470,7 @@ spec:
           args:
             - envoy
             - shutdown-manager
-          image: gcr.io/knative-nightly/github.com/projectcontour/contour/cmd/contour@sha256:b3702010f94ed8c63bbaae1049442bde6254134a9858009e2d141186100132c6
+          image: gcr.io/knative-nightly/github.com/projectcontour/contour/cmd/contour@sha256:d56baa3a82e605f5b3c2b179346ad5921e4e948ac62e313311ab0907dd505afd
           imagePullPolicy: IfNotPresent
           lifecycle:
             preStop:
@@ -2549,7 +2549,7 @@ spec:
             - --envoy-key-file=/certs/tls.key
           command:
             - contour
-          image: gcr.io/knative-nightly/github.com/projectcontour/contour/cmd/contour@sha256:b3702010f94ed8c63bbaae1049442bde6254134a9858009e2d141186100132c6
+          image: gcr.io/knative-nightly/github.com/projectcontour/contour/cmd/contour@sha256:d56baa3a82e605f5b3c2b179346ad5921e4e948ac62e313311ab0907dd505afd
           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 a3619fd24..cae2fdf0d 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: "v20210208-0e8faff1"
+    serving.knative.dev/release: "v20210210-16622601"
 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:6b696d5ddc509c159303726deaae1043b2c922c4b38b185b3b02ae8559bcab1c
+          image: gcr.io/knative-nightly/knative.dev/net-contour/cmd/controller@sha256:c5f004d22f545aca34ee08167780d69a40680274c2e5def5101140ca42189325
           resources:
             requests:
               cpu: 40m