Repository: knative-sandbox/eventing-kafka-broker
Pull request #1842 (2022-02-01 15:54:25)

Manual upgrade to latest dependencies 
Fixes https://github.com/knative-sandbox/eventing-kafka-broker/pull/1822

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

This pull-request has been approved by: *<a href="https://github.com/knative-sandbox/eventing-kafka-broker/pull/1842#" title="Author self-approved">pierDipi</a>*

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

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:

- ~~[OWNERS](https://github.com/knative-sandbox/eventing-kafka-broker/blob/main/OWNERS)~~ [pierDipi]

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-sandbox/eventing-kafka-broker/pull/1842?src=pr&el=h1&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=knative-sandbox) Report
> Merging [#1842](https://codecov.io/gh/knative-sandbox/eventing-kafka-broker/pull/1842?src=pr&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=knative-sandbox) (26c1674) into [main](https://codecov.io/gh/knative-sandbox/eventing-kafka-broker/commit/bda03401856bde9384106afe22c58fd97b822938?el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=knative-sandbox) (bda0340) will **decrease** coverage by `10.86%`.
> The diff coverage is `n/a`.

[![Impacted file tree graph](https://codecov.io/gh/knative-sandbox/eventing-kafka-broker/pull/1842/graphs/tree.svg?width=650&height=150&src=pr&token=xyPIgGOiwy&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=knative-sandbox)](https://codecov.io/gh/knative-sandbox/eventing-kafka-broker/pull/1842?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=knative-sandbox)

```diff
@@              Coverage Diff              @@
##               main    #1842       +/-   ##
=============================================
- Coverage     68.84%   57.98%   -10.87%     
=============================================
  Files           131       65       -66     
  Lines          5492     3663     -1829     
  Branches        178        0      -178     
=============================================
- Hits           3781     2124     -1657     
+ Misses         1405     1330       -75     
+ Partials        306      209       -97     
```

| Flag | Coverage Δ | |
|---|---|---|
| java-unittests | `?` | |

Flags with carried forward coverage won't be shown. [Click here](https://docs.codecov.io/docs/carryforward-flags?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=knative-sandbox#carryforward-flags-in-the-pull-request-comment) to find out more.

| [Impacted Files](https://codecov.io/gh/knative-sandbox/eventing-kafka-broker/pull/1842?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=knative-sandbox) | Coverage Δ | |
|---|---|---|
| [control-plane/pkg/reconciler/channel/controller.go](https://codecov.io/gh/knative-sandbox/eventing-kafka-broker/pull/1842/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=knative-sandbox#diff-Y29udHJvbC1wbGFuZS9wa2cvcmVjb25jaWxlci9jaGFubmVsL2NvbnRyb2xsZXIuZ28=) | `86.53% <0.00%> (-0.26%)` | :arrow_down: |
| [control-plane/pkg/reconciler/channel/channel.go](https://codecov.io/gh/knative-sandbox/eventing-kafka-broker/pull/1842/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=knative-sandbox#diff-Y29udHJvbC1wbGFuZS9wa2cvcmVjb25jaWxlci9jaGFubmVsL2NoYW5uZWwuZ28=) | `61.88% <0.00%> (-0.12%)` | :arrow_down: |
| [...kafka/broker/dispatcher/impl/filter/AnyFilter.java](https://codecov.io/gh/knative-sandbox/eventing-kafka-broker/pull/1842/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=knative-sandbox#diff-ZGF0YS1wbGFuZS9kaXNwYXRjaGVyL3NyYy9tYWluL2phdmEvZGV2L2tuYXRpdmUvZXZlbnRpbmcva2Fma2EvYnJva2VyL2Rpc3BhdGNoZXIvaW1wbC9maWx0ZXIvQW55RmlsdGVyLmphdmE=) | | |
| [...broker/dispatcher/impl/consumer/OffsetManager.java](https://codecov.io/gh/knative-sandbox/eventing-kafka-broker/pull/1842/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=knative-sandbox#diff-ZGF0YS1wbGFuZS9kaXNwYXRjaGVyL3NyYy9tYWluL2phdmEvZGV2L2tuYXRpdmUvZXZlbnRpbmcva2Fma2EvYnJva2VyL2Rpc3BhdGNoZXIvaW1wbC9jb25zdW1lci9PZmZzZXRNYW5hZ2VyLmphdmE=) | | |
| [...r/dispatcher/impl/ResponseToKafkaTopicHandler.java](https://codecov.io/gh/knative-sandbox/eventing-kafka-broker/pull/1842/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=knative-sandbox#diff-ZGF0YS1wbGFuZS9kaXNwYXRjaGVyL3NyYy9tYWluL2phdmEvZGV2L2tuYXRpdmUvZXZlbnRpbmcva2Fma2EvYnJva2VyL2Rpc3BhdGNoZXIvaW1wbC9SZXNwb25zZVRvS2Fma2FUb3BpY0hhbmRsZXIuamF2YQ==) | | |
| [...ceiver/impl/handler/IngressRequestHandlerImpl.java](https://codecov.io/gh/knative-sandbox/eventing-kafka-broker/pull/1842/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=knative-sandbox#diff-ZGF0YS1wbGFuZS9yZWNlaXZlci9zcmMvbWFpbi9qYXZhL2Rldi9rbmF0aXZlL2V2ZW50aW5nL2thZmthL2Jyb2tlci9yZWNlaXZlci9pbXBsL2hhbmRsZXIvSW5ncmVzc1JlcXVlc3RIYW5kbGVySW1wbC5qYXZh) | | |
| [...cher/impl/consumer/CloudEventOverridesMutator.java](https://codecov.io/gh/knative-sandbox/eventing-kafka-broker/pull/1842/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=knative-sandbox#diff-ZGF0YS1wbGFuZS9kaXNwYXRjaGVyL3NyYy9tYWluL2phdmEvZGV2L2tuYXRpdmUvZXZlbnRpbmcva2Fma2EvYnJva2VyL2Rpc3BhdGNoZXIvaW1wbC9jb25zdW1lci9DbG91ZEV2ZW50T3ZlcnJpZGVzTXV0YXRvci5qYXZh) | | |
| [...ting/kafka/broker/core/utils/CollectionsUtils.java](https://codecov.io/gh/knative-sandbox/eventing-kafka-broker/pull/1842/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=knative-sandbox#diff-ZGF0YS1wbGFuZS9jb3JlL3NyYy9tYWluL2phdmEvZGV2L2tuYXRpdmUvZXZlbnRpbmcva2Fma2EvYnJva2VyL2NvcmUvdXRpbHMvQ29sbGVjdGlvbnNVdGlscy5qYXZh) | | |
| [...a/broker/core/security/KubernetesAuthProvider.java](https://codecov.io/gh/knative-sandbox/eventing-kafka-broker/pull/1842/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=knative-sandbox#diff-ZGF0YS1wbGFuZS9jb3JlL3NyYy9tYWluL2phdmEvZGV2L2tuYXRpdmUvZXZlbnRpbmcva2Fma2EvYnJva2VyL2NvcmUvc2VjdXJpdHkvS3ViZXJuZXRlc0F1dGhQcm92aWRlci5qYXZh) | | |
| [...fka/broker/receiver/impl/handler/ProbeHandler.java](https://codecov.io/gh/knative-sandbox/eventing-kafka-broker/pull/1842/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=knative-sandbox#diff-ZGF0YS1wbGFuZS9yZWNlaXZlci9zcmMvbWFpbi9qYXZhL2Rldi9rbmF0aXZlL2V2ZW50aW5nL2thZmthL2Jyb2tlci9yZWNlaXZlci9pbXBsL2hhbmRsZXIvUHJvYmVIYW5kbGVyLmphdmE=) | | |
| ... and [64 more](https://codecov.io/gh/knative-sandbox/eventing-kafka-broker/pull/1842/diff?src=pr&el=tree-more&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=knative-sandbox) | |

------

[Continue to review full report at Codecov](https://codecov.io/gh/knative-sandbox/eventing-kafka-broker/pull/1842?src=pr&el=continue&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=knative-sandbox).
> **Legend** - [Click here to learn more](https://docs.codecov.io/docs/codecov-delta?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=knative-sandbox)
> `Δ = absolute <relative> (impact)`, `ø = not affected`, `? = missing data`
> Powered by [Codecov](https://codecov.io/gh/knative-sandbox/eventing-kafka-broker/pull/1842?src=pr&el=footer&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=knative-sandbox). Last update [bda0340...26c1674](https://codecov.io/gh/knative-sandbox/eventing-kafka-broker/pull/1842?src=pr&el=lastupdated&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=knative-sandbox). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=knative-sandbox).


Patch:
diff --git a/control-plane/cmd/webhook-kafka/main.go b/control-plane/cmd/webhook-kafka/main.go
index 27b2a7aa3..817f85797 100644
--- a/control-plane/cmd/webhook-kafka/main.go
+++ b/control-plane/cmd/webhook-kafka/main.go
@@ -19,6 +19,7 @@ package main
 import (
 	"context"
 
+	corev1 "k8s.io/api/core/v1"
 	"k8s.io/apimachinery/pkg/runtime/schema"
 	"knative.dev/pkg/configmap"
 	"knative.dev/pkg/controller"
@@ -33,9 +34,11 @@ import (
 	sourcesv1beta1 "knative.dev/eventing-kafka/pkg/apis/sources/v1beta1"
 	eventingcorev1beta1 "knative.dev/eventing/pkg/apis/eventing/v1"
 
+	messagingv1beta1 "knative.dev/eventing-kafka/pkg/apis/messaging/v1beta1"
+
+	"knative.dev/eventing-kafka-broker/control-plane/pkg/apis/core"
 	eventingv1 "knative.dev/eventing-kafka-broker/control-plane/pkg/apis/eventing/v1"
 	eventingv1alpha1 "knative.dev/eventing-kafka-broker/control-plane/pkg/apis/eventing/v1alpha1"
-	messagingv1beta1 "knative.dev/eventing-kafka/pkg/apis/messaging/v1beta1"
 )
 
 const (
@@ -48,10 +51,14 @@ var types = map[schema.GroupVersionKind]resourcesemantics.GenericCRD{
 	messagingv1beta1.SchemeGroupVersion.WithKind("KafkaChannel"): &messagingv1beta1.KafkaChannel{},
 }
 
-var callbacks = map[schema.GroupVersionKind]validation.Callback{
+var validationCallbacks = map[schema.GroupVersionKind]validation.Callback{
 	eventingcorev1beta1.SchemeGroupVersion.WithKind("Broker"): eventingv1.BrokerValidationCallback(),
 }
 
+var defaultingCallbacks = map[schema.GroupVersionKind]defaulting.Callback{
+	corev1.SchemeGroupVersion.WithKind("Pod"): core.DispatcherPodsDefaulting(),
+}
+
 func NewDefaultingAdmissionController(ctx context.Context, _ configmap.Watcher) *controller.Impl {
 
 	// A function that infuses the context passed to Validate/SetDefaults with custom metadata.
@@ -77,6 +84,35 @@ func NewDefaultingAdmissionController(ctx context.Context, _ configmap.Watcher)
 	)
 }
 
+func NewPodDefaultingAdmissionController(ctx context.Context, _ configmap.Watcher) *controller.Impl {
+
+	// A function that infuses the context passed to Validate/SetDefaults with custom metadata.
+	ctxFunc := func(ctx context.Context) context.Context {
+		return ctx
+	}
+
+	return defaulting.NewAdmissionController(ctx,
+		// Name of the resource webhook.
+		"pods.defaulting.webhook.kafka.eventing.knative.dev",
+
+		// The path on which to serve the webhook.
+		"/pods-defaulting",
+
+		// The resources to default.
+		// We use only defaulting callbacks for pods.
+		map[schema.GroupVersionKind]resourcesemantics.GenericCRD{},
+
+		// A function that infuses the context passed to Validate/SetDefaults with custom metadata.
+		ctxFunc,
+
+		// Whether to disallow unknown fields.
+		false,
+
+		// Extra defaulting callbacks to be applied to resources.
+		defaultingCallbacks,
+	)
+}
+
 func NewValidationAdmissionController(ctx context.Context, _ configmap.Watcher) *controller.Impl {
 	return validation.NewAdmissionController(ctx,
 		// Name of the resource webhook.
@@ -97,7 +133,7 @@ func NewValidationAdmissionController(ctx context.Context, _ configmap.Watcher)
 		true,
 
 		// Extra validating callbacks to be applied to resources.
-		callbacks,
+		validationCallbacks,
 	)
 }
 
@@ -114,6 +150,7 @@ func main() {
 	sharedmain.MainWithContext(ctx, webhook.NameFromEnv(),
 		certificates.NewController,
 		NewDefaultingAdmissionController,
+		NewPodDefaultingAdmissionController,
 		NewValidationAdmissionController,
 	)
 }
diff --git a/control-plane/config/200-controller/100-config-kafka-descheduler.yaml b/control-plane/config/200-controller/100-config-kafka-descheduler.yaml
new file mode 100644
index 000000000..00b90633a
--- /dev/null
+++ b/control-plane/config/200-controller/100-config-kafka-descheduler.yaml
@@ -0,0 +1,61 @@
+# Copyright 2021 The Knative Authors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+apiVersion: v1
+kind: ConfigMap
+metadata:
+  name: config-kafka-descheduler
+  namespace: knative-eventing
+  labels:
+    kafka.eventing.knative.dev/release: devel
+data:
+  _example: |
+    ################################
+    #                              #
+    #    EXAMPLE CONFIGURATION     #
+    #                              #
+    ################################
+
+    # This block is not actually functional configuration,
+    # but serves to illustrate the available configuration
+    # options and document them in a way that is accessible
+    # to users that `kubectl edit` this config map.
+    #
+    # These sample configuration options may be copied out of
+    # this example block and unindented to be in the data block
+    # to actually change the configuration.
+    #
+    # These predicate plugins are used to filter out pods that
+    # a vreplica cannot be removed from due to not satisfying the
+    # predicate condition. For each pod, the descheduler
+    # will call filter plugins in their configured order.
+    # predicates: |+
+                    []
+    #
+    # These priority plugins are used to score each pod that
+    # has passed the filtering phase. The scheduler will then
+    # select the pod with the highest weighted score sum to
+    # remove vreplica from. If two pods have an equal score,
+    # a pod is chosen randomly.
+    # priorities: |+
+                  [
+                    {"Name": "RemoveWithEvenPodSpreadPriority",
+                    "Weight": 10,
+                    "Args": "{\"MaxSkew\": 2}"},
+                    {"Name": "RemoveWithAvailabilityZonePriority",
+                    "Weight": 10,
+                    "Args":  "{\"MaxSkew\": 2}"},
+                    {"Name": "RemoveWithHighestOrdinalPriority",
+                    "Weight": 2}
+                  ]
diff --git a/control-plane/config/200-controller/100-config-kafka-scheduler.yaml b/control-plane/config/200-controller/100-config-kafka-scheduler.yaml
new file mode 100644
index 000000000..a419b8471
--- /dev/null
+++ b/control-plane/config/200-controller/100-config-kafka-scheduler.yaml
@@ -0,0 +1,63 @@
+# Copyright 2021 The Knative Authors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+apiVersion: v1
+kind: ConfigMap
+metadata:
+  name: config-kafka-scheduler
+  namespace: knative-eventing
+  labels:
+    kafka.eventing.knative.dev/release: devel
+data:
+  _example: |
+    ################################
+    #                              #
+    #    EXAMPLE CONFIGURATION     #
+    #                              #
+    ################################
+
+    # This block is not actually functional configuration,
+    # but serves to illustrate the available configuration
+    # options and document them in a way that is accessible
+    # to users that `kubectl edit` this config map.
+    #
+    # These sample configuration options may be copied out of
+    # this example block and unindented to be in the data block
+    # to actually change the configuration.
+    #
+    # These predicate plugins are used to filter out pods that
+    # a vreplica cannot be placed on due to not satisfying the
+    # predicate condition. For each pod, the scheduler
+    # will call filter plugins in their configured order.
+    # predicates: |+
+                  [
+                    {"Name": "PodFitsResources"},
+                    {"Name": "NoMaxResourceCount",
+                    "Args": "{\"NumPartitions\": 100}"},
+                    {"Name": "EvenPodSpread",
+                    "Args": "{\"MaxSkew\": 2}"}
+                  ]
+    #
+    # These priority plugins are used to score each pod that
+    # has passed the filtering phase. The scheduler will then
+    # select the pod with the highest weighted score sum. If
+    # two pods have an equal score, a pod is chosen randomly.
+    # priorities: |+
+                  [
+                    {"Name": "AvailabilityZonePriority",
+                    "Weight": 10,
+                    "Args":  "{\"MaxSkew\": 2}"},
+                    {"Name": "LowestOrdinalPriority",
+                    "Weight": 2}
+                  ]
diff --git a/control-plane/config/200-webhook/400-webhook-defaulting.yaml b/control-plane/config/200-webhook/400-webhook-defaulting.yaml
index f2b6c6634..718b3edef 100644
--- a/control-plane/config/200-webhook/400-webhook-defaulting.yaml
+++ b/control-plane/config/200-webhook/400-webhook-defaulting.yaml
@@ -19,7 +19,7 @@ metadata:
   labels:
     kafka.eventing.knative.dev/release: devel
 webhooks:
-  - admissionReviewVersions: ["v1", "v1beta1"]
+  - admissionReviewVersions: [ "v1", "v1beta1" ]
     clientConfig:
       service:
         name: kafka-webhook-eventing
@@ -28,3 +28,22 @@ webhooks:
     failurePolicy: Fail
     name: defaulting.webhook.kafka.eventing.knative.dev
     timeoutSeconds: 2
+
+  # Dispatcher pods webhook config.
+  - admissionReviewVersions: [ "v1", "v1beta1" ]
+    clientConfig:
+      service:
+        name: kafka-webhook-eventing
+        namespace: knative-eventing
+    sideEffects: None
+    failurePolicy: Fail
+    name: pods.defaulting.webhook.kafka.eventing.knative.dev
+    timeoutSeconds: 2
+    reinvocationPolicy: IfNeeded
+    matchPolicy: Equivalent
+    namespaceSelector:
+      matchLabels:
+        app.kubernetes.io/name: knative-eventing
+    objectSelector:
+      matchLabels:
+        app.kubernetes.io/component: kafka-dispatcher
diff --git a/control-plane/pkg/apis/core/pod_defaulting.go b/control-plane/pkg/apis/core/pod_defaulting.go
new file mode 100644
index 000000000..2ffaa586b
--- /dev/null
+++ b/control-plane/pkg/apis/core/pod_defaulting.go
@@ -0,0 +1,99 @@
+/*
+ * Copyright 2022 The Knative Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package core
+
+import (
+	"context"
+	"fmt"
+
+	"github.com/google/uuid"
+	corev1 "k8s.io/api/core/v1"
+	"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
+	"k8s.io/apimachinery/pkg/runtime"
+	"knative.dev/pkg/system"
+	"knative.dev/pkg/webhook"
+	"knative.dev/pkg/webhook/resourcesemantics/defaulting"
+
+	kafkainternals "knative.dev/eventing-kafka-broker/control-plane/pkg/apis/internals/kafka/eventing/v1alpha1"
+)
+
+// DispatcherPodsDefaulting returns the defaulting Callback for dispatcher pods
+func DispatcherPodsDefaulting() defaulting.Callback {
+	return defaulting.NewCallback(
+		podDefaultingCallback(func(u *unstructured.Unstructured) uuid.UUID { return uuid.New() }),
+		webhook.Create,
+	)
+}
+
+// generatorFunc generates uuid to set as ConfigMap names.
+type generatorFunc func(*unstructured.Unstructured) uuid.UUID
+
+func podDefaultingCallback(generator generatorFunc) defaulting.CallbackFunc {
+	namespace := system.Namespace()
+	return func(ctx context.Context, unstructured *unstructured.Unstructured) error {
+		if unstructured.GetNamespace() != namespace {
+			return nil
+		}
+
+		var cmName string
+		if unstructured.GetName() == "" {
+			cmName = generator(unstructured).String()
+		} else {
+			cmName = unstructured.GetName()
+		}
+
+		volume := &corev1.Volume{
+			Name: kafkainternals.DispatcherVolumeName,
+			VolumeSource: corev1.VolumeSource{
+				ConfigMap: &corev1.ConfigMapVolumeSource{
+					LocalObjectReference: corev1.LocalObjectReference{Name: cmName},
+				},
+			},
+		}
+
+		unstrVolume, err := runtime.DefaultUnstructuredConverter.ToUnstructured(volume)
+		if err != nil {
+			return fmt.Errorf("failed to convert volume struct to unstructured object: %w", err)
+		}
+
+		pod := unstructured.Object
+		spec := pod["spec"].(map[string]interface{})
+
+		volumes, ok := spec["volumes"].([]interface{})
+		if !ok {
+			volumes = []interface{}{}
+			spec["volumes"] = volumes
+		}
+
+		found := false
+		for k, v := range volumes {
+			vt := v.(map[string]interface{})
+			if vt["name"].(string) == "contract-resources" {
+				found = true
+				volumes[k] = unstrVolume
+			}
+		}
+
+		if !found {
+			spec["volumes"] = append(volumes, unstrVolume)
+		}
+
+		unstructured.Object = pod
+
+		return nil
+	}
+}
diff --git a/control-plane/pkg/apis/internals/kafka/eventing/v1alpha1/consumer_types.go b/control-plane/pkg/apis/internals/kafka/eventing/v1alpha1/consumer_types.go
index ec5c7d83c..92d17daca 100644
--- a/control-plane/pkg/apis/internals/kafka/eventing/v1alpha1/consumer_types.go
+++ b/control-plane/pkg/apis/internals/kafka/eventing/v1alpha1/consumer_types.go
@@ -30,6 +30,10 @@ import (
 	"knative.dev/eventing-kafka-broker/control-plane/pkg/apis/internals/kafka/eventing"
 )
 
+const (
+	DispatcherVolumeName = "contract-resources"
+)
+
 // +genclient
 // +genreconciler
 // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
diff --git a/control-plane/pkg/reconciler/base/receiver_condition_set.go b/control-plane/pkg/reconciler/base/receiver_condition_set.go
index df9794c36..1eb85a29b 100644
--- a/control-plane/pkg/reconciler/base/receiver_condition_set.go
+++ b/control-plane/pkg/reconciler/base/receiver_condition_set.go
@@ -219,11 +219,6 @@ func (manager *StatusConditionManager) FailedToUpdateReceiverPodsAnnotation(err
 	return fmt.Errorf("failed to update receiver pods annotation: %w", err)
 }
 
-func (manager *StatusConditionManager) FailedToGetConfig(err error) reconciler.Event {
-
-	return fmt.Errorf("failed to get contract configuration: %w", err)
-}
-
 func (manager *StatusConditionManager) FailedToResolveConfig(err error) reconciler.Event {
 
 	manager.Object.GetConditionSet().Manage(manager.Object.GetStatus()).MarkFalse(
diff --git a/control-plane/pkg/reconciler/broker/broker.go b/control-plane/pkg/reconciler/broker/broker.go
index 08ea153b0..c2bdb9fa9 100644
--- a/control-plane/pkg/reconciler/broker/broker.go
+++ b/control-plane/pkg/reconciler/broker/broker.go
@@ -161,7 +161,7 @@ func (r *Reconciler) reconcileKind(ctx context.Context, broker *eventing.Broker)
 	// Get resource configuration.
 	brokerResource, err := r.reconcilerBrokerResource(ctx, topic, broker, secret, topicConfig)
 	if err != nil {
-		return statusConditionManager.FailedToGetConfig(err)
+		return statusConditionManager.FailedToResolveConfig(err)
 	}
 	coreconfig.SetDeadLetterSinkURIFromEgressConfig(&broker.Status.DeliveryStatus, brokerResource.EgressConfig)
 
diff --git a/control-plane/pkg/reconciler/channel/channel.go b/control-plane/pkg/reconciler/channel/channel.go
index e505ac58d..93a874d70 100644
--- a/control-plane/pkg/reconciler/channel/channel.go
+++ b/control-plane/pkg/reconciler/channel/channel.go
@@ -184,7 +184,7 @@ func (r *Reconciler) reconcileKind(ctx context.Context, channel *messagingv1beta
 	// Get data plane config map.
 	contractConfigMap, err := r.GetOrCreateDataPlaneConfigMap(ctx)
 	if err != nil {
-		return statusConditionManager.FailedToGetConfig(err)
+		return statusConditionManager.FailedToResolveConfig(err)
 	}
 	logger.Debug("Got contract config map")
 
@@ -198,7 +198,7 @@ func (r *Reconciler) reconcileKind(ctx context.Context, channel *messagingv1beta
 	// Get resource configuration
 	channelResource, err := r.getChannelContractResource(ctx, topic, channel, secret, topicConfig)
 	if err != nil {
-		return statusConditionManager.FailedToGetConfig(err)
+		return statusConditionManager.FailedToResolveConfig(err)
 	}
 	coreconfig.SetDeadLetterSinkURIFromEgressConfig(&channel.Status.DeliveryStatus, channelResource.EgressConfig)
 
diff --git a/data-plane/THIRD-PARTY.txt b/data-plane/THIRD-PARTY.txt
index 1aaabe7c3..775825b80 100644
--- a/data-plane/THIRD-PARTY.txt
+++ b/data-plane/THIRD-PARTY.txt
@@ -20,8 +20,8 @@ Lists of 158 third-party dependencies.
      (Apache License, Version 2.0) Guava: Google Core Libraries for Java (com.google.guava:guava:30.1.1-android - https://github.com/google/guava/guava)
      (The Apache Software License, Version 2.0) Guava ListenableFuture only (com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava - https://github.com/google/guava/listenablefuture)
      (The Apache Software License, Version 2.0) J2ObjC Annotations (com.google.j2objc:j2objc-annotations:1.3 - https://github.com/google/j2objc/)
-     (3-Clause BSD License) Protocol Buffers [Core] (com.google.protobuf:protobuf-java:3.19.3 - https://developers.google.com/protocol-buffers/protobuf-java/)
-     (3-Clause BSD License) Protocol Buffers [Util] (com.google.protobuf:protobuf-java-util:3.19.3 - https://developers.google.com/protocol-buffers/protobuf-java-util/)
+     (3-Clause BSD License) Protocol Buffers [Core] (com.google.protobuf:protobuf-java:3.19.4 - https://developers.google.com/protocol-buffers/protobuf-java/)
+     (3-Clause BSD License) Protocol Buffers [Util] (com.google.protobuf:protobuf-java-util:3.19.4 - https://developers.google.com/protocol-buffers/protobuf-java-util/)
      (Apache 2.0) OkHttp Logging Interceptor (com.squareup.okhttp3:logging-interceptor:3.12.12 - https://github.com/square/okhttp/logging-interceptor)
      (Apache 2.0) MockWebServer (com.squareup.okhttp3:mockwebserver:3.12.12 - https://github.com/square/okhttp/mockwebserver)
      (Apache 2.0) OkHttp (com.squareup.okhttp3:okhttp:3.14.9 - https://github.com/square/okhttp/okhttp)
@@ -154,7 +154,7 @@ Lists of 158 third-party dependencies.
      (Apache-2.0) Scala Compiler (org.scala-lang:scala-reflect:2.12.13 - https://www.scala-lang.org/)
      (Apache-2.0) scala-collection-compat (org.scala-lang.modules:scala-collection-compat_2.12:2.3.0 - http://www.scala-lang.org/)
      (Apache-2.0) scala-java8-compat (org.scala-lang.modules:scala-java8-compat_2.12:0.9.1 - http://www.scala-lang.org/)
-     (MIT License) SLF4J API Module (org.slf4j:slf4j-api:1.7.33 - http://www.slf4j.org)
-     (MIT License) SLF4J NOP Binding (org.slf4j:slf4j-nop:1.7.33 - http://www.slf4j.org)
+     (MIT License) SLF4J API Module (org.slf4j:slf4j-api:1.7.35 - http://www.slf4j.org)
+     (MIT License) SLF4J NOP Binding (org.slf4j:slf4j-nop:1.7.35 - http://www.slf4j.org)
      (Apache-2.0) snappy-java (org.xerial.snappy:snappy-java:1.1.8.1 - https://github.com/xerial/snappy-java)
      (Apache License, Version 2.0) SnakeYAML (org.yaml:snakeyaml:1.28 - http://www.snakeyaml.org)
diff --git a/data-plane/pom.xml b/data-plane/pom.xml
index eaddaf405..ee60953fc 100644
--- a/data-plane/pom.xml
+++ b/data-plane/pom.xml
@@ -46,8 +46,8 @@
     <micrometer.version>1.8.2</micrometer.version>
     <opentelemetry.version>1.10.1</opentelemetry.version>
     <jackson.version>2.13.1</jackson.version>
-    <protobuf.version>3.19.3</protobuf.version>
-    <slf4j.version>1.7.33</slf4j.version>
+    <protobuf.version>3.19.4</protobuf.version>
+    <slf4j.version>1.7.35</slf4j.version>
     <ch.qos.logback.version>1.2.10</ch.qos.logback.version>
     <net.logstash.logback.encoder.version>7.0.1</net.logstash.logback.encoder.version>
     <assertj.version>3.22.0</assertj.version>
diff --git a/go.mod b/go.mod
index 378cb5b92..0319af2e3 100644
--- a/go.mod
+++ b/go.mod
@@ -23,9 +23,9 @@ require (
 	k8s.io/apiserver v0.22.5
 	k8s.io/client-go v0.22.5
 	k8s.io/utils v0.0.0-20211208161948-7d6a63dca704
-	knative.dev/eventing v0.29.0
-	knative.dev/eventing-kafka v0.28.1-0.20220126011444-734561d578b9
-	knative.dev/hack v0.0.0-20220118141833-9b2ed8471e30
-	knative.dev/pkg v0.0.0-20220118160532-77555ea48cd4
-	knative.dev/reconciler-test v0.0.0-20220118183433-c8bfbe66bada
+	knative.dev/eventing v0.29.1-0.20220201083031-25bf6fe36dfe
+	knative.dev/eventing-kafka v0.28.1-0.20220201082931-c084e4c42ad3
+	knative.dev/hack v0.0.0-20220201013531-82bfca153560
+	knative.dev/pkg v0.0.0-20220201132031-8681fe2035b9
+	knative.dev/reconciler-test v0.0.0-20220126171745-740e77ebaace
 )
diff --git a/go.sum b/go.sum
index 2860ff725..b8d5bb772 100644
--- a/go.sum
+++ b/go.sum
@@ -1345,17 +1345,26 @@ k8s.io/utils v0.0.0-20210819203725-bdf08cb9a70a/go.mod h1:jPW/WVKK9YHAvNhRxK0md/
 k8s.io/utils v0.0.0-20211208161948-7d6a63dca704 h1:ZKMMxTvduyf5WUtREOqg5LiXaN1KO/+0oOQPRFrClpo=
 k8s.io/utils v0.0.0-20211208161948-7d6a63dca704/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
 knative.dev/control-protocol v0.0.0-20220118185434-ad4ce9e9d455/go.mod h1:xiTC5Qt9GdPuhRknr0Oq744SsUqbkDx0oe04L9a+qYY=
-knative.dev/eventing v0.29.0 h1:+AhcYEuuz37x1op71bknZ/lFgsvuZJl0AKFOOFiH03s=
-knative.dev/eventing v0.29.0/go.mod h1:u5T5NZTDUsLR7yJwp5MDnBnDX5MhywD3yK3Rq+7gTtI=
-knative.dev/eventing-kafka v0.28.1-0.20220126011444-734561d578b9 h1:UCtzXoRZvZf4dXDZ7oKjXny2FLCDqIIZnYQdtu2A3/o=
-knative.dev/eventing-kafka v0.28.1-0.20220126011444-734561d578b9/go.mod h1:Y9+hHdaYCmD46PPOU2pAfWCUXJyIfgJOnkWZwsBAEoU=
-knative.dev/hack v0.0.0-20220118141833-9b2ed8471e30 h1:UkNpCWCMM5C4AeQ8aTrPTuR/6OeARiqk+LEQ6tuMP7c=
+knative.dev/eventing v0.29.1-0.20220128133147-7a44b07f299d/go.mod h1:82rJhzGDSMl1J2HQSdC3Z7foKJO5s5koL3e3S6mSvug=
+knative.dev/eventing v0.29.1-0.20220201083031-25bf6fe36dfe h1:VLVkZaToXNixhY//FZfAr9fAF7jQQVGo64qT/3pJpfk=
+knative.dev/eventing v0.29.1-0.20220201083031-25bf6fe36dfe/go.mod h1:jsc5u3aC+BYmfUR2cRz9jb77krfULStxXkR1EgMUWp0=
+knative.dev/eventing-kafka v0.28.1-0.20220201082931-c084e4c42ad3 h1:BeGfGTTnZ6A1QILh3kPQcoR4CkGOacBAct50BW7iip0=
+knative.dev/eventing-kafka v0.28.1-0.20220201082931-c084e4c42ad3/go.mod h1:bnEFmqZhjVpZbzrChBki4c9HWAqyUnQVK+VPe0wcAqo=
 knative.dev/hack v0.0.0-20220118141833-9b2ed8471e30/go.mod h1:PHt8x8yX5Z9pPquBEfIj0X66f8iWkWfR0S/sarACJrI=
+knative.dev/hack v0.0.0-20220128200847-51a42b2eb63e/go.mod h1:PHt8x8yX5Z9pPquBEfIj0X66f8iWkWfR0S/sarACJrI=
+knative.dev/hack v0.0.0-20220201013531-82bfca153560 h1:JTQwe928hZokY181gjYKeVdxr+s3v95LDkMs7R0fxfE=
+knative.dev/hack v0.0.0-20220201013531-82bfca153560/go.mod h1:PHt8x8yX5Z9pPquBEfIj0X66f8iWkWfR0S/sarACJrI=
 knative.dev/hack/schema v0.0.0-20220118141833-9b2ed8471e30/go.mod h1:ffjwmdcrH5vN3mPhO8RrF2KfNnbHeCE2C60A+2cv3U0=
-knative.dev/pkg v0.0.0-20220118160532-77555ea48cd4 h1:b9aXVrcfM/ajjHE/lGvlJOHZNAR5FF2TOTLWG7eMhzQ=
+knative.dev/hack/schema v0.0.0-20220128200847-51a42b2eb63e/go.mod h1:ffjwmdcrH5vN3mPhO8RrF2KfNnbHeCE2C60A+2cv3U0=
 knative.dev/pkg v0.0.0-20220118160532-77555ea48cd4/go.mod h1:etVT7Tm8pSDf4RKhGk4r7j/hj3dNBpvT7bO6a6wpahs=
-knative.dev/reconciler-test v0.0.0-20220118183433-c8bfbe66bada h1:YSxoVY3Z2GF8QsNrWlJ8qQlJ6pUXKVsX7xkhY6odOXU=
+knative.dev/pkg v0.0.0-20220121092305-3ba5d72e310a/go.mod h1:etVT7Tm8pSDf4RKhGk4r7j/hj3dNBpvT7bO6a6wpahs=
+knative.dev/pkg v0.0.0-20220129160148-ca64d3b3ea8c/go.mod h1:BML2uvSEBhY/cpEsAyWv1+vLy2fxNk8VDJ9fT+D0tj4=
+knative.dev/pkg v0.0.0-20220131144930-f4b57aef0006/go.mod h1:bZMFTPDPHV3wXuiQ09UJuEGYYQnfpe81MCxNvsMAiJk=
+knative.dev/pkg v0.0.0-20220201132031-8681fe2035b9 h1:oxeI9FbCIDxLrG2BAIgguv1tWHOpIiXv56VuKWD2S5Y=
+knative.dev/pkg v0.0.0-20220201132031-8681fe2035b9/go.mod h1:bZMFTPDPHV3wXuiQ09UJuEGYYQnfpe81MCxNvsMAiJk=
 knative.dev/reconciler-test v0.0.0-20220118183433-c8bfbe66bada/go.mod h1:XV4cghzCtdASkfUsfMYSnGfGRyd/naDjy9h7Tnae22g=
+knative.dev/reconciler-test v0.0.0-20220126171745-740e77ebaace h1:ECS0b2WOBhCTm7PHmYeDDXvD5oXVeXGkd93QW33Y3Us=
+knative.dev/reconciler-test v0.0.0-20220126171745-740e77ebaace/go.mod h1:XV4cghzCtdASkfUsfMYSnGfGRyd/naDjy9h7Tnae22g=
 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/hack/release.sh b/hack/release.sh
index a7a7c295f..e6a82d0ac 100755
--- a/hack/release.sh
+++ b/hack/release.sh
@@ -67,6 +67,11 @@ function build_release() {
     "${EVENTING_KAFKA_CHANNEL_ARTIFACT}"
     "${EVENTING_KAFKA_CHANNEL_PROMETHEUS_OPERATOR_ARTIFACT}"
   )
+
+  # ARTIFACTS_TO_PUBLISH has to be a string, not an array.
+  # shellcheck disable=SC2178
+  # shellcheck disable=SC2124
+  export ARTIFACTS_TO_PUBLISH="${ARTIFACTS_TO_PUBLISH[@]}"
 }
 
 main $@
diff --git a/vendor/knative.dev/hack/README.md b/vendor/knative.dev/hack/README.md
index a6a98c784..570f37097 100644
--- a/vendor/knative.dev/hack/README.md
+++ b/vendor/knative.dev/hack/README.md
@@ -167,6 +167,11 @@ This is a helper script for Knative E2E test scripts. To use it:
 1. By default Istio is installed on the cluster via Addon, use
    `--skip-istio-addon` if you choose not to have it preinstalled.
 
+1. By default Google Kubernetes Engine telemetry to Cloud Logging and Monitoring is disabled.
+   This can be enabled by setting `ENABLE_GKE_TELEMETRY` to `true`.
+   
+1. By default Spot Worker nodes are disabled. This can be enabled by setting `ENABLE_PREEMPTIBLE_NODES`
+   to `true`.
 ### Sample end-to-end test script
 
 This script will test that the latest Knative Serving nightly release works. It
diff --git a/vendor/knative.dev/hack/infra-library.sh b/vendor/knative.dev/hack/infra-library.sh
index f87c259d1..a96210e2e 100644
--- a/vendor/knative.dev/hack/infra-library.sh
+++ b/vendor/knative.dev/hack/infra-library.sh
@@ -77,20 +77,6 @@ function dump_cluster_state() {
   echo "***************************************"
 }
 
-# Sets the current user as cluster admin for the given cluster.
-# Parameters: $1 - cluster context name
-function acquire_cluster_admin_role() {
-  if [[ -z "$(kubectl get clusterrolebinding cluster-admin-binding 2> /dev/null)" ]]; then
-    if [[ "$1" =~ ^gke_.* ]]; then
-      kubectl create clusterrolebinding cluster-admin-binding \
-        --clusterrole=cluster-admin --user="$(gcloud config get-value core/account)"
-    else
-      kubectl create clusterrolebinding cluster-admin-binding \
-        --clusterrole=cluster-admin --user="prow"
-    fi
-  fi
-}
-
 # Create a test cluster and run the tests if provided.
 # Parameters: $1 - cluster provider name, e.g. gke
 #             $2 - custom flags supported by kntest
@@ -137,5 +123,15 @@ function create_gke_test_cluster() {
   local -n _custom_flags=$1
   local -n _test_command=$2
 
-  run_kntest kubetest2 gke "${_custom_flags[@]}" --test-command="${_test_command[*]}"
+  # We are disabling logs and metrics on Boskos Clusters by default as they are not used. Manually set ENABLE_GKE_TELEMETRY to true to enable telemetry
+  # and ENABLE_PREEMPTIBLE_NODES to true to create preemptible/spot VMs. VM Preemption is a rare event and shouldn't be distruptive given the fault tolerant nature of our tests.
+  local extra_gcloud_flags=""
+  if [[ "$ENABLE_GKE_TELEMETRY" != "true" ]]; then
+    extra_gcloud_flags="${extra_gcloud_flags} --logging=NONE --monitoring=NONE"
+  fi
+
+  if [[ "$ENABLE_PREEMPTIBLE_NODES" == "true" ]]; then
+    extra_gcloud_flags="${extra_gcloud_flags} --preemptible"
+  fi
+  run_kntest kubetest2 gke "${_custom_flags[@]}" --test-command="${_test_command[*]}" --extra-gcloud-flags="${extra_gcloud_flags}"
 }
diff --git a/vendor/knative.dev/hack/shell/project.go b/vendor/knative.dev/hack/shell/project.go
index f4cd1681a..a6df6c4a6 100644
--- a/vendor/knative.dev/hack/shell/project.go
+++ b/vendor/knative.dev/hack/shell/project.go
@@ -37,11 +37,12 @@ var (
 // NewProjectLocation creates a ProjectLocation that is used to calculate
 // relative paths within the project.
 func NewProjectLocation(pathToRoot string) (ProjectLocation, error) {
-	_, filename, _, ok := runtime.Caller(1)
+	pc, filename, _, ok := runtime.Caller(1)
 	if !ok {
 		return nil, ErrCantGetCaller
 	}
-	err := ensureIsValid(filename)
+	funcName := runtime.FuncForPC(pc).Name()
+	err := isCallsiteAllowed(funcName)
 	if err != nil {
 		return nil, err
 	}
@@ -64,17 +65,17 @@ type callerLocation struct {
 	pathToRoot string
 }
 
-func ensureIsValid(filename string) error {
+func isCallsiteAllowed(funcName string) error {
 	validPaths := []string{
-		"knative.+/test/upgrade/",
-		"knative(:?\\.dev/|-)hack/shell/",
+		"knative.+/test/upgrade",
+		"knative(:?\\.dev/|-)hack/shell",
 	}
 	for _, validPath := range validPaths {
 		r := regexp.MustCompile(validPath)
-		if loc := r.FindStringIndex(filename); loc != nil {
+		if loc := r.FindStringIndex(funcName); loc != nil {
 			return nil
 		}
 	}
 	return fmt.Errorf("%w, tried using from: %s",
-		ErrCallerNotAllowed, filename)
+		ErrCallerNotAllowed, funcName)
 }
diff --git a/vendor/knative.dev/pkg/resolver/addressable_resolver.go b/vendor/knative.dev/pkg/resolver/addressable_resolver.go
index 0e50a2578..d6995947a 100644
--- a/vendor/knative.dev/pkg/resolver/addressable_resolver.go
+++ b/vendor/knative.dev/pkg/resolver/addressable_resolver.go
@@ -23,12 +23,14 @@ import (
 
 	"k8s.io/apimachinery/pkg/runtime/schema"
 	"k8s.io/client-go/tools/cache"
+
 	"knative.dev/pkg/client/injection/ducks/duck/v1/addressable"
 	"knative.dev/pkg/controller"
 
 	corev1 "k8s.io/api/core/v1"
 	apierrs "k8s.io/apimachinery/pkg/api/errors"
 	"k8s.io/apimachinery/pkg/api/meta"
+
 	"knative.dev/pkg/apis"
 	pkgapisduck "knative.dev/pkg/apis/duck"
 	duckv1 "knative.dev/pkg/apis/duck/v1"
@@ -169,17 +171,17 @@ func (r *URIResolver) URIFromObjectReference(ctx context.Context, ref *corev1.Ob
 		Namespace:  ref.Namespace,
 		Name:       ref.Name,
 	}, parent); err != nil {
-		return nil, apierrs.NewNotFound(gvr.GroupResource(), ref.Name)
+		return nil, fmt.Errorf("failed to track reference %s %s/%s: %w", gvr.String(), ref.Namespace, ref.Name, err)
 	}
 
 	lister, err := r.listerFactory(gvr)
 	if err != nil {
-		return nil, apierrs.NewNotFound(gvr.GroupResource(), "Lister")
+		return nil, fmt.Errorf("failed to get lister for %s: %w", gvr.String(), err)
 	}
 
 	obj, err := lister.ByNamespace(ref.Namespace).Get(ref.Name)
 	if err != nil {
-		return nil, apierrs.NewNotFound(gvr.GroupResource(), ref.Name)
+		return nil, fmt.Errorf("failed to get object %s/%s: %w", ref.Namespace, ref.Name, err)
 	}
 
 	// K8s Services are special cased. They can be called, even though they do not satisfy the
diff --git a/vendor/knative.dev/pkg/webhook/resourcesemantics/defaulting/user_info.go b/vendor/knative.dev/pkg/webhook/resourcesemantics/defaulting/user_info.go
index fcd97a456..f206588e4 100644
--- a/vendor/knative.dev/pkg/webhook/resourcesemantics/defaulting/user_info.go
+++ b/vendor/knative.dev/pkg/webhook/resourcesemantics/defaulting/user_info.go
@@ -27,6 +27,11 @@ import (
 	"knative.dev/pkg/apis"
 )
 
+var (
+	emptyGroupUpdaterAnnotation = apis.UpdaterAnnotationSuffix[1:]
+	emptyGroupCreatorAnnotation = apis.CreatorAnnotationSuffix[1:]
+)
+
 // setUserInfoAnnotations sets creator and updater annotations on a resource.
 func setUserInfoAnnotations(ctx context.Context, resource apis.HasSpec, groupName string) {
 	if ui := apis.GetUserInfo(ctx); ui != nil {
@@ -41,15 +46,22 @@ func setUserInfoAnnotations(ctx context.Context, resource apis.HasSpec, groupNam
 			objectMetaAccessor.GetObjectMeta().SetAnnotations(annotations)
 		}
 
+		updaterAnnotation := emptyGroupUpdaterAnnotation
+		creatorAnnotation := emptyGroupCreatorAnnotation
+		if groupName != "" {
+			updaterAnnotation = groupName + apis.UpdaterAnnotationSuffix
+			creatorAnnotation = groupName + apis.CreatorAnnotationSuffix
+		}
+
 		if apis.IsInUpdate(ctx) {
 			old := apis.GetBaseline(ctx).(apis.HasSpec)
 			if equality.Semantic.DeepEqual(old.GetUntypedSpec(), resource.GetUntypedSpec()) {
 				return
 			}
-			annotations[groupName+apis.UpdaterAnnotationSuffix] = ui.Username
+			annotations[updaterAnnotation] = ui.Username
 		} else {
-			annotations[groupName+apis.CreatorAnnotationSuffix] = ui.Username
-			annotations[groupName+apis.UpdaterAnnotationSuffix] = ui.Username
+			annotations[creatorAnnotation] = ui.Username
+			annotations[updaterAnnotation] = ui.Username
 		}
 		objectMetaAccessor.GetObjectMeta().SetAnnotations(annotations)
 	}
diff --git a/vendor/modules.txt b/vendor/modules.txt
index 694d7d209..3de10ee32 100644
--- a/vendor/modules.txt
+++ b/vendor/modules.txt
@@ -1124,7 +1124,7 @@ k8s.io/utils/buffer
 k8s.io/utils/integer
 k8s.io/utils/pointer
 k8s.io/utils/trace
-# knative.dev/eventing v0.29.0
+# knative.dev/eventing v0.29.1-0.20220201083031-25bf6fe36dfe
 ## explicit
 knative.dev/eventing/pkg/apis/config
 knative.dev/eventing/pkg/apis/duck
@@ -1272,7 +1272,7 @@ knative.dev/eventing/test/upgrade/prober/wathola/fetcher
 knative.dev/eventing/test/upgrade/prober/wathola/forwarder
 knative.dev/eventing/test/upgrade/prober/wathola/receiver
 knative.dev/eventing/test/upgrade/prober/wathola/sender
-# knative.dev/eventing-kafka v0.28.1-0.20220126011444-734561d578b9
+# knative.dev/eventing-kafka v0.28.1-0.20220201082931-c084e4c42ad3
 ## explicit
 knative.dev/eventing-kafka/pkg/apis/bindings
 knative.dev/eventing-kafka/pkg/apis/bindings/v1beta1
@@ -1333,11 +1333,11 @@ knative.dev/eventing-kafka/test/rekt/features/kafkachannel
 knative.dev/eventing-kafka/test/rekt/resources/kafkachannel
 knative.dev/eventing-kafka/test/rekt/resources/resetoffset
 knative.dev/eventing-kafka/test/upgrade/continual
-# knative.dev/hack v0.0.0-20220118141833-9b2ed8471e30
+# knative.dev/hack v0.0.0-20220201013531-82bfca153560
 ## explicit
 knative.dev/hack
 knative.dev/hack/shell
-# knative.dev/pkg v0.0.0-20220118160532-77555ea48cd4
+# knative.dev/pkg v0.0.0-20220201132031-8681fe2035b9
 ## explicit
 knative.dev/pkg/apis
 knative.dev/pkg/apis/duck
@@ -1436,7 +1436,7 @@ knative.dev/pkg/webhook/json
 knative.dev/pkg/webhook/resourcesemantics
 knative.dev/pkg/webhook/resourcesemantics/defaulting
 knative.dev/pkg/webhook/resourcesemantics/validation
-# knative.dev/reconciler-test v0.0.0-20220118183433-c8bfbe66bada
+# knative.dev/reconciler-test v0.0.0-20220126171745-740e77ebaace
 ## explicit
 knative.dev/reconciler-test/cmd/eventshub
 knative.dev/reconciler-test/pkg/environment


Test patch:
diff --git a/.github/workflows/kind-e2e.yaml b/.github/workflows/kind-e2e.yaml
index ba6bfc419..86c037c7d 100644
--- a/.github/workflows/kind-e2e.yaml
+++ b/.github/workflows/kind-e2e.yaml
@@ -27,6 +27,8 @@ jobs:
         test-suite:
           - ./test/e2e
           - ./test/e2e_new
+          - ./test/e2e_channel
+          - ./test/e2e_new_channel
 
         # Map between K8s and KinD versions.
         # This is attempting to make it a bit clearer what's being tested.
@@ -38,7 +40,7 @@ jobs:
           - k8s-version: v1.22.2
             kind-version: v0.11.1
             kind-image-sha: sha256:f638a08c1f68fe2a99e724ace6df233a546eaf6713019a0b310130a4f91ebe7f
-          - test-suite: ./test/e2e
+          - test-suite: ./test/e2e_channel
             extra-test-flags: -channels=messaging.knative.dev/v1beta1:KafkaChannel
 
     env:
@@ -123,7 +125,7 @@ jobs:
           export CLUSTER_DOMAIN=${CLUSTER_SUFFIX}
 
           # Run the tests tagged as e2e on the KinD cluster.
-          go test -race -count=1 -timeout=1h -v -short -tags=e2e \
+          go test -race -count=1 -timeout=1h -v -short -tags=e2e,cloudevents \
              ${{ matrix.test-suite }} ${{ matrix.extra-test-flags }}
 
       - name: Collect system diagnostics
diff --git a/control-plane/pkg/apis/core/pod_defaulting_test.go b/control-plane/pkg/apis/core/pod_defaulting_test.go
new file mode 100644
index 000000000..ce051a5b7
--- /dev/null
+++ b/control-plane/pkg/apis/core/pod_defaulting_test.go
@@ -0,0 +1,501 @@
+/*
+ * Copyright 2022 The Knative Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package core
+
+import (
+	"context"
+	"testing"
+
+	"github.com/google/go-cmp/cmp"
+	"github.com/google/uuid"
+	"github.com/stretchr/testify/require"
+	corev1 "k8s.io/api/core/v1"
+	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+	"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
+	"k8s.io/apimachinery/pkg/runtime"
+	"knative.dev/pkg/system"
+)
+
+func TestPodDefaulting(t *testing.T) {
+	t.Setenv("SYSTEM_NAMESPACE", "knative-eventing")
+
+	id := uuid.New()
+
+	tests := []struct {
+		name    string
+		ctx     context.Context
+		given   corev1.Pod
+		want    corev1.Pod
+		wantErr bool
+	}{
+		{
+			name: "add volume source",
+			ctx:  context.Background(),
+			given: corev1.Pod{
+				ObjectMeta: metav1.ObjectMeta{
+					Name:      "kafka-source-dispatcher",
+					Namespace: system.Namespace(),
+				},
+				Spec: corev1.PodSpec{
+					Containers: []corev1.Container{
+						{
+							Name: "dispatcher",
+							VolumeMounts: []corev1.VolumeMount{
+								{
+									Name:      "contract-resources",
+									ReadOnly:  false,
+									MountPath: "/etc/contract/contract-resources",
+								},
+							},
+						},
+					},
+				},
+			},
+			want: corev1.Pod{
+				ObjectMeta: metav1.ObjectMeta{
+					Name:      "kafka-source-dispatcher",
+					Namespace: system.Namespace(),
+				},
+				Spec: corev1.PodSpec{
+					Containers: []corev1.Container{
+						{
+							Name: "dispatcher",
+							VolumeMounts: []corev1.VolumeMount{
+								{
+									Name:      "contract-resources",
+									ReadOnly:  false,
+									MountPath: "/etc/contract/contract-resources",
+								},
+							},
+						},
+					},
+					Volumes: []corev1.Volume{
+						{
+							Name: "contract-resources",
+							VolumeSource: corev1.VolumeSource{
+								ConfigMap: &corev1.ConfigMapVolumeSource{
+									LocalObjectReference: corev1.LocalObjectReference{Name: "kafka-source-dispatcher"},
+								},
+							},
+						},
+					},
+				},
+			},
+			wantErr: false,
+		},
+		{
+			name: "add volume source, preserving another volume",
+			ctx:  context.Background(),
+			given: corev1.Pod{
+				ObjectMeta: metav1.ObjectMeta{
+					Name:      "kafka-source-dispatcher",
+					Namespace: system.Namespace(),
+				},
+				Spec: corev1.PodSpec{
+					Containers: []corev1.Container{
+						{
+							Name: "dispatcher",
+							VolumeMounts: []corev1.VolumeMount{
+								{
+									Name:      "contract-resources",
+									ReadOnly:  false,
+									MountPath: "/etc/contract/contract-resources",
+								},
+							},
+						},
+					},
+					Volumes: []corev1.Volume{
+						{
+							Name: "contract-resources-2",
+							VolumeSource: corev1.VolumeSource{
+								ConfigMap: &corev1.ConfigMapVolumeSource{
+									LocalObjectReference: corev1.LocalObjectReference{Name: "kafka-source-dispatcher-2"},
+								},
+							},
+						},
+					},
+				},
+			},
+			want: corev1.Pod{
+				ObjectMeta: metav1.ObjectMeta{
+					Name:      "kafka-source-dispatcher",
+					Namespace: system.Namespace(),
+				},
+				Spec: corev1.PodSpec{
+					Containers: []corev1.Container{
+						{
+							Name: "dispatcher",
+							VolumeMounts: []corev1.VolumeMount{
+								{
+									Name:      "contract-resources",
+									ReadOnly:  false,
+									MountPath: "/etc/contract/contract-resources",
+								},
+							},
+						},
+					},
+					Volumes: []corev1.Volume{
+						{
+							Name: "contract-resources-2",
+							VolumeSource: corev1.VolumeSource{
+								ConfigMap: &corev1.ConfigMapVolumeSource{
+									LocalObjectReference: corev1.LocalObjectReference{Name: "kafka-source-dispatcher-2"},
+								},
+							},
+						},
+						{
+							Name: "contract-resources",
+							VolumeSource: corev1.VolumeSource{
+								ConfigMap: &corev1.ConfigMapVolumeSource{
+									LocalObjectReference: corev1.LocalObjectReference{Name: "kafka-source-dispatcher"},
+								},
+							},
+						},
+					},
+				},
+			},
+			wantErr: false,
+		},
+		{
+			name: "replace volume source, preserving another volume",
+			ctx:  context.Background(),
+			given: corev1.Pod{
+				ObjectMeta: metav1.ObjectMeta{
+					Name:      "kafka-source-dispatcher",
+					Namespace: system.Namespace(),
+				},
+				Spec: corev1.PodSpec{
+					Containers: []corev1.Container{
+						{
+							Name: "dispatcher",
+							VolumeMounts: []corev1.VolumeMount{
+								{
+									Name:      "contract-resources",
+									ReadOnly:  false,
+									MountPath: "/etc/contract/contract-resources",
+								},
+							},
+						},
+					},
+					Volumes: []corev1.Volume{
+						{
+							Name: "contract-resources-2",
+							VolumeSource: corev1.VolumeSource{
+								ConfigMap: &corev1.ConfigMapVolumeSource{
+									LocalObjectReference: corev1.LocalObjectReference{Name: "kafka-source-dispatcher-2"},
+								},
+							},
+						},
+						{
+							Name: "contract-resources",
+							VolumeSource: corev1.VolumeSource{
+								ConfigMap: &corev1.ConfigMapVolumeSource{
+									LocalObjectReference: corev1.LocalObjectReference{Name: id.String() + "-aaa"},
+								},
+							},
+						},
+					},
+				},
+			},
+			want: corev1.Pod{
+				ObjectMeta: metav1.ObjectMeta{
+					Name:      "kafka-source-dispatcher",
+					Namespace: system.Namespace(),
+				},
+				Spec: corev1.PodSpec{
+					Containers: []corev1.Container{
+						{
+							Name: "dispatcher",
+							VolumeMounts: []corev1.VolumeMount{
+								{
+									Name:      "contract-resources",
+									ReadOnly:  false,
+									MountPath: "/etc/contract/contract-resources",
+								},
+							},
+						},
+					},
+					Volumes: []corev1.Volume{
+						{
+							Name: "contract-resources-2",
+							VolumeSource: corev1.VolumeSource{
+								ConfigMap: &corev1.ConfigMapVolumeSource{
+									LocalObjectReference: corev1.LocalObjectReference{Name: "kafka-source-dispatcher-2"},
+								},
+							},
+						},
+						{
+							Name: "contract-resources",
+							VolumeSource: corev1.VolumeSource{
+								ConfigMap: &corev1.ConfigMapVolumeSource{
+									LocalObjectReference: corev1.LocalObjectReference{Name: "kafka-source-dispatcher"},
+								},
+							},
+						},
+					},
+				},
+			},
+			wantErr: false,
+		},
+		{
+			name: "no changes to volume source, preserving another volume",
+			ctx:  context.Background(),
+			given: corev1.Pod{
+				ObjectMeta: metav1.ObjectMeta{
+					Name:      "kafka-source-dispatcher",
+					Namespace: system.Namespace(),
+				},
+				Spec: corev1.PodSpec{
+					Containers: []corev1.Container{
+						{
+							Name: "dispatcher",
+							VolumeMounts: []corev1.VolumeMount{
+								{
+									Name:      "contract-resources",
+									ReadOnly:  false,
+									MountPath: "/etc/contract/contract-resources",
+								},
+							},
+						},
+					},
+					Volumes: []corev1.Volume{
+						{
+							Name: "contract-resources-2",
+							VolumeSource: corev1.VolumeSource{
+								ConfigMap: &corev1.ConfigMapVolumeSource{
+									LocalObjectReference: corev1.LocalObjectReference{Name: "kafka-source-dispatcher-2"},
+								},
+							},
+						},
+						{
+							Name: "contract-resources",
+							VolumeSource: corev1.VolumeSource{
+								ConfigMap: &corev1.ConfigMapVolumeSource{
+									LocalObjectReference: corev1.LocalObjectReference{Name: "kafka-source-dispatcher"},
+								},
+							},
+						},
+					},
+				},
+			},
+			want: corev1.Pod{
+				ObjectMeta: metav1.ObjectMeta{
+					Name:      "kafka-source-dispatcher",
+					Namespace: system.Namespace(),
+				},
+				Spec: corev1.PodSpec{
+					Containers: []corev1.Container{
+						{
+							Name: "dispatcher",
+							VolumeMounts: []corev1.VolumeMount{
+								{
+									Name:      "contract-resources",
+									ReadOnly:  false,
+									MountPath: "/etc/contract/contract-resources",
+								},
+							},
+						},
+					},
+					Volumes: []corev1.Volume{
+						{
+							Name: "contract-resources-2",
+							VolumeSource: corev1.VolumeSource{
+								ConfigMap: &corev1.ConfigMapVolumeSource{
+									LocalObjectReference: corev1.LocalObjectReference{Name: "kafka-source-dispatcher-2"},
+								},
+							},
+						},
+						{
+							Name: "contract-resources",
+							VolumeSource: corev1.VolumeSource{
+								ConfigMap: &corev1.ConfigMapVolumeSource{
+									LocalObjectReference: corev1.LocalObjectReference{Name: "kafka-source-dispatcher"},
+								},
+							},
+						},
+					},
+				},
+			},
+			wantErr: false,
+		},
+		{
+			name: "no namespace, no changes",
+			ctx:  context.Background(),
+			given: corev1.Pod{
+				ObjectMeta: metav1.ObjectMeta{Name: "kafka-source-dispatcher"},
+				Spec: corev1.PodSpec{
+					Containers: []corev1.Container{
+						{
+							Name: "dispatcher",
+							VolumeMounts: []corev1.VolumeMount{
+								{
+									Name:      "contract-resources",
+									ReadOnly:  false,
+									MountPath: "/etc/contract/contract-resources",
+								},
+							},
+						},
+					},
+					Volumes: []corev1.Volume{
+						{
+							Name: "contract-resources-2",
+							VolumeSource: corev1.VolumeSource{
+								ConfigMap: &corev1.ConfigMapVolumeSource{
+									LocalObjectReference: corev1.LocalObjectReference{Name: "kafka-source-dispatcher-2"},
+								},
+							},
+						},
+						{
+							Name: "contract-resources",
+							VolumeSource: corev1.VolumeSource{
+								ConfigMap: &corev1.ConfigMapVolumeSource{
+									LocalObjectReference: corev1.LocalObjectReference{Name: "kafka-source-dispatcher"},
+								},
+							},
+						},
+					},
+				},
+			},
+			want: corev1.Pod{
+				ObjectMeta: metav1.ObjectMeta{Name: "kafka-source-dispatcher"},
+				Spec: corev1.PodSpec{
+					Containers: []corev1.Container{
+						{
+							Name: "dispatcher",
+							VolumeMounts: []corev1.VolumeMount{
+								{
+									Name:      "contract-resources",
+									ReadOnly:  false,
+									MountPath: "/etc/contract/contract-resources",
+								},
+							},
+						},
+					},
+					Volumes: []corev1.Volume{
+						{
+							Name: "contract-resources-2",
+							VolumeSource: corev1.VolumeSource{
+								ConfigMap: &corev1.ConfigMapVolumeSource{
+									LocalObjectReference: corev1.LocalObjectReference{Name: "kafka-source-dispatcher-2"},
+								},
+							},
+						},
+						{
+							Name: "contract-resources",
+							VolumeSource: corev1.VolumeSource{
+								ConfigMap: &corev1.ConfigMapVolumeSource{
+									LocalObjectReference: corev1.LocalObjectReference{Name: "kafka-source-dispatcher"},
+								},
+							},
+						},
+					},
+				},
+			},
+			wantErr: false,
+		},
+		{
+			name: "No name, use generator",
+			ctx:  context.Background(),
+			given: corev1.Pod{
+				ObjectMeta: metav1.ObjectMeta{Namespace: system.Namespace()},
+				Spec: corev1.PodSpec{
+					Containers: []corev1.Container{
+						{
+							Name: "dispatcher",
+							VolumeMounts: []corev1.VolumeMount{
+								{
+									Name:      "contract-resources",
+									ReadOnly:  false,
+									MountPath: "/etc/contract/contract-resources",
+								},
+							},
+						},
+					},
+					Volumes: []corev1.Volume{
+						{
+							Name: "contract-resources-2",
+							VolumeSource: corev1.VolumeSource{
+								ConfigMap: &corev1.ConfigMapVolumeSource{
+									LocalObjectReference: corev1.LocalObjectReference{Name: "kafka-source-dispatcher-2"},
+								},
+							},
+						},
+					},
+				},
+			},
+			want: corev1.Pod{
+				ObjectMeta: metav1.ObjectMeta{Namespace: system.Namespace()},
+				Spec: corev1.PodSpec{
+					Containers: []corev1.Container{
+						{
+							Name: "dispatcher",
+							VolumeMounts: []corev1.VolumeMount{
+								{
+									Name:      "contract-resources",
+									ReadOnly:  false,
+									MountPath: "/etc/contract/contract-resources",
+								},
+							},
+						},
+					},
+					Volumes: []corev1.Volume{
+						{
+							Name: "contract-resources-2",
+							VolumeSource: corev1.VolumeSource{
+								ConfigMap: &corev1.ConfigMapVolumeSource{
+									LocalObjectReference: corev1.LocalObjectReference{Name: "kafka-source-dispatcher-2"},
+								},
+							},
+						},
+						{
+							Name: "contract-resources",
+							VolumeSource: corev1.VolumeSource{
+								ConfigMap: &corev1.ConfigMapVolumeSource{
+									LocalObjectReference: corev1.LocalObjectReference{Name: id.String()},
+								},
+							},
+						},
+					},
+				},
+			},
+			wantErr: false,
+		},
+	}
+
+	var generator generatorFunc = func(*unstructured.Unstructured) uuid.UUID { return id }
+
+	for _, tt := range tests {
+		t.Run(tt.name, func(t *testing.T) {
+
+			given, err := runtime.DefaultUnstructuredConverter.ToUnstructured(&tt.given)
+			require.Nil(t, err)
+
+			unstr := &unstructured.Unstructured{Object: given}
+			if err := podDefaultingCallback(generator)(tt.ctx, unstr); (err != nil) != tt.wantErr {
+				t.Errorf("podDefaultingCallback() error = %v, wantErr %v", err, tt.wantErr)
+			}
+
+			got := corev1.Pod{}
+			err = runtime.DefaultUnstructuredConverter.FromUnstructured(unstr.UnstructuredContent(), &got)
+			require.Nil(t, err)
+
+			if diff := cmp.Diff(tt.want, got); diff != "" {
+				t.Error("(-want,+got)", diff)
+			}
+		})
+	}
+}
diff --git a/control-plane/pkg/reconciler/broker/broker_test.go b/control-plane/pkg/reconciler/broker/broker_test.go
index 93dad84b3..8f9bc3b38 100644
--- a/control-plane/pkg/reconciler/broker/broker_test.go
+++ b/control-plane/pkg/reconciler/broker/broker_test.go
@@ -979,7 +979,7 @@ func brokerReconciliation(t *testing.T, format string, env config.Env) {
 						},
 						reconcilertesting.WithInitBrokerConditions,
 						StatusBrokerDataPlaneAvailable,
-						StatusBrokerConfigParsed,
+						StatusBrokerConfigNotParsed("failed to resolve Spec.Delivery.DeadLetterSink: destination missing Ref and URI, expected at least one"),
 						StatusBrokerTopicReady,
 					),
 				},
diff --git a/control-plane/pkg/reconciler/source/source_test.go b/control-plane/pkg/reconciler/source/source_test.go
index b3736ca3a..1220f782a 100644
--- a/control-plane/pkg/reconciler/source/source_test.go
+++ b/control-plane/pkg/reconciler/source/source_test.go
@@ -478,7 +478,7 @@ func TestReconcileKind(t *testing.T) {
 						StatusTopicReadyWithName(strings.Join(SourceTopics, ", ")),
 						StatusDataPlaneAvailable,
 						StatusInitialOffsetsCommitted,
-						StatusSourceSinkNotResolved("failed to resolve destination: services \"test-service\" not found"),
+						StatusSourceSinkNotResolved("failed to resolve destination: failed to get object test-service-namespace/test-service: services \"test-service\" not found"),
 					),
 				},
 			},
@@ -487,7 +487,7 @@ func TestReconcileKind(t *testing.T) {
 			},
 			WantEvents: []string{
 				finalizerUpdatedEvent,
-				"Warning InternalError failed to resolve sink: failed to resolve destination: services \"test-service\" not found",
+				"Warning InternalError failed to resolve sink: failed to resolve destination: failed to get object test-service-namespace/test-service: services \"test-service\" not found",
 			},
 			WantErr: true,
 		},
diff --git a/test/e2e-tests.sh b/test/e2e-tests.sh
index d9a36da09..eeedc53ae 100755
--- a/test/e2e-tests.sh
+++ b/test/e2e-tests.sh
@@ -21,9 +21,11 @@ header "Running tests"
 
 export_logs_continuously
 
-go_test_e2e -timeout=1h ./test/e2e/... -channels=messaging.knative.dev/v1beta1:KafkaChannel || fail_test "E2E suite failed"
+go_test_e2e -timeout=1h ./test/e2e/... || fail_test "E2E suite failed"
 
-go_test_e2e -tags=deletecm ./test/e2e/... -channels=messaging.knative.dev/v1beta1:KafkaChannel || fail_test "E2E (deletecm) suite failed"
+go_test_e2e -timeout=1h ./test/e2e_channel/... -channels=messaging.knative.dev/v1beta1:KafkaChannel || fail_test "E2E suite (KafkaChannel) failed"
+
+go_test_e2e -tags=deletecm ./test/e2e/... || fail_test "E2E (deletecm) suite failed"
 
 if ! ${LOCAL_DEVELOPMENT}; then
   go_test_e2e -tags=sacura -timeout=40m ./test/e2e/... || fail_test "E2E (sacura) suite failed"
diff --git a/test/e2e/conformance/main_test.go b/test/e2e/conformance/main_test.go
index 2b7c1ca53..b5daffbf5 100644
--- a/test/e2e/conformance/main_test.go
+++ b/test/e2e/conformance/main_test.go
@@ -24,24 +24,14 @@ import (
 	"os"
 	"testing"
 
-	"knative.dev/eventing-kafka/test"
-	eventingTest "knative.dev/eventing/test"
 	testlib "knative.dev/eventing/test/lib"
 	"knative.dev/pkg/system"
 	"knative.dev/pkg/test/zipkin"
 )
 
-var channelTestRunner testlib.ComponentsTestRunner
-
 func TestMain(m *testing.M) {
 
 	os.Exit(func() int {
-		eventingTest.InitializeEventingFlags()
-		channelTestRunner = testlib.ComponentsTestRunner{
-			ComponentFeatureMap: test.ChannelFeatureMap,
-			ComponentsToTest:    eventingTest.EventingFlags.Channels,
-		}
-
 		// Any tests may SetupZipkinTracing, it will only actually be done once. This should be the ONLY
 		// place that cleans it up. If an individual test calls this instead, then it will break other
 		// tests that need the tracing in place.
diff --git a/test/e2e/main_test.go b/test/e2e/main_test.go
index 76196aceb..d8d336e83 100644
--- a/test/e2e/main_test.go
+++ b/test/e2e/main_test.go
@@ -23,21 +23,11 @@ import (
 	"os"
 	"testing"
 
-	"knative.dev/eventing-kafka/test"
-	eventingTest "knative.dev/eventing/test"
 	testlib "knative.dev/eventing/test/lib"
 	"knative.dev/pkg/system"
 )
 
-var channelTestRunner testlib.ComponentsTestRunner
-
 func TestMain(m *testing.M) {
-
-	eventingTest.InitializeEventingFlags()
-	channelTestRunner = testlib.ComponentsTestRunner{
-		ComponentFeatureMap: test.ChannelFeatureMap,
-		ComponentsToTest:    eventingTest.EventingFlags.Channels,
-	}
 	os.Exit(func() int {
 		defer testlib.ExportLogs(testlib.SystemLogsDir, system.Namespace())
 
diff --git a/test/e2e/channel_event_transformation_test.go b/test/e2e_channel/channel_event_transformation_test.go
similarity index 97%
rename from test/e2e/channel_event_transformation_test.go
rename to test/e2e_channel/channel_event_transformation_test.go
index 07e3d9d8f..be6fb75db 100644
--- a/test/e2e/channel_event_transformation_test.go
+++ b/test/e2e_channel/channel_event_transformation_test.go
@@ -17,7 +17,7 @@
  * limitations under the License.
  */
 
-package e2e
+package e2e_channel
 
 import (
 	"context"
diff --git a/test/e2e/channel_single_event_test.go b/test/e2e_channel/channel_single_event_test.go
similarity index 98%
rename from test/e2e/channel_single_event_test.go
rename to test/e2e_channel/channel_single_event_test.go
index 141752a2a..262c5d2a5 100644
--- a/test/e2e/channel_single_event_test.go
+++ b/test/e2e_channel/channel_single_event_test.go
@@ -17,7 +17,7 @@
  * limitations under the License.
  */
 
-package e2e
+package e2e_channel
 
 import (
 	"context"
diff --git a/test/e2e/conformance/channel_addressable_resolver_cluster_role_test.go b/test/e2e_channel/conformance/channel_addressable_resolver_cluster_role_test.go
similarity index 100%
rename from test/e2e/conformance/channel_addressable_resolver_cluster_role_test.go
rename to test/e2e_channel/conformance/channel_addressable_resolver_cluster_role_test.go
diff --git a/test/e2e/conformance/channel_channelable_manipulator_cluster_role_test.go b/test/e2e_channel/conformance/channel_channelable_manipulator_cluster_role_test.go
similarity index 100%
rename from test/e2e/conformance/channel_channelable_manipulator_cluster_role_test.go
rename to test/e2e_channel/conformance/channel_channelable_manipulator_cluster_role_test.go
diff --git a/test/e2e/conformance/channel_crd_metadata_test.go b/test/e2e_channel/conformance/channel_crd_metadata_test.go
similarity index 100%
rename from test/e2e/conformance/channel_crd_metadata_test.go
rename to test/e2e_channel/conformance/channel_crd_metadata_test.go
diff --git a/test/e2e/conformance/channel_crd_name_test.go b/test/e2e_channel/conformance/channel_crd_name_test.go
similarity index 100%
rename from test/e2e/conformance/channel_crd_name_test.go
rename to test/e2e_channel/conformance/channel_crd_name_test.go
diff --git a/test/e2e/conformance/channel_spec_test.go b/test/e2e_channel/conformance/channel_spec_test.go
similarity index 100%
rename from test/e2e/conformance/channel_spec_test.go
rename to test/e2e_channel/conformance/channel_spec_test.go
diff --git a/test/e2e/conformance/channel_status_subscriber_test.go b/test/e2e_channel/conformance/channel_status_subscriber_test.go
similarity index 100%
rename from test/e2e/conformance/channel_status_subscriber_test.go
rename to test/e2e_channel/conformance/channel_status_subscriber_test.go
diff --git a/test/e2e/conformance/channel_status_test.go b/test/e2e_channel/conformance/channel_status_test.go
similarity index 100%
rename from test/e2e/conformance/channel_status_test.go
rename to test/e2e_channel/conformance/channel_status_test.go
diff --git a/test/e2e/conformance/channel_tracing_test.go b/test/e2e_channel/conformance/channel_tracing_test.go
similarity index 100%
rename from test/e2e/conformance/channel_tracing_test.go
rename to test/e2e_channel/conformance/channel_tracing_test.go
diff --git a/test/e2e_channel/conformance/main_test.go b/test/e2e_channel/conformance/main_test.go
new file mode 100644
index 000000000..2b7c1ca53
--- /dev/null
+++ b/test/e2e_channel/conformance/main_test.go
@@ -0,0 +1,53 @@
+//go:build e2e
+// +build e2e
+
+/*
+ * Copyright 2020 The Knative Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package conformance
+
+import (
+	"log"
+	"os"
+	"testing"
+
+	"knative.dev/eventing-kafka/test"
+	eventingTest "knative.dev/eventing/test"
+	testlib "knative.dev/eventing/test/lib"
+	"knative.dev/pkg/system"
+	"knative.dev/pkg/test/zipkin"
+)
+
+var channelTestRunner testlib.ComponentsTestRunner
+
+func TestMain(m *testing.M) {
+
+	os.Exit(func() int {
+		eventingTest.InitializeEventingFlags()
+		channelTestRunner = testlib.ComponentsTestRunner{
+			ComponentFeatureMap: test.ChannelFeatureMap,
+			ComponentsToTest:    eventingTest.EventingFlags.Channels,
+		}
+
+		// Any tests may SetupZipkinTracing, it will only actually be done once. This should be the ONLY
+		// place that cleans it up. If an individual test calls this instead, then it will break other
+		// tests that need the tracing in place.
+		defer zipkin.CleanupZipkinTracingSetup(log.Printf)
+		defer testlib.ExportLogs(testlib.SystemLogsDir, system.Namespace())
+
+		return m.Run()
+	}())
+}
diff --git a/test/e2e_channel/main_test.go b/test/e2e_channel/main_test.go
new file mode 100644
index 000000000..0c67ac791
--- /dev/null
+++ b/test/e2e_channel/main_test.go
@@ -0,0 +1,46 @@
+//go:build e2e
+// +build e2e
+
+/*
+ * Copyright 2020 The Knative Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package e2e_channel
+
+import (
+	"os"
+	"testing"
+
+	"knative.dev/eventing-kafka/test"
+	eventingTest "knative.dev/eventing/test"
+	testlib "knative.dev/eventing/test/lib"
+	"knative.dev/pkg/system"
+)
+
+var channelTestRunner testlib.ComponentsTestRunner
+
+func TestMain(m *testing.M) {
+
+	eventingTest.InitializeEventingFlags()
+	channelTestRunner = testlib.ComponentsTestRunner{
+		ComponentFeatureMap: test.ChannelFeatureMap,
+		ComponentsToTest:    eventingTest.EventingFlags.Channels,
+	}
+	os.Exit(func() int {
+		defer testlib.ExportLogs(testlib.SystemLogsDir, system.Namespace())
+
+		return m.Run()
+	}())
+}
diff --git a/test/e2e_new/main_test.go b/test/e2e_new/main_test.go
index f8c717918..c31e03102 100644
--- a/test/e2e_new/main_test.go
+++ b/test/e2e_new/main_test.go
@@ -24,8 +24,6 @@ import (
 	"os"
 	"testing"
 
-	"knative.dev/eventing/test/rekt/resources/channel_impl"
-
 	// Uncomment the following line to load the gcp plugin (only required to authenticate against GKE clusters).
 	_ "k8s.io/client-go/plugin/pkg/client/auth/gcp"
 
@@ -47,10 +45,6 @@ func init() {
 	// environment.InitFlags registers state and level filter flags.
 	environment.InitFlags(flag.CommandLine)
 
-	// CHANNEL_GROUP_KIND=KafkaChannel.messaging.knative.dev;CHANNEL_VERSION=v1beta1
-	channel_impl.EnvCfg.ChannelGK = "KafkaChannel.messaging.knative.dev"
-	channel_impl.EnvCfg.ChannelV = "v1beta1"
-
 	// Force the broker class to be configured properly
 	broker.EnvCfg.BrokerClass = kafka.BrokerClass
 }
diff --git a/test/e2e_new/kafka_channel_test.go b/test/e2e_new_channel/kafka_channel_test.go
similarity index 99%
rename from test/e2e_new/kafka_channel_test.go
rename to test/e2e_new_channel/kafka_channel_test.go
index 6c9c8f2be..f099c6c73 100644
--- a/test/e2e_new/kafka_channel_test.go
+++ b/test/e2e_new_channel/kafka_channel_test.go
@@ -17,7 +17,7 @@
  * limitations under the License.
  */
 
-package e2e_new
+package e2e_new_channel
 
 import (
 	"fmt"
diff --git a/test/e2e_new/kafka_channel_upstream_test.go b/test/e2e_new_channel/kafka_channel_upstream_test.go
similarity index 99%
rename from test/e2e_new/kafka_channel_upstream_test.go
rename to test/e2e_new_channel/kafka_channel_upstream_test.go
index 132670950..c7b660760 100644
--- a/test/e2e_new/kafka_channel_upstream_test.go
+++ b/test/e2e_new_channel/kafka_channel_upstream_test.go
@@ -17,7 +17,7 @@
  * limitations under the License.
  */
 
-package e2e_new
+package e2e_new_channel
 
 import (
 	"testing"
diff --git a/test/e2e_new_channel/main_test.go b/test/e2e_new_channel/main_test.go
new file mode 100644
index 000000000..8e4d6e5de
--- /dev/null
+++ b/test/e2e_new_channel/main_test.go
@@ -0,0 +1,71 @@
+//go:build e2e
+// +build e2e
+
+/*
+ * Copyright 2020 The Knative Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package e2e_new_channel
+
+import (
+	"flag"
+	"os"
+	"testing"
+
+	"knative.dev/eventing/test/rekt/resources/channel_impl"
+
+	// Uncomment the following line to load the gcp plugin (only required to authenticate against GKE clusters).
+	_ "k8s.io/client-go/plugin/pkg/client/auth/gcp"
+
+	"knative.dev/pkg/injection"
+	_ "knative.dev/pkg/system/testing"
+
+	"knative.dev/reconciler-test/pkg/environment"
+)
+
+// global is the singleton instance of GlobalEnvironment. It is used to parse
+// the testing config for the test run. The config will specify the cluster
+// config as well as the parsing level and state flags.
+var global environment.GlobalEnvironment
+
+func init() {
+	// environment.InitFlags registers state and level filter flags.
+	environment.InitFlags(flag.CommandLine)
+
+	// CHANNEL_GROUP_KIND=KafkaChannel.messaging.knative.dev;CHANNEL_VERSION=v1beta1
+	channel_impl.EnvCfg.ChannelGK = "KafkaChannel.messaging.knative.dev"
+	channel_impl.EnvCfg.ChannelV = "v1beta1"
+}
+
+// TestMain is the first entry point for `go test`.
+func TestMain(m *testing.M) {
+	// We get a chance to parse flags to include the framework flags for the
+	// framework as well as any additional flags included in the integration.
+	flag.Parse()
+
+	// EnableInjectionOrDie will enable client injection, this is used by the
+	// testing framework for namespace management, and could be leveraged by
+	// features to pull Kubernetes clients or the test environment out of the
+	// context passed in the features.
+	ctx, startInformers := injection.EnableInjectionOrDie(nil, nil) //nolint
+	startInformers()
+
+	// global is used to make instances of Environments, NewGlobalEnvironment
+	// is passing and saving the client injection enabled context for use later.
+	global = environment.NewGlobalEnvironment(ctx)
+
+	// Run the tests.
+	os.Exit(m.Run())
+}
diff --git a/test/reconciler-tests.sh b/test/reconciler-tests.sh
index 72636f544..0f823dfe1 100755
--- a/test/reconciler-tests.sh
+++ b/test/reconciler-tests.sh
@@ -23,6 +23,8 @@ export_logs_continuously
 
 go_test_e2e -timeout=1h ./test/e2e_new/... || fail_test "E2E (new) suite failed"
 
+go_test_e2e -tags=e2e,cloudevents -timeout=1h ./test/e2e_new_channel/... || fail_test "E2E (new - KafkaChannel) suite failed"
+
 go_test_e2e -tags=deletecm ./test/e2e_new/... || fail_test "E2E (new deletecm) suite failed"
 
 if ! ${LOCAL_DEVELOPMENT}; then
diff --git a/test/upgrade/postupgrade.go b/test/upgrade/postupgrade.go
index f555ce771..04cf80a79 100644
--- a/test/upgrade/postupgrade.go
+++ b/test/upgrade/postupgrade.go
@@ -32,7 +32,7 @@ func BrokerPostUpgradeTest() pkgupgrade.Operation {
 
 // SinkPostUpgradeTest tests sink basic operations post upgrade.
 func SinkPostUpgradeTest() pkgupgrade.Operation {
-	return pkgupgrade.NewOperation("SinkPostDowngradeTest", func(c pkgupgrade.Context) {
+	return pkgupgrade.NewOperation("SinkPostUpgradeTest", func(c pkgupgrade.Context) {
 		e2e.RunTestKafkaSink(c.T, eventing.ModeBinary, nil)
 	})
 }
diff --git a/test/upgrade/preupgrade.go b/test/upgrade/preupgrade.go
index c46b23f41..1df23a95b 100644
--- a/test/upgrade/preupgrade.go
+++ b/test/upgrade/preupgrade.go
@@ -32,7 +32,7 @@ func BrokerPreUpgradeTest() pkgupgrade.Operation {
 
 // SinkPreUpgradeTest tests sink basic operations pre upgrade.
 func SinkPreUpgradeTest() pkgupgrade.Operation {
-	return pkgupgrade.NewOperation("SinkPostDowngradeTest", func(c pkgupgrade.Context) {
+	return pkgupgrade.NewOperation("SinkPreUpgradeTest", func(c pkgupgrade.Context) {
 		e2e.RunTestKafkaSink(c.T, eventing.ModeBinary, nil)
 	})
 }
diff --git a/third_party/eventing-kafka-latest/channel-crds.yaml b/third_party/eventing-kafka-latest/channel-crds.yaml
index ece583caf..71aafe19a 100644
--- a/third_party/eventing-kafka-latest/channel-crds.yaml
+++ b/third_party/eventing-kafka-latest/channel-crds.yaml
@@ -17,7 +17,7 @@ kind: CustomResourceDefinition
 metadata:
   name: kafkachannels.messaging.knative.dev
   labels:
-    kafka.eventing.knative.dev/release: "v20220113-afceb5404"
+    kafka.eventing.knative.dev/release: "v20220131-a14b76602"
     knative.dev/crd-install: "true"
     messaging.knative.dev/subscribable: "true"
     duck.knative.dev/addressable: "true"
diff --git a/third_party/eventing-kafka-latest/source-crd.yaml b/third_party/eventing-kafka-latest/source-crd.yaml
index c070768e7..905329876 100644
--- a/third_party/eventing-kafka-latest/source-crd.yaml
+++ b/third_party/eventing-kafka-latest/source-crd.yaml
@@ -16,7 +16,7 @@ apiVersion: apiextensions.k8s.io/v1
 kind: CustomResourceDefinition
 metadata:
   labels:
-    kafka.eventing.knative.dev/release: "v20220113-afceb5404"
+    kafka.eventing.knative.dev/release: "v20220131-a14b76602"
     eventing.knative.dev/source: "true"
     duck.knative.dev/source: "true"
     knative.dev/crd-install: "true"
diff --git a/third_party/eventing-latest/eventing-core.yaml b/third_party/eventing-latest/eventing-core.yaml
index 83f275c51..a46bb3de0 100644
--- a/third_party/eventing-latest/eventing-core.yaml
+++ b/third_party/eventing-latest/eventing-core.yaml
@@ -16,8 +16,8 @@ kind: Namespace
 metadata:
   name: knative-eventing
   labels:
-    eventing.knative.dev/release: "v20220122-f07487898"
-    app.kubernetes.io/version: "20220122-f07487898"
+    eventing.knative.dev/release: "v20220131-7a44b07f2"
+    app.kubernetes.io/version: "20220131-7a44b07f2"
     app.kubernetes.io/name: knative-eventing
 
 ---
@@ -41,8 +41,8 @@ metadata:
   name: eventing-controller
   namespace: knative-eventing
   labels:
-    eventing.knative.dev/release: "v20220122-f07487898"
-    app.kubernetes.io/version: "20220122-f07487898"
+    eventing.knative.dev/release: "v20220131-7a44b07f2"
+    app.kubernetes.io/version: "20220131-7a44b07f2"
     app.kubernetes.io/name: knative-eventing
 ---
 apiVersion: rbac.authorization.k8s.io/v1
@@ -50,8 +50,8 @@ kind: ClusterRoleBinding
 metadata:
   name: eventing-controller
   labels:
-    eventing.knative.dev/release: "v20220122-f07487898"
-    app.kubernetes.io/version: "20220122-f07487898"
+    eventing.knative.dev/release: "v20220131-7a44b07f2"
+    app.kubernetes.io/version: "20220131-7a44b07f2"
     app.kubernetes.io/name: knative-eventing
 subjects:
   - kind: ServiceAccount
@@ -67,8 +67,8 @@ kind: ClusterRoleBinding
 metadata:
   name: eventing-controller-resolver
   labels:
-    eventing.knative.dev/release: "v20220122-f07487898"
-    app.kubernetes.io/version: "20220122-f07487898"
+    eventing.knative.dev/release: "v20220131-7a44b07f2"
+    app.kubernetes.io/version: "20220131-7a44b07f2"
     app.kubernetes.io/name: knative-eventing
 subjects:
   - kind: ServiceAccount
@@ -84,8 +84,8 @@ kind: ClusterRoleBinding
 metadata:
   name: eventing-controller-source-observer
   labels:
-    eventing.knative.dev/release: "v20220122-f07487898"
-    app.kubernetes.io/version: "20220122-f07487898"
+    eventing.knative.dev/release: "v20220131-7a44b07f2"
+    app.kubernetes.io/version: "20220131-7a44b07f2"
     app.kubernetes.io/name: knative-eventing
 subjects:
   - kind: ServiceAccount
@@ -101,8 +101,8 @@ kind: ClusterRoleBinding
 metadata:
   name: eventing-controller-sources-controller
   labels:
-    eventing.knative.dev/release: "v20220122-f07487898"
-    app.kubernetes.io/version: "20220122-f07487898"
+    eventing.knative.dev/release: "v20220131-7a44b07f2"
+    app.kubernetes.io/version: "20220131-7a44b07f2"
     app.kubernetes.io/name: knative-eventing
 subjects:
   - kind: ServiceAccount
@@ -118,8 +118,8 @@ kind: ClusterRoleBinding
 metadata:
   name: eventing-controller-manipulator
   labels:
-    eventing.knative.dev/release: "v20220122-f07487898"
-    app.kubernetes.io/version: "20220122-f07487898"
+    eventing.knative.dev/release: "v20220131-7a44b07f2"
+    app.kubernetes.io/version: "20220131-7a44b07f2"
     app.kubernetes.io/name: knative-eventing
 subjects:
   - kind: ServiceAccount
@@ -151,8 +151,8 @@ metadata:
   name: pingsource-mt-adapter
   namespace: knative-eventing
   labels:
-    eventing.knative.dev/release: "v20220122-f07487898"
-    app.kubernetes.io/version: "20220122-f07487898"
+    eventing.knative.dev/release: "v20220131-7a44b07f2"
+    app.kubernetes.io/version: "20220131-7a44b07f2"
     app.kubernetes.io/name: knative-eventing
 ---
 apiVersion: rbac.authorization.k8s.io/v1
@@ -160,8 +160,8 @@ kind: ClusterRoleBinding
 metadata:
   name: knative-eventing-pingsource-mt-adapter
   labels:
-    eventing.knative.dev/release: "v20220122-f07487898"
-    app.kubernetes.io/version: "20220122-f07487898"
+    eventing.knative.dev/release: "v20220131-7a44b07f2"
+    app.kubernetes.io/version: "20220131-7a44b07f2"
     app.kubernetes.io/name: knative-eventing
 subjects:
   - kind: ServiceAccount
@@ -193,8 +193,8 @@ metadata:
   name: eventing-webhook
   namespace: knative-eventing
   labels:
-    eventing.knative.dev/release: "v20220122-f07487898"
-    app.kubernetes.io/version: "20220122-f07487898"
+    eventing.knative.dev/release: "v20220131-7a44b07f2"
+    app.kubernetes.io/version: "20220131-7a44b07f2"
     app.kubernetes.io/name: knative-eventing
 ---
 apiVersion: rbac.authorization.k8s.io/v1
@@ -202,8 +202,8 @@ kind: ClusterRoleBinding
 metadata:
   name: eventing-webhook
   labels:
-    eventing.knative.dev/release: "v20220122-f07487898"
-    app.kubernetes.io/version: "20220122-f07487898"
+    eventing.knative.dev/release: "v20220131-7a44b07f2"
+    app.kubernetes.io/version: "20220131-7a44b07f2"
     app.kubernetes.io/name: knative-eventing
 subjects:
   - kind: ServiceAccount
@@ -220,8 +220,8 @@ metadata:
   namespace: knative-eventing
   name: eventing-webhook
   labels:
-    eventing.knative.dev/release: "v20220122-f07487898"
-    app.kubernetes.io/version: "20220122-f07487898"
+    eventing.knative.dev/release: "v20220131-7a44b07f2"
+    app.kubernetes.io/version: "20220131-7a44b07f2"
     app.kubernetes.io/name: knative-eventing
 subjects:
   - kind: ServiceAccount
@@ -237,8 +237,8 @@ kind: ClusterRoleBinding
 metadata:
   name: eventing-webhook-resolver
   labels:
-    eventing.knative.dev/release: "v20220122-f07487898"
-    app.kubernetes.io/version: "20220122-f07487898"
+    eventing.knative.dev/release: "v20220131-7a44b07f2"
+    app.kubernetes.io/version: "20220131-7a44b07f2"
     app.kubernetes.io/name: knative-eventing
 subjects:
   - kind: ServiceAccount
@@ -254,8 +254,8 @@ kind: ClusterRoleBinding
 metadata:
   name: eventing-webhook-podspecable-binding
   labels:
-    eventing.knative.dev/release: "v20220122-f07487898"
-    app.kubernetes.io/version: "20220122-f07487898"
+    eventing.knative.dev/release: "v20220131-7a44b07f2"
+    app.kubernetes.io/version: "20220131-7a44b07f2"
     app.kubernetes.io/name: knative-eventing
 subjects:
   - kind: ServiceAccount
@@ -287,8 +287,8 @@ metadata:
   name: config-br-default-channel
   namespace: knative-eventing
   labels:
-    eventing.knative.dev/release: "v20220122-f07487898"
-    app.kubernetes.io/version: "20220122-f07487898"
+    eventing.knative.dev/release: "v20220131-7a44b07f2"
+    app.kubernetes.io/version: "20220131-7a44b07f2"
     app.kubernetes.io/name: knative-eventing
 data:
   channel-template-spec: |
@@ -316,8 +316,8 @@ metadata:
   name: config-br-defaults
   namespace: knative-eventing
   labels:
-    eventing.knative.dev/release: "v20220122-f07487898"
-    app.kubernetes.io/version: "20220122-f07487898"
+    eventing.knative.dev/release: "v20220131-7a44b07f2"
+    app.kubernetes.io/version: "20220131-7a44b07f2"
     app.kubernetes.io/name: knative-eventing
 data:
   # Configures the default for any Broker that does not specify a spec.config or Broker class.
@@ -354,8 +354,8 @@ metadata:
   name: default-ch-webhook
   namespace: knative-eventing
   labels:
-    eventing.knative.dev/release: "v20220122-f07487898"
-    app.kubernetes.io/version: "20220122-f07487898"
+    eventing.knative.dev/release: "v20220131-7a44b07f2"
+    app.kubernetes.io/version: "20220131-7a44b07f2"
     app.kubernetes.io/name: knative-eventing
 data:
   # Configuration for defaulting channels that do not specify CRD implementations.
@@ -389,10 +389,10 @@ metadata:
   name: config-ping-defaults
   namespace: knative-eventing
   labels:
-    eventing.knative.dev/release: "v20220122-f07487898"
+    eventing.knative.dev/release: "v20220131-7a44b07f2"
   annotations:
     knative.dev/example-checksum: "9185c153"
-    app.kubernetes.io/version: "20220122-f07487898"
+    app.kubernetes.io/version: "20220131-7a44b07f2"
     app.kubernetes.io/name: knative-eventing
 data:
   _example: |
@@ -436,10 +436,10 @@ metadata:
   name: config-features
   namespace: knative-eventing
   labels:
-    eventing.knative.dev/release: "v20220122-f07487898"
+    eventing.knative.dev/release: "v20220131-7a44b07f2"
     knative.dev/config-propagation: original
     knative.dev/config-category: eventing
-    app.kubernetes.io/version: "20220122-f07487898"
+    app.kubernetes.io/version: "20220131-7a44b07f2"
     app.kubernetes.io/name: knative-eventing
 data:
   # ALPHA feature: The kreference-group allows you to use the Group field in KReferences.
@@ -483,7 +483,7 @@ metadata:
   name: config-kreference-mapping
   namespace: knative-eventing
   labels:
-    eventing.knative.dev/release: "v20220122-f07487898"
+    eventing.knative.dev/release: "v20220131-7a44b07f2"
     knative.dev/config-propagation: original
     knative.dev/config-category: eventing
   annotations:
@@ -532,8 +532,8 @@ metadata:
   name: config-leader-election
   namespace: knative-eventing
   labels:
-    eventing.knative.dev/release: "v20220122-f07487898"
-    app.kubernetes.io/version: "20220122-f07487898"
+    eventing.knative.dev/release: "v20220131-7a44b07f2"
+    app.kubernetes.io/version: "20220131-7a44b07f2"
     app.kubernetes.io/name: knative-eventing
   annotations:
     knative.dev/example-checksum: "f7948630"
@@ -594,10 +594,10 @@ metadata:
   name: config-logging
   namespace: knative-eventing
   labels:
-    eventing.knative.dev/release: "v20220122-f07487898"
+    eventing.knative.dev/release: "v20220131-7a44b07f2"
     knative.dev/config-propagation: original
     knative.dev/config-category: eventing
-    app.kubernetes.io/version: "20220122-f07487898"
+    app.kubernetes.io/version: "20220131-7a44b07f2"
     app.kubernetes.io/name: knative-eventing
 data:
   # Common configuration for all Knative codebase
@@ -648,10 +648,10 @@ metadata:
   name: config-observability
   namespace: knative-eventing
   labels:
-    eventing.knative.dev/release: "v20220122-f07487898"
+    eventing.knative.dev/release: "v20220131-7a44b07f2"
     knative.dev/config-propagation: original
     knative.dev/config-category: eventing
-    app.kubernetes.io/version: "20220122-f07487898"
+    app.kubernetes.io/version: "20220131-7a44b07f2"
     app.kubernetes.io/name: knative-eventing
   annotations:
     knative.dev/example-checksum: "f46cf09d"
@@ -725,10 +725,10 @@ metadata:
   name: config-tracing
   namespace: knative-eventing
   labels:
-    eventing.knative.dev/release: "v20220122-f07487898"
+    eventing.knative.dev/release: "v20220131-7a44b07f2"
     knative.dev/config-propagation: original
     knative.dev/config-category: eventing
-    app.kubernetes.io/version: "20220122-f07487898"
+    app.kubernetes.io/version: "20220131-7a44b07f2"
     app.kubernetes.io/name: knative-eventing
   annotations:
     knative.dev/example-checksum: "0492ceb0"
@@ -783,10 +783,10 @@ metadata:
   name: eventing-controller
   namespace: knative-eventing
   labels:
-    eventing.knative.dev/release: "v20220122-f07487898"
+    eventing.knative.dev/release: "v20220131-7a44b07f2"
     knative.dev/high-availability: "true"
     app.kubernetes.io/component: eventing-controller
-    app.kubernetes.io/version: "20220122-f07487898"
+    app.kubernetes.io/version: "20220131-7a44b07f2"
     app.kubernetes.io/name: knative-eventing
 spec:
   selector:
@@ -796,9 +796,9 @@ spec:
     metadata:
       labels:
         app: eventing-controller
-        eventing.knative.dev/release: "v20220122-f07487898"
+        eventing.knative.dev/release: "v20220131-7a44b07f2"
         app.kubernetes.io/component: eventing-autoscaler
-        app.kubernetes.io/version: "20220122-f07487898"
+        app.kubernetes.io/version: "20220131-7a44b07f2"
         app.kubernetes.io/name: knative-eventing
     spec:
       # To avoid node becoming SPOF, spread our replicas to different nodes.
@@ -816,7 +816,7 @@ spec:
       containers:
         - name: eventing-controller
           terminationMessagePolicy: FallbackToLogsOnError
-          image: gcr.io/knative-nightly/knative.dev/eventing/cmd/controller@sha256:d51f4e8a1e19a657fdccde63a465d4a4fd00240faa73d847e13d8c96f327ce87
+          image: gcr.io/knative-nightly/knative.dev/eventing/cmd/controller@sha256:69d2d30440ed84ebc50be23694ca194646fa08411ddbe93487bc003090a52d9c
           resources:
             requests:
               cpu: 100m
@@ -834,7 +834,7 @@ spec:
               value: knative.dev/eventing
             # APIServerSource
             - name: APISERVER_RA_IMAGE
-              value: gcr.io/knative-nightly/knative.dev/eventing/cmd/apiserver_receive_adapter@sha256:c0bde79565c48e297ebf9c7072b205a7127a5090ca2a3e9285f6456555a45bee
+              value: gcr.io/knative-nightly/knative.dev/eventing/cmd/apiserver_receive_adapter@sha256:72b6206cf15de6cfdb16217a17ec5d8e0184dd3a14c206861ab16ad5d94802ce
             - name: POD_NAME
               valueFrom:
                 fieldRef:
@@ -883,9 +883,9 @@ metadata:
   name: pingsource-mt-adapter
   namespace: knative-eventing
   labels:
-    eventing.knative.dev/release: "v20220122-f07487898"
+    eventing.knative.dev/release: "v20220131-7a44b07f2"
     app.kubernetes.io/component: pingsource-mt-adapter
-    app.kubernetes.io/version: "20220122-f07487898"
+    app.kubernetes.io/version: "20220131-7a44b07f2"
     app.kubernetes.io/name: knative-eventing
 spec:
   # when set to 0 (and only 0) will be set to 1 when the first PingSource is created.
@@ -898,9 +898,9 @@ spec:
     metadata:
       labels:
         !!merge <<: *labels
-        eventing.knative.dev/release: "v20220122-f07487898"
+        eventing.knative.dev/release: "v20220131-7a44b07f2"
         app.kubernetes.io/component: pingsource-mt-adapter
-        app.kubernetes.io/version: "20220122-f07487898"
+        app.kubernetes.io/version: "20220131-7a44b07f2"
         app.kubernetes.io/name: knative-eventing
     spec:
       affinity:
@@ -914,7 +914,7 @@ spec:
       enableServiceLinks: false
       containers:
         - name: dispatcher
-          image: gcr.io/knative-nightly/knative.dev/eventing/cmd/mtping@sha256:17f30435a9f39d3121263186c90927a869437d7d7babe51fe1fbecfcececc9fe
+          image: gcr.io/knative-nightly/knative.dev/eventing/cmd/mtping@sha256:744060290509d1172fbaaded191bf1b5b631f835de27662c6bfe62358526ebaa
           env:
             - name: SYSTEM_NAMESPACE
               value: ''
@@ -979,9 +979,9 @@ metadata:
   name: eventing-webhook
   namespace: knative-eventing
   labels:
-    eventing.knative.dev/release: "v20220122-f07487898"
+    eventing.knative.dev/release: "v20220131-7a44b07f2"
     app.kubernetes.io/component: eventing-webhook
-    app.kubernetes.io/version: "20220122-f07487898"
+    app.kubernetes.io/version: "20220131-7a44b07f2"
     app.kubernetes.io/name: knative-eventing
 spec:
   scaleTargetRef:
@@ -1005,9 +1005,9 @@ metadata:
   name: eventing-webhook
   namespace: knative-eventing
   labels:
-    eventing.knative.dev/release: "v20220122-f07487898"
+    eventing.knative.dev/release: "v20220131-7a44b07f2"
     app.kubernetes.io/component: eventing-webhook
-    app.kubernetes.io/version: "20220122-f07487898"
+    app.kubernetes.io/version: "20220131-7a44b07f2"
     app.kubernetes.io/name: knative-eventing
 spec:
   minAvailable: 80%
@@ -1036,9 +1036,9 @@ metadata:
   name: eventing-webhook
   namespace: knative-eventing
   labels:
-    eventing.knative.dev/release: "v20220122-f07487898"
+    eventing.knative.dev/release: "v20220131-7a44b07f2"
     app.kubernetes.io/component: eventing-webhook
-    app.kubernetes.io/version: "20220122-f07487898"
+    app.kubernetes.io/version: "20220131-7a44b07f2"
     app.kubernetes.io/name: knative-eventing
 spec:
   selector:
@@ -1049,9 +1049,9 @@ spec:
     metadata:
       labels:
         !!merge <<: *labels
-        eventing.knative.dev/release: "v20220122-f07487898"
+        eventing.knative.dev/release: "v20220131-7a44b07f2"
         app.kubernetes.io/component: eventing-webhook
-        app.kubernetes.io/version: "20220122-f07487898"
+        app.kubernetes.io/version: "20220131-7a44b07f2"
         app.kubernetes.io/name: knative-eventing
     spec:
       # To avoid node becoming SPOF, spread our replicas to different nodes.
@@ -1071,7 +1071,7 @@ spec:
           terminationMessagePolicy: FallbackToLogsOnError
           # This is the Go import path for the binary that is containerized
           # and substituted here.
-          image: gcr.io/knative-nightly/knative.dev/eventing/cmd/webhook@sha256:ace72d0992e9526b1ea7825eb7647809a4eeb3f6d1f71ff36fc10c92dfd11e0b
+          image: gcr.io/knative-nightly/knative.dev/eventing/cmd/webhook@sha256:cff89e978a3ecb1e6a3af700525a832058feccf5ec769ce111da673d9fa9b80f
           resources:
             requests:
               # taken from serving.
@@ -1140,10 +1140,10 @@ apiVersion: v1
 kind: Service
 metadata:
   labels:
-    eventing.knative.dev/release: "v20220122-f07487898"
+    eventing.knative.dev/release: "v20220131-7a44b07f2"
     role: eventing-webhook
     app.kubernetes.io/component: eventing-webhook
-    app.kubernetes.io/version: "20220122-f07487898"
+    app.kubernetes.io/version: "20220131-7a44b07f2"
     app.kubernetes.io/name: knative-eventing
   name: eventing-webhook
   namespace: knative-eventing
@@ -1175,11 +1175,11 @@ kind: CustomResourceDefinition
 metadata:
   creationTimestamp: null
   labels:
-    eventing.knative.dev/release: "v20220122-f07487898"
+    eventing.knative.dev/release: "v20220131-7a44b07f2"
     eventing.knative.dev/source: "true"
     duck.knative.dev/source: "true"
     knative.dev/crd-install: "true"
-    app.kubernetes.io/version: "20220122-f07487898"
+    app.kubernetes.io/version: "20220131-7a44b07f2"
     app.kubernetes.io/name: knative-eventing
   annotations:
     # TODO add schemas and descriptions
@@ -1391,10 +1391,10 @@ kind: CustomResourceDefinition
 metadata:
   name: brokers.eventing.knative.dev
   labels:
-    eventing.knative.dev/release: "v20220122-f07487898"
+    eventing.knative.dev/release: "v20220131-7a44b07f2"
     knative.dev/crd-install: "true"
     duck.knative.dev/addressable: "true"
-    app.kubernetes.io/version: "20220122-f07487898"
+    app.kubernetes.io/version: "20220131-7a44b07f2"
     app.kubernetes.io/name: knative-eventing
 spec:
   group: eventing.knative.dev
@@ -1558,11 +1558,11 @@ kind: CustomResourceDefinition
 metadata:
   name: channels.messaging.knative.dev
   labels:
-    eventing.knative.dev/release: "v20220122-f07487898"
+    eventing.knative.dev/release: "v20220131-7a44b07f2"
     knative.dev/crd-install: "true"
     messaging.knative.dev/subscribable: "true"
     duck.knative.dev/addressable: "true"
-    app.kubernetes.io/version: "20220122-f07487898"
+    app.kubernetes.io/version: "20220131-7a44b07f2"
     app.kubernetes.io/name: knative-eventing
 spec:
   group: messaging.knative.dev
@@ -1830,11 +1830,11 @@ apiVersion: apiextensions.k8s.io/v1
 kind: CustomResourceDefinition
 metadata:
   labels:
-    eventing.knative.dev/release: "v20220122-f07487898"
+    eventing.knative.dev/release: "v20220131-7a44b07f2"
     eventing.knative.dev/source: "true"
     duck.knative.dev/source: "true"
     knative.dev/crd-install: "true"
-    app.kubernetes.io/version: "20220122-f07487898"
+    app.kubernetes.io/version: "20220131-7a44b07f2"
     app.kubernetes.io/name: knative-eventing
   name: containersources.sources.knative.dev
 spec:
@@ -1984,9 +1984,9 @@ kind: CustomResourceDefinition
 metadata:
   name: eventtypes.eventing.knative.dev
   labels:
-    eventing.knative.dev/release: "v20220122-f07487898"
+    eventing.knative.dev/release: "v20220131-7a44b07f2"
     knative.dev/crd-install: "true"
-    app.kubernetes.io/version: "20220122-f07487898"
+    app.kubernetes.io/version: "20220131-7a44b07f2"
     app.kubernetes.io/name: knative-eventing
 spec:
   group: eventing.knative.dev
@@ -2113,10 +2113,10 @@ kind: CustomResourceDefinition
 metadata:
   name: parallels.flows.knative.dev
   labels:
-    eventing.knative.dev/release: "v20220122-f07487898"
+    eventing.knative.dev/release: "v20220131-7a44b07f2"
     knative.dev/crd-install: "true"
     duck.knative.dev/addressable: "true"
-    app.kubernetes.io/version: "20220122-f07487898"
+    app.kubernetes.io/version: "20220131-7a44b07f2"
     app.kubernetes.io/name: knative-eventing
 spec:
   group: flows.knative.dev
@@ -2368,11 +2368,11 @@ apiVersion: apiextensions.k8s.io/v1
 kind: CustomResourceDefinition
 metadata:
   labels:
-    eventing.knative.dev/release: "v20220122-f07487898"
+    eventing.knative.dev/release: "v20220131-7a44b07f2"
     eventing.knative.dev/source: "true"
     duck.knative.dev/source: "true"
     knative.dev/crd-install: "true"
-    app.kubernetes.io/version: "20220122-f07487898"
+    app.kubernetes.io/version: "20220131-7a44b07f2"
     app.kubernetes.io/name: knative-eventing
   annotations:
     # TODO add schemas and descriptions
@@ -2559,10 +2559,10 @@ kind: CustomResourceDefinition
 metadata:
   name: sequences.flows.knative.dev
   labels:
-    eventing.knative.dev/release: "v20220122-f07487898"
+    eventing.knative.dev/release: "v20220131-7a44b07f2"
     knative.dev/crd-install: "true"
     duck.knative.dev/addressable: "true"
-    app.kubernetes.io/version: "20220122-f07487898"
+    app.kubernetes.io/version: "20220131-7a44b07f2"
     app.kubernetes.io/name: knative-eventing
 spec:
   group: flows.knative.dev
@@ -2879,12 +2879,12 @@ apiVersion: apiextensions.k8s.io/v1
 kind: CustomResourceDefinition
 metadata:
   labels:
-    eventing.knative.dev/release: "v20220122-f07487898"
+    eventing.knative.dev/release: "v20220131-7a44b07f2"
     eventing.knative.dev/source: "true"
     duck.knative.dev/source: "true"
     duck.knative.dev/binding: "true"
     knative.dev/crd-install: "true"
-    app.kubernetes.io/version: "20220122-f07487898"
+    app.kubernetes.io/version: "20220131-7a44b07f2"
     app.kubernetes.io/name: knative-eventing
   name: sinkbindings.sources.knative.dev
 spec:
@@ -3071,9 +3071,9 @@ kind: CustomResourceDefinition
 metadata:
   name: subscriptions.messaging.knative.dev
   labels:
-    eventing.knative.dev/release: "v20220122-f07487898"
+    eventing.knative.dev/release: "v20220131-7a44b07f2"
     knative.dev/crd-install: "true"
-    app.kubernetes.io/version: "20220122-f07487898"
+    app.kubernetes.io/version: "20220131-7a44b07f2"
     app.kubernetes.io/name: knative-eventing
 spec:
   group: messaging.knative.dev
@@ -3283,9 +3283,9 @@ kind: CustomResourceDefinition
 metadata:
   name: triggers.eventing.knative.dev
   labels:
-    eventing.knative.dev/release: "v20220122-f07487898"
+    eventing.knative.dev/release: "v20220131-7a44b07f2"
     knative.dev/crd-install: "true"
-    app.kubernetes.io/version: "20220122-f07487898"
+    app.kubernetes.io/version: "20220131-7a44b07f2"
     app.kubernetes.io/name: knative-eventing
 spec:
   group: eventing.knative.dev
@@ -3469,8 +3469,8 @@ kind: ClusterRole
 metadata:
   name: addressable-resolver
   labels:
-    eventing.knative.dev/release: "v20220122-f07487898"
-    app.kubernetes.io/version: "20220122-f07487898"
+    eventing.knative.dev/release: "v20220131-7a44b07f2"
+    app.kubernetes.io/version: "20220131-7a44b07f2"
     app.kubernetes.io/name: knative-eventing
 aggregationRule:
   clusterRoleSelectors:
@@ -3483,9 +3483,9 @@ apiVersion: rbac.authorization.k8s.io/v1
 metadata:
   name: service-addressable-resolver
   labels:
-    eventing.knative.dev/release: "v20220122-f07487898"
+    eventing.knative.dev/release: "v20220131-7a44b07f2"
     duck.knative.dev/addressable: "true"
-    app.kubernetes.io/version: "20220122-f07487898"
+    app.kubernetes.io/version: "20220131-7a44b07f2"
     app.kubernetes.io/name: knative-eventing
 # Do not use this role directly. These rules will be added to the "addressable-resolver" role.
 rules:
@@ -3503,9 +3503,9 @@ apiVersion: rbac.authorization.k8s.io/v1
 metadata:
   name: serving-addressable-resolver
   labels:
-    eventing.knative.dev/release: "v20220122-f07487898"
+    eventing.knative.dev/release: "v20220131-7a44b07f2"
     duck.knative.dev/addressable: "true"
-    app.kubernetes.io/version: "20220122-f07487898"
+    app.kubernetes.io/version: "20220131-7a44b07f2"
     app.kubernetes.io/name: knative-eventing
 # Do not use this role directly. These rules will be added to the "addressable-resolver" role.
 rules:
@@ -3526,9 +3526,9 @@ apiVersion: rbac.authorization.k8s.io/v1
 metadata:
   name: channel-addressable-resolver
   labels:
-    eventing.knative.dev/release: "v20220122-f07487898"
+    eventing.knative.dev/release: "v20220131-7a44b07f2"
     duck.knative.dev/addressable: "true"
-    app.kubernetes.io/version: "20220122-f07487898"
+    app.kubernetes.io/version: "20220131-7a44b07f2"
     app.kubernetes.io/name: knative-eventing
 # Do not use this role directly. These rules will be added to the "addressable-resolver" role.
 rules:
@@ -3553,9 +3553,9 @@ apiVersion: rbac.authorization.k8s.io/v1
 metadata:
   name: broker-addressable-resolver
   labels:
-    eventing.knative.dev/release: "v20220122-f07487898"
+    eventing.knative.dev/release: "v20220131-7a44b07f2"
     duck.knative.dev/addressable: "true"
-    app.kubernetes.io/version: "20220122-f07487898"
+    app.kubernetes.io/version: "20220131-7a44b07f2"
     app.kubernetes.io/name: knative-eventing
 # Do not use this role directly. These rules will be added to the "addressable-resolver" role.
 rules:
@@ -3574,9 +3574,9 @@ apiVersion: rbac.authorization.k8s.io/v1
 metadata:
   name: flows-addressable-resolver
   labels:
-    eventing.knative.dev/release: "v20220122-f07487898"
+    eventing.knative.dev/release: "v20220131-7a44b07f2"
     duck.knative.dev/addressable: "true"
-    app.kubernetes.io/version: "20220122-f07487898"
+    app.kubernetes.io/version: "20220131-7a44b07f2"
     app.kubernetes.io/name: knative-eventing
 # Do not use this role directly. These rules will be added to the "addressable-resolver" role.
 rules:
@@ -3612,8 +3612,8 @@ kind: ClusterRole
 metadata:
   name: eventing-broker-filter
   labels:
-    eventing.knative.dev/release: "v20220122-f07487898"
-    app.kubernetes.io/version: "20220122-f07487898"
+    eventing.knative.dev/release: "v20220131-7a44b07f2"
+    app.kubernetes.io/version: "20220131-7a44b07f2"
     app.kubernetes.io/name: knative-eventing
 rules:
   - apiGroups:
@@ -3639,8 +3639,8 @@ kind: ClusterRole
 metadata:
   name: eventing-broker-ingress
   labels:
-    eventing.knative.dev/release: "v20220122-f07487898"
-    app.kubernetes.io/version: "20220122-f07487898"
+    eventing.knative.dev/release: "v20220131-7a44b07f2"
+    app.kubernetes.io/version: "20220131-7a44b07f2"
     app.kubernetes.io/name: knative-eventing
 rules:
   - apiGroups:
@@ -3657,8 +3657,8 @@ kind: ClusterRole
 metadata:
   name: eventing-config-reader
   labels:
-    eventing.knative.dev/release: "v20220122-f07487898"
-    app.kubernetes.io/version: "20220122-f07487898"
+    eventing.knative.dev/release: "v20220131-7a44b07f2"
+    app.kubernetes.io/version: "20220131-7a44b07f2"
     app.kubernetes.io/name: knative-eventing
 rules:
   - apiGroups:
@@ -3691,8 +3691,8 @@ kind: ClusterRole
 metadata:
   name: channelable-manipulator
   labels:
-    eventing.knative.dev/release: "v20220122-f07487898"
-    app.kubernetes.io/version: "20220122-f07487898"
+    eventing.knative.dev/release: "v20220131-7a44b07f2"
+    app.kubernetes.io/version: "20220131-7a44b07f2"
     app.kubernetes.io/name: knative-eventing
 aggregationRule:
   clusterRoleSelectors:
@@ -3705,9 +3705,9 @@ kind: ClusterRole
 metadata:
   name: meta-channelable-manipulator
   labels:
-    eventing.knative.dev/release: "v20220122-f07487898"
+    eventing.knative.dev/release: "v20220131-7a44b07f2"
     duck.knative.dev/channelable: "true"
-    app.kubernetes.io/version: "20220122-f07487898"
+    app.kubernetes.io/version: "20220131-7a44b07f2"
     app.kubernetes.io/name: knative-eventing
 # Do not use this role directly. These rules will be added to the "channelable-manipulator" role.
 rules:
@@ -3745,9 +3745,9 @@ apiVersion: rbac.authorization.k8s.io/v1
 metadata:
   name: knative-eventing-namespaced-admin
   labels:
-    eventing.knative.dev/release: "v20220122-f07487898"
+    eventing.knative.dev/release: "v20220131-7a44b07f2"
     rbac.authorization.k8s.io/aggregate-to-admin: "true"
-    app.kubernetes.io/version: "20220122-f07487898"
+    app.kubernetes.io/version: "20220131-7a44b07f2"
     app.kubernetes.io/name: knative-eventing
 rules:
   - apiGroups: ["eventing.knative.dev"]
@@ -3759,9 +3759,9 @@ apiVersion: rbac.authorization.k8s.io/v1
 metadata:
   name: knative-messaging-namespaced-admin
   labels:
-    eventing.knative.dev/release: "v20220122-f07487898"
+    eventing.knative.dev/release: "v20220131-7a44b07f2"
     rbac.authorization.k8s.io/aggregate-to-admin: "true"
-    app.kubernetes.io/version: "20220122-f07487898"
+    app.kubernetes.io/version: "20220131-7a44b07f2"
     app.kubernetes.io/name: knative-eventing
 rules:
   - apiGroups: ["messaging.knative.dev"]
@@ -3773,9 +3773,9 @@ apiVersion: rbac.authorization.k8s.io/v1
 metadata:
   name: knative-flows-namespaced-admin
   labels:
-    eventing.knative.dev/release: "v20220122-f07487898"
+    eventing.knative.dev/release: "v20220131-7a44b07f2"
     rbac.authorization.k8s.io/aggregate-to-admin: "true"
-    app.kubernetes.io/version: "20220122-f07487898"
+    app.kubernetes.io/version: "20220131-7a44b07f2"
     app.kubernetes.io/name: knative-eventing
 rules:
   - apiGroups: ["flows.knative.dev"]
@@ -3787,9 +3787,9 @@ apiVersion: rbac.authorization.k8s.io/v1
 metadata:
   name: knative-sources-namespaced-admin
   labels:
-    eventing.knative.dev/release: "v20220122-f07487898"
+    eventing.knative.dev/release: "v20220131-7a44b07f2"
     rbac.authorization.k8s.io/aggregate-to-admin: "true"
-    app.kubernetes.io/version: "20220122-f07487898"
+    app.kubernetes.io/version: "20220131-7a44b07f2"
     app.kubernetes.io/name: knative-eventing
 rules:
   - apiGroups: ["sources.knative.dev"]
@@ -3801,9 +3801,9 @@ apiVersion: rbac.authorization.k8s.io/v1
 metadata:
   name: knative-bindings-namespaced-admin
   labels:
-    eventing.knative.dev/release: "v20220122-f07487898"
+    eventing.knative.dev/release: "v20220131-7a44b07f2"
     rbac.authorization.k8s.io/aggregate-to-admin: "true"
-    app.kubernetes.io/version: "20220122-f07487898"
+    app.kubernetes.io/version: "20220131-7a44b07f2"
     app.kubernetes.io/name: knative-eventing
 rules:
   - apiGroups: ["bindings.knative.dev"]
@@ -3816,8 +3816,8 @@ metadata:
   name: knative-eventing-namespaced-edit
   labels:
     rbac.authorization.k8s.io/aggregate-to-edit: "true"
-    eventing.knative.dev/release: "v20220122-f07487898"
-    app.kubernetes.io/version: "20220122-f07487898"
+    eventing.knative.dev/release: "v20220131-7a44b07f2"
+    app.kubernetes.io/version: "20220131-7a44b07f2"
     app.kubernetes.io/name: knative-eventing
 rules:
   - apiGroups: ["eventing.knative.dev", "messaging.knative.dev", "sources.knative.dev", "flows.knative.dev", "bindings.knative.dev"]
@@ -3830,8 +3830,8 @@ metadata:
   name: knative-eventing-namespaced-view
   labels:
     rbac.authorization.k8s.io/aggregate-to-view: "true"
-    eventing.knative.dev/release: "v20220122-f07487898"
-    app.kubernetes.io/version: "20220122-f07487898"
+    eventing.knative.dev/release: "v20220131-7a44b07f2"
+    app.kubernetes.io/version: "20220131-7a44b07f2"
     app.kubernetes.io/name: knative-eventing
 rules:
   - apiGroups: ["eventing.knative.dev", "messaging.knative.dev", "sources.knative.dev", "flows.knative.dev", "bindings.knative.dev"]
@@ -3858,8 +3858,8 @@ kind: ClusterRole
 metadata:
   name: knative-eventing-controller
   labels:
-    eventing.knative.dev/release: "v20220122-f07487898"
-    app.kubernetes.io/version: "20220122-f07487898"
+    eventing.knative.dev/release: "v20220131-7a44b07f2"
+    app.kubernetes.io/version: "20220131-7a44b07f2"
     app.kubernetes.io/name: knative-eventing
 rules:
   - apiGroups:
@@ -3994,8 +3994,8 @@ kind: ClusterRole
 metadata:
   name: knative-eventing-pingsource-mt-adapter
   labels:
-    eventing.knative.dev/release: "v20220122-f07487898"
-    app.kubernetes.io/version: "20220122-f07487898"
+    eventing.knative.dev/release: "v20220131-7a44b07f2"
+    app.kubernetes.io/version: "20220131-7a44b07f2"
     app.kubernetes.io/name: knative-eventing
 rules:
   - apiGroups:
@@ -4062,8 +4062,8 @@ kind: ClusterRole
 metadata:
   name: podspecable-binding
   labels:
-    eventing.knative.dev/release: "v20220122-f07487898"
-    app.kubernetes.io/version: "20220122-f07487898"
+    eventing.knative.dev/release: "v20220131-7a44b07f2"
+    app.kubernetes.io/version: "20220131-7a44b07f2"
     app.kubernetes.io/name: knative-eventing
 aggregationRule:
   clusterRoleSelectors:
@@ -4076,9 +4076,9 @@ apiVersion: rbac.authorization.k8s.io/v1
 metadata:
   name: builtin-podspecable-binding
   labels:
-    eventing.knative.dev/release: "v20220122-f07487898"
+    eventing.knative.dev/release: "v20220131-7a44b07f2"
     duck.knative.dev/podspecable: "true"
-    app.kubernetes.io/version: "20220122-f07487898"
+    app.kubernetes.io/version: "20220131-7a44b07f2"
     app.kubernetes.io/name: knative-eventing
 # Do not use this role directly. These rules will be added to the "podspecable-binding role.
 rules:
@@ -4124,8 +4124,8 @@ kind: ClusterRole
 metadata:
   name: source-observer
   labels:
-    eventing.knative.dev/release: "v20220122-f07487898"
-    app.kubernetes.io/version: "20220122-f07487898"
+    eventing.knative.dev/release: "v20220131-7a44b07f2"
+    app.kubernetes.io/version: "20220131-7a44b07f2"
     app.kubernetes.io/name: knative-eventing
 aggregationRule:
   clusterRoleSelectors:
@@ -4138,9 +4138,9 @@ apiVersion: rbac.authorization.k8s.io/v1
 metadata:
   name: eventing-sources-source-observer
   labels:
-    eventing.knative.dev/release: "v20220122-f07487898"
+    eventing.knative.dev/release: "v20220131-7a44b07f2"
     duck.knative.dev/source: "true"
-    app.kubernetes.io/version: "20220122-f07487898"
+    app.kubernetes.io/version: "20220131-7a44b07f2"
     app.kubernetes.io/name: knative-eventing
 # Do not use this role directly. These rules will be added to the "source-observer" role.
 rules:
@@ -4176,8 +4176,8 @@ kind: ClusterRole
 metadata:
   name: knative-eventing-sources-controller
   labels:
-    eventing.knative.dev/release: "v20220122-f07487898"
-    app.kubernetes.io/version: "20220122-f07487898"
+    eventing.knative.dev/release: "v20220131-7a44b07f2"
+    app.kubernetes.io/version: "20220131-7a44b07f2"
     app.kubernetes.io/name: knative-eventing
 rules:
   - apiGroups:
@@ -4263,8 +4263,8 @@ kind: ClusterRole
 metadata:
   name: knative-eventing-webhook
   labels:
-    eventing.knative.dev/release: "v20220122-f07487898"
-    app.kubernetes.io/version: "20220122-f07487898"
+    eventing.knative.dev/release: "v20220131-7a44b07f2"
+    app.kubernetes.io/version: "20220131-7a44b07f2"
     app.kubernetes.io/name: knative-eventing
 rules:
   # For watching logging configuration and getting certs.
@@ -4363,8 +4363,8 @@ metadata:
   namespace: knative-eventing
   name: knative-eventing-webhook
   labels:
-    eventing.knative.dev/release: "v20220122-f07487898"
-    app.kubernetes.io/version: "20220122-f07487898"
+    eventing.knative.dev/release: "v20220131-7a44b07f2"
+    app.kubernetes.io/version: "20220131-7a44b07f2"
     app.kubernetes.io/name: knative-eventing
 rules:
   # For manipulating certs into secrets.
@@ -4400,8 +4400,8 @@ kind: ValidatingWebhookConfiguration
 metadata:
   name: config.webhook.eventing.knative.dev
   labels:
-    eventing.knative.dev/release: "v20220122-f07487898"
-    app.kubernetes.io/version: "20220122-f07487898"
+    eventing.knative.dev/release: "v20220131-7a44b07f2"
+    app.kubernetes.io/version: "20220131-7a44b07f2"
     app.kubernetes.io/name: knative-eventing
 webhooks:
   - admissionReviewVersions: ["v1", "v1beta1"]
@@ -4438,8 +4438,8 @@ kind: MutatingWebhookConfiguration
 metadata:
   name: webhook.eventing.knative.dev
   labels:
-    eventing.knative.dev/release: "v20220122-f07487898"
-    app.kubernetes.io/version: "20220122-f07487898"
+    eventing.knative.dev/release: "v20220131-7a44b07f2"
+    app.kubernetes.io/version: "20220131-7a44b07f2"
     app.kubernetes.io/name: knative-eventing
 webhooks:
   - admissionReviewVersions: ["v1", "v1beta1"]
@@ -4472,8 +4472,8 @@ kind: ValidatingWebhookConfiguration
 metadata:
   name: validation.webhook.eventing.knative.dev
   labels:
-    eventing.knative.dev/release: "v20220122-f07487898"
-    app.kubernetes.io/version: "20220122-f07487898"
+    eventing.knative.dev/release: "v20220131-7a44b07f2"
+    app.kubernetes.io/version: "20220131-7a44b07f2"
     app.kubernetes.io/name: knative-eventing
 webhooks:
   - admissionReviewVersions: ["v1", "v1beta1"]
@@ -4507,8 +4507,8 @@ metadata:
   name: eventing-webhook-certs
   namespace: knative-eventing
   labels:
-    eventing.knative.dev/release: "v20220122-f07487898"
-    app.kubernetes.io/version: "20220122-f07487898"
+    eventing.knative.dev/release: "v20220131-7a44b07f2"
+    app.kubernetes.io/version: "20220131-7a44b07f2"
     app.kubernetes.io/name: knative-eventing
 # The data is populated at install time.
 
@@ -4532,8 +4532,8 @@ kind: MutatingWebhookConfiguration
 metadata:
   name: sinkbindings.webhook.sources.knative.dev
   labels:
-    eventing.knative.dev/release: "v20220122-f07487898"
-    app.kubernetes.io/version: "20220122-f07487898"
+    eventing.knative.dev/release: "v20220131-7a44b07f2"
+    app.kubernetes.io/version: "20220131-7a44b07f2"
     app.kubernetes.io/name: knative-eventing
 webhooks:
   - admissionReviewVersions: ["v1", "v1beta1"]
diff --git a/third_party/eventing-latest/eventing-crds.yaml b/third_party/eventing-latest/eventing-crds.yaml
index 9c9f22eff..99b7e5a89 100644
--- a/third_party/eventing-latest/eventing-crds.yaml
+++ b/third_party/eventing-latest/eventing-crds.yaml
@@ -17,11 +17,11 @@ kind: CustomResourceDefinition
 metadata:
   creationTimestamp: null
   labels:
-    eventing.knative.dev/release: "v20220122-f07487898"
+    eventing.knative.dev/release: "v20220131-7a44b07f2"
     eventing.knative.dev/source: "true"
     duck.knative.dev/source: "true"
     knative.dev/crd-install: "true"
-    app.kubernetes.io/version: "20220122-f07487898"
+    app.kubernetes.io/version: "20220131-7a44b07f2"
     app.kubernetes.io/name: knative-eventing
   annotations:
     # TODO add schemas and descriptions
@@ -233,10 +233,10 @@ kind: CustomResourceDefinition
 metadata:
   name: brokers.eventing.knative.dev
   labels:
-    eventing.knative.dev/release: "v20220122-f07487898"
+    eventing.knative.dev/release: "v20220131-7a44b07f2"
     knative.dev/crd-install: "true"
     duck.knative.dev/addressable: "true"
-    app.kubernetes.io/version: "20220122-f07487898"
+    app.kubernetes.io/version: "20220131-7a44b07f2"
     app.kubernetes.io/name: knative-eventing
 spec:
   group: eventing.knative.dev
@@ -400,11 +400,11 @@ kind: CustomResourceDefinition
 metadata:
   name: channels.messaging.knative.dev
   labels:
-    eventing.knative.dev/release: "v20220122-f07487898"
+    eventing.knative.dev/release: "v20220131-7a44b07f2"
     knative.dev/crd-install: "true"
     messaging.knative.dev/subscribable: "true"
     duck.knative.dev/addressable: "true"
-    app.kubernetes.io/version: "20220122-f07487898"
+    app.kubernetes.io/version: "20220131-7a44b07f2"
     app.kubernetes.io/name: knative-eventing
 spec:
   group: messaging.knative.dev
@@ -672,11 +672,11 @@ apiVersion: apiextensions.k8s.io/v1
 kind: CustomResourceDefinition
 metadata:
   labels:
-    eventing.knative.dev/release: "v20220122-f07487898"
+    eventing.knative.dev/release: "v20220131-7a44b07f2"
     eventing.knative.dev/source: "true"
     duck.knative.dev/source: "true"
     knative.dev/crd-install: "true"
-    app.kubernetes.io/version: "20220122-f07487898"
+    app.kubernetes.io/version: "20220131-7a44b07f2"
     app.kubernetes.io/name: knative-eventing
   name: containersources.sources.knative.dev
 spec:
@@ -826,9 +826,9 @@ kind: CustomResourceDefinition
 metadata:
   name: eventtypes.eventing.knative.dev
   labels:
-    eventing.knative.dev/release: "v20220122-f07487898"
+    eventing.knative.dev/release: "v20220131-7a44b07f2"
     knative.dev/crd-install: "true"
-    app.kubernetes.io/version: "20220122-f07487898"
+    app.kubernetes.io/version: "20220131-7a44b07f2"
     app.kubernetes.io/name: knative-eventing
 spec:
   group: eventing.knative.dev
@@ -955,10 +955,10 @@ kind: CustomResourceDefinition
 metadata:
   name: parallels.flows.knative.dev
   labels:
-    eventing.knative.dev/release: "v20220122-f07487898"
+    eventing.knative.dev/release: "v20220131-7a44b07f2"
     knative.dev/crd-install: "true"
     duck.knative.dev/addressable: "true"
-    app.kubernetes.io/version: "20220122-f07487898"
+    app.kubernetes.io/version: "20220131-7a44b07f2"
     app.kubernetes.io/name: knative-eventing
 spec:
   group: flows.knative.dev
@@ -1210,11 +1210,11 @@ apiVersion: apiextensions.k8s.io/v1
 kind: CustomResourceDefinition
 metadata:
   labels:
-    eventing.knative.dev/release: "v20220122-f07487898"
+    eventing.knative.dev/release: "v20220131-7a44b07f2"
     eventing.knative.dev/source: "true"
     duck.knative.dev/source: "true"
     knative.dev/crd-install: "true"
-    app.kubernetes.io/version: "20220122-f07487898"
+    app.kubernetes.io/version: "20220131-7a44b07f2"
     app.kubernetes.io/name: knative-eventing
   annotations:
     # TODO add schemas and descriptions
@@ -1401,10 +1401,10 @@ kind: CustomResourceDefinition
 metadata:
   name: sequences.flows.knative.dev
   labels:
-    eventing.knative.dev/release: "v20220122-f07487898"
+    eventing.knative.dev/release: "v20220131-7a44b07f2"
     knative.dev/crd-install: "true"
     duck.knative.dev/addressable: "true"
-    app.kubernetes.io/version: "20220122-f07487898"
+    app.kubernetes.io/version: "20220131-7a44b07f2"
     app.kubernetes.io/name: knative-eventing
 spec:
   group: flows.knative.dev
@@ -1721,12 +1721,12 @@ apiVersion: apiextensions.k8s.io/v1
 kind: CustomResourceDefinition
 metadata:
   labels:
-    eventing.knative.dev/release: "v20220122-f07487898"
+    eventing.knative.dev/release: "v20220131-7a44b07f2"
     eventing.knative.dev/source: "true"
     duck.knative.dev/source: "true"
     duck.knative.dev/binding: "true"
     knative.dev/crd-install: "true"
-    app.kubernetes.io/version: "20220122-f07487898"
+    app.kubernetes.io/version: "20220131-7a44b07f2"
     app.kubernetes.io/name: knative-eventing
   name: sinkbindings.sources.knative.dev
 spec:
@@ -1913,9 +1913,9 @@ kind: CustomResourceDefinition
 metadata:
   name: subscriptions.messaging.knative.dev
   labels:
-    eventing.knative.dev/release: "v20220122-f07487898"
+    eventing.knative.dev/release: "v20220131-7a44b07f2"
     knative.dev/crd-install: "true"
-    app.kubernetes.io/version: "20220122-f07487898"
+    app.kubernetes.io/version: "20220131-7a44b07f2"
     app.kubernetes.io/name: knative-eventing
 spec:
   group: messaging.knative.dev
@@ -2125,9 +2125,9 @@ kind: CustomResourceDefinition
 metadata:
   name: triggers.eventing.knative.dev
   labels:
-    eventing.knative.dev/release: "v20220122-f07487898"
+    eventing.knative.dev/release: "v20220131-7a44b07f2"
     knative.dev/crd-install: "true"
-    app.kubernetes.io/version: "20220122-f07487898"
+    app.kubernetes.io/version: "20220131-7a44b07f2"
     app.kubernetes.io/name: knative-eventing
 spec:
   group: eventing.knative.dev
diff --git a/vendor/knative.dev/eventing-kafka/test/e2e-tests.sh b/vendor/knative.dev/eventing-kafka/test/e2e-tests.sh
index c8daf4693..ffa8a1f9c 100644
--- a/vendor/knative.dev/eventing-kafka/test/e2e-tests.sh
+++ b/vendor/knative.dev/eventing-kafka/test/e2e-tests.sh
@@ -98,6 +98,12 @@ if [[ $TEST_CONSOLIDATED_CHANNEL_SASL == 1 ]]; then
   test_consolidated_channel_sasl || exit 1
 fi
 
+if ! command -v ps &> /dev/null && command -v apt-get &> /dev/null; then
+    # need to install ps
+    echo "Couldn't find ps command. Installing it. "
+    apt-get update && apt-get install -y procps
+fi
+
 # Terminate any zipkin port-forward processes that are still present on the system
 ps -e -o pid,command | grep 'kubectl port-forward zipkin[^*]*9411:9411 -n' | sed 's/^ *\([0-9][0-9]*\) .*/\1/' | xargs kill
 
diff --git a/vendor/knative.dev/eventing/pkg/reconciler/testing/v1/inmemorychannel.go b/vendor/knative.dev/eventing/pkg/reconciler/testing/v1/inmemorychannel.go
index 9f12b169a..81d802a9b 100644
--- a/vendor/knative.dev/eventing/pkg/reconciler/testing/v1/inmemorychannel.go
+++ b/vendor/knative.dev/eventing/pkg/reconciler/testing/v1/inmemorychannel.go
@@ -25,11 +25,12 @@ import (
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 	"knative.dev/pkg/apis"
 
+	duckv1 "knative.dev/pkg/apis/duck/v1"
+
 	eventingv1 "knative.dev/eventing/pkg/apis/duck/v1"
 	"knative.dev/eventing/pkg/apis/eventing"
 	"knative.dev/eventing/pkg/apis/messaging"
 	v1 "knative.dev/eventing/pkg/apis/messaging/v1"
-	duckv1 "knative.dev/pkg/apis/duck/v1"
 )
 
 // InMemoryChannelOption enables further configuration of a v1.InMemoryChannel.
@@ -219,7 +220,7 @@ func WithInMemoryChannelDLSResolvedFailed() InMemoryChannelOption {
 	return func(imc *v1.InMemoryChannel) {
 		imc.Status.MarkDeadLetterSinkResolvedFailed(
 			"Unable to get the DeadLetterSink's URI",
-			fmt.Sprintf(`services "%s" not found`,
+			fmt.Sprintf(`failed to get object test-namespace/test-dls: services "%s" not found`,
 				imc.Spec.Delivery.DeadLetterSink.Ref.Name,
 			),
 		)
diff --git a/vendor/knative.dev/hack/e2e-tests.sh b/vendor/knative.dev/hack/e2e-tests.sh
index 537b3867e..9178eac2c 100644
--- a/vendor/knative.dev/hack/e2e-tests.sh
+++ b/vendor/knative.dev/hack/e2e-tests.sh
@@ -73,9 +73,6 @@ function setup_test_cluster() {
   is_protected_cluster "${k8s_cluster}" && \
     abort "kubeconfig context set to ${k8s_cluster}, which is forbidden"
 
-  # Acquire cluster admin role for the current user.
-  acquire_cluster_admin_role "${k8s_cluster}"
-
   # Setup KO_DOCKER_REPO if it is a GKE cluster. Incorporate an element of
   # randomness to ensure that each run properly publishes images. Don't
   # owerwrite KO_DOCKER_REPO if already set.
diff --git a/vendor/knative.dev/hack/presubmit-tests.sh b/vendor/knative.dev/hack/presubmit-tests.sh
index 70a399c8e..08bd85d4a 100644
--- a/vendor/knative.dev/hack/presubmit-tests.sh
+++ b/vendor/knative.dev/hack/presubmit-tests.sh
@@ -266,8 +266,6 @@ function main() {
     git version
     echo ">> ko version"
     [[ -f /ko_version ]] && cat /ko_version || echo "unknown"
-    echo ">> bazel version"
-    [[ -f /bazel_version ]] && cat /bazel_version || echo "unknown"
     if [[ "${DOCKER_IN_DOCKER_ENABLED}" == "true" ]]; then
       echo ">> docker version"
       docker version
@@ -281,6 +279,8 @@ function main() {
       echo ">> maven version"
       mvn --version
     fi
+    echo ">> prow-tests image version"
+    [[ -f /commit_hash ]] && echo "Prow test image was built from $(cat /commit_hash) commit which is viewable at https://github.com/knative/test-infra/tree/$(cat /commit_hash) " || echo "unknown"
   fi
 
   [[ -z ${1:-} ]] && set -- "--all-tests"
diff --git a/vendor/knative.dev/pkg/test/upgrade/functions.go b/vendor/knative.dev/pkg/test/upgrade/functions.go
index 07cd80e92..98bf28340 100644
--- a/vendor/knative.dev/pkg/test/upgrade/functions.go
+++ b/vendor/knative.dev/pkg/test/upgrade/functions.go
@@ -17,19 +17,26 @@ limitations under the License.
 package upgrade
 
 import (
+	"bytes"
+	"strings"
 	"time"
 
+	"go.uber.org/zap/zapcore"
+
 	"go.uber.org/zap"
 )
 
 // Execute the Suite of upgrade tests with a Configuration given.
 func (s *Suite) Execute(c Configuration) {
-	l := c.logger()
+	l, err := c.logger(c.T)
+	if err != nil {
+		c.T.Fatal("Failed to build logger:", err)
+		return
+	}
 	se := suiteExecution{
 		suite:         enrichSuite(s),
 		configuration: c,
 		failed:        false,
-		logger:        l,
 	}
 	l.Info("🏃 Running upgrade test suite...")
 
@@ -93,10 +100,6 @@ func WaitForStopEvent(bc BackgroundContext, w WaitForStopEventConfiguration) {
 	}
 }
 
-func (c Configuration) logger() *zap.SugaredLogger {
-	return c.Log.Sugar()
-}
-
 // Name returns a friendly human readable text.
 func (s *StopEvent) Name() string {
 	return s.name
@@ -107,8 +110,19 @@ func handleStopEvent(
 	bc BackgroundContext,
 	wc WaitForStopEventConfiguration,
 ) {
-	bc.Log.Infof("%s have received a stop event: %s", wc.Name, se.Name())
-	defer close(se.Finished)
+	bc.Log.Debugf("%s have received a stop event: %s", wc.Name, se.Name())
+
+	logFn := se.logger.Info
+	logFn(wrapLog(bc.logBuffer.Dump()))
+
+	defer func() {
+		defer close(se.Finished)
+		if se.T.Failed() {
+			logFn = se.logger.Error
+		}
+		logFn(wrapLog(bc.logBuffer.Dump()))
+	}()
+
 	wc.OnStop(se)
 }
 
@@ -160,3 +174,58 @@ func (s *simpleBackgroundOperation) Setup() func(c Context) {
 func (s *simpleBackgroundOperation) Handler() func(bc BackgroundContext) {
 	return s.handler
 }
+
+func (b *threadSafeBuffer) Read(p []byte) (n int, err error) {
+	b.Mutex.Lock()
+	defer b.Mutex.Unlock()
+	return b.Buffer.Read(p)
+}
+
+func (b *threadSafeBuffer) Write(p []byte) (n int, err error) {
+	b.Mutex.Lock()
+	defer b.Mutex.Unlock()
+	return b.Buffer.Write(p)
+}
+
+// Dump returns the previous content of the buffer and creates a new
+// empty buffer for future writes.
+func (b *threadSafeBuffer) Dump() string {
+	b.Mutex.Lock()
+	defer b.Mutex.Unlock()
+	buf := b.Buffer.String()
+	b.Buffer = bytes.Buffer{}
+	return buf
+}
+
+// newInMemoryLoggerBuffer creates a logger that writes logs into a byte buffer.
+// This byte buffer is returned and can be used to process the logs at later stage.
+func newInMemoryLoggerBuffer(config Configuration) (*zap.Logger, *threadSafeBuffer) {
+	logConfig := config.logConfig()
+	buf := &threadSafeBuffer{}
+	core := zapcore.NewCore(
+		zapcore.NewConsoleEncoder(logConfig.Config.EncoderConfig),
+		zapcore.AddSync(buf),
+		logConfig.Config.Level)
+
+	var opts []zap.Option
+	if logConfig.Config.Development {
+		opts = append(opts, zap.Development())
+	}
+	if !logConfig.Config.DisableCaller {
+		opts = append(opts, zap.AddCaller())
+	}
+	stackLevel := zap.ErrorLevel
+	if logConfig.Config.Development {
+		stackLevel = zap.WarnLevel
+	}
+	if !logConfig.Config.DisableStacktrace {
+		opts = append(opts, zap.AddStacktrace(stackLevel))
+	}
+	return zap.New(core, opts...), buf
+}
+
+func wrapLog(log string) string {
+	s := strings.Join(strings.Split(log, "\n"), "\n⏳ ")
+	return "Rewind of background logs (prefix ⏳):\n" +
+		"⏳ " + strings.TrimSuffix(s, "⏳ ")
+}
diff --git a/vendor/knative.dev/pkg/test/upgrade/logger.go b/vendor/knative.dev/pkg/test/upgrade/logger.go
new file mode 100644
index 000000000..903544286
--- /dev/null
+++ b/vendor/knative.dev/pkg/test/upgrade/logger.go
@@ -0,0 +1,110 @@
+/*
+Copyright 2021 The Knative Authors
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package upgrade
+
+import (
+	"errors"
+	"fmt"
+	"net/url"
+	"strings"
+	"testing"
+
+	"go.uber.org/zap"
+)
+
+const testingTScheme = "testing-t"
+
+var (
+	// ErrInvalidTestingOutputMethod when given invalid testing output method.
+	ErrInvalidTestingOutputMethod = errors.New("invalid testing output method")
+	// ErrNoTestingTRegisteredForTest when no testing.TB registered for test.
+	ErrNoTestingTRegisteredForTest = errors.New("no testing.TB registered for test")
+
+	testingTeeBees = make(map[string]testing.TB)
+)
+
+func (c Configuration) logger(tb testing.TB) (*zap.SugaredLogger, error) {
+	// TODO(mgencur): Remove when dependent repositories use LogConfig instead of Log.
+	// This is for backwards compatibility.
+	if c.Log != nil {
+		return c.Log.Sugar(), nil
+	}
+
+	testName := tb.Name()
+	testingTeeBees[testName] = tb
+	cfg := c.logConfig().Config
+	outs := []string{fmt.Sprintf("%s://Log/%s", testingTScheme, testName)}
+	if isStandardOutputOnly(cfg.OutputPaths) {
+		cfg.OutputPaths = outs
+	} else {
+		cfg.OutputPaths = append(cfg.OutputPaths, outs...)
+	}
+	errOuts := []string{fmt.Sprintf("%s://Error/%s", testingTScheme, testName)}
+	if isStandardOutputOnly(cfg.ErrorOutputPaths) {
+		cfg.ErrorOutputPaths = errOuts
+	} else {
+		cfg.ErrorOutputPaths = append(cfg.ErrorOutputPaths, errOuts...)
+	}
+	err := zap.RegisterSink(testingTScheme, func(url *url.URL) (zap.Sink, error) {
+		var ok bool
+		testName = strings.TrimPrefix(url.Path, "/")
+		tb, ok = testingTeeBees[testName]
+		if !ok {
+			return nil, fmt.Errorf("%w: %s", ErrNoTestingTRegisteredForTest, testName)
+		}
+		switch url.Host {
+		case "Log":
+			return sink{writer: tb.Log}, nil
+		case "Error":
+			return sink{writer: tb.Error}, nil
+		}
+		return nil, fmt.Errorf("%w: %s", ErrInvalidTestingOutputMethod, url.Host)
+	})
+	if err != nil && !strings.HasPrefix(err.Error(), "sink factory already registered") {
+		return nil, err
+	}
+	var logger *zap.Logger
+	logger, err = cfg.Build(c.logConfig().Options...)
+	if err != nil {
+		return nil, err
+	}
+	return logger.Sugar(), nil
+}
+
+type sink struct {
+	writer func(args ...interface{})
+}
+
+func (t sink) Write(bytes []byte) (n int, err error) {
+	msg := string(bytes)
+	t.writer(msg)
+	return len(bytes), nil
+}
+
+func (t sink) Sync() error {
+	return nil
+}
+
+func (t sink) Close() error {
+	return nil
+}
+
+// isStandardOutputOnly checks the output paths and returns true, if they
+// contain only standard outputs.
+func isStandardOutputOnly(paths []string) bool {
+	return len(paths) == 1 && (paths[0] == "stderr" || paths[0] == "stdout")
+}
diff --git a/vendor/knative.dev/pkg/test/upgrade/private_types.go b/vendor/knative.dev/pkg/test/upgrade/private_types.go
index ab930e41b..d301b5d68 100644
--- a/vendor/knative.dev/pkg/test/upgrade/private_types.go
+++ b/vendor/knative.dev/pkg/test/upgrade/private_types.go
@@ -16,13 +16,15 @@ limitations under the License.
 
 package upgrade
 
-import "go.uber.org/zap"
+import (
+	"bytes"
+	"sync"
+)
 
 type suiteExecution struct {
 	suite         *enrichedSuite
 	configuration Configuration
 	failed        bool
-	logger        *zap.SugaredLogger
 }
 
 type enrichedSuite struct {
@@ -61,3 +63,10 @@ type simpleBackgroundOperation struct {
 	setup   func(c Context)
 	handler func(bc BackgroundContext)
 }
+
+// threadSafeBuffer avoids race conditions on bytes.Buffer.
+// See: https://stackoverflow.com/a/36226525/844449
+type threadSafeBuffer struct {
+	bytes.Buffer
+	sync.Mutex
+}
diff --git a/vendor/knative.dev/pkg/test/upgrade/steps.go b/vendor/knative.dev/pkg/test/upgrade/steps.go
index 1c08038ec..e4c270c0a 100644
--- a/vendor/knative.dev/pkg/test/upgrade/steps.go
+++ b/vendor/knative.dev/pkg/test/upgrade/steps.go
@@ -46,13 +46,16 @@ func (se *suiteExecution) preUpgradeTests(num int) {
 }
 
 func (se *suiteExecution) startContinualTests(num int) {
-	l := se.logger
 	operations := se.suite.tests.continual
 	groupTemplate := "%d) 🔄 Starting continual tests. " +
 		"%d tests are registered."
 	elementTemplate := `%d.%d) Starting continual tests of "%s".`
 	numOps := len(operations)
 	se.configuration.T.Run("ContinualTests", func(t *testing.T) {
+		l, err := se.configuration.logger(t)
+		if err != nil {
+			t.Fatal(err)
+		}
 		if numOps > 0 {
 			l.Infof(groupTemplate, num, numOps)
 			for i := range operations {
@@ -63,17 +66,28 @@ func (se *suiteExecution) startContinualTests(num int) {
 					return
 				}
 				setup := operation.Setup()
+
+				logger, buffer := newInMemoryLoggerBuffer(se.configuration)
 				t.Run("Setup"+operation.Name(), func(t *testing.T) {
-					setup(Context{T: t, Log: l})
+					l, err = se.configuration.logger(t)
+					if err != nil {
+						t.Fatal(err)
+					}
+					setup(Context{T: t, Log: logger.Sugar()})
 				})
+
 				handler := operation.Handler()
 				go func() {
-					bc := BackgroundContext{Log: l, Stop: operation.stop}
-					handler(bc)
+					handler(BackgroundContext{
+						Log:       logger.Sugar(),
+						Stop:      operation.stop,
+						logBuffer: buffer,
+					})
 				}()
-
 				se.failed = se.failed || t.Failed()
 				if se.failed {
+					// need to dump logs here, because verify will not be executed.
+					l.Error(wrapLog(buffer.Dump()))
 					return
 				}
 			}
@@ -85,18 +99,26 @@ func (se *suiteExecution) startContinualTests(num int) {
 }
 
 func (se *suiteExecution) verifyContinualTests(num int) {
-	l := se.logger
 	testsCount := len(se.suite.tests.continual)
 	if testsCount > 0 {
 		se.configuration.T.Run("VerifyContinualTests", func(t *testing.T) {
+			l, err := se.configuration.logger(t)
+			if err != nil {
+				t.Fatal(err)
+			}
 			l.Infof("%d) ✋ Verifying %d running continual tests.", num, testsCount)
 			for i, operation := range se.suite.tests.continual {
 				t.Run(operation.Name(), func(t *testing.T) {
+					l, err = se.configuration.logger(t)
+					if err != nil {
+						t.Fatal(err)
+					}
 					l.Infof(`%d.%d) Verifying "%s".`, num, i+1, operation.Name())
 					finished := make(chan struct{})
 					operation.stop <- StopEvent{
 						T:        t,
 						Finished: finished,
+						logger:   l,
 						name:     "Stop of " + operation.Name(),
 					}
 					<-finished
diff --git a/vendor/knative.dev/pkg/test/upgrade/suite_execution.go b/vendor/knative.dev/pkg/test/upgrade/suite_execution.go
index d926d4076..9f1783e68 100644
--- a/vendor/knative.dev/pkg/test/upgrade/suite_execution.go
+++ b/vendor/knative.dev/pkg/test/upgrade/suite_execution.go
@@ -21,8 +21,11 @@ import (
 )
 
 func (se *suiteExecution) processOperationGroup(op operationGroup) {
-	l := se.logger
 	se.configuration.T.Run(op.groupName, func(t *testing.T) {
+		l, err := se.configuration.logger(t)
+		if err != nil {
+			t.Fatal(err)
+		}
 		if len(op.operations) > 0 {
 			l.Infof(op.groupTemplate, op.num, len(op.operations))
 			for i, operation := range op.operations {
@@ -33,6 +36,10 @@ func (se *suiteExecution) processOperationGroup(op operationGroup) {
 				}
 				handler := operation.Handler()
 				t.Run(operation.Name(), func(t *testing.T) {
+					l, err = se.configuration.logger(t)
+					if err != nil {
+						t.Fatal(err)
+					}
 					handler(Context{T: t, Log: l})
 				})
 				se.failed = se.failed || t.Failed()
diff --git a/vendor/knative.dev/pkg/test/upgrade/types.go b/vendor/knative.dev/pkg/test/upgrade/types.go
index e4324f4a0..e46a516a4 100644
--- a/vendor/knative.dev/pkg/test/upgrade/types.go
+++ b/vendor/knative.dev/pkg/test/upgrade/types.go
@@ -84,10 +84,12 @@ type Context struct {
 // down to each handler of BackgroundOperation. It contains a StopEvent channel
 // which end user should use to obtain a testing.T for error reporting. Until
 // StopEvent is sent user may use zap.SugaredLogger to log state of execution if
-// necessary.
+// necessary. The logs are stored in a threadSafeBuffer and flushed to the test
+// output when the test fails.
 type BackgroundContext struct {
-	Log  *zap.SugaredLogger
-	Stop <-chan StopEvent
+	Log       *zap.SugaredLogger
+	Stop      <-chan StopEvent
+	logBuffer *threadSafeBuffer
 }
 
 // StopEvent represents an event that is to be received by background operation
@@ -98,6 +100,7 @@ type StopEvent struct {
 	T        *testing.T
 	Finished chan<- struct{}
 	name     string
+	logger   *zap.SugaredLogger
 }
 
 // WaitForStopEventConfiguration holds a values to be used be WaitForStopEvent
@@ -113,8 +116,28 @@ type WaitForStopEventConfiguration struct {
 
 // Configuration holds required and optional configuration to run upgrade tests.
 type Configuration struct {
-	T   *testing.T
+	T *testing.T
+	// TODO(mgencur): Remove when dependent repositories migrate to LogConfig.
+	// Keep this for backwards compatibility.
 	Log *zap.Logger
+	LogConfig
+}
+
+func (c Configuration) logConfig() LogConfig {
+	if len(c.LogConfig.Config.OutputPaths) == 0 {
+		c.LogConfig.Config = zap.NewDevelopmentConfig()
+	}
+	return c.LogConfig
+}
+
+// LogConfig holds the logger configuration. It allows for passing just the
+// logger configuration and also a custom function for building the resulting
+// logger.
+type LogConfig struct {
+	// Config from which the zap.Logger be created.
+	Config zap.Config
+	// Options holds options for the zap.Logger.
+	Options []zap.Option
 }
 
 // SuiteExecutor is to execute upgrade test suite.