Repository: knative-sandbox/eventing-kafka-broker
Pull request #2608 (2022-09-06 22:39:35)

Setting KEDA specific annotations from KafkaSource
Signed-off-by: aavarghese <avarghese@us.ibm.com>

<!-- Please include the 'why' behind your changes if no issue exists -->

## Proposed Changes

- Setting KEDA specific annotations from `KafkaSource` into ConsumerGroup API
- **If KEDA is installed**, `ConsumerGroup` replicas field is set by KEDA controller (initial value == KafkaSource consumers)
- **If KEDA is not installed**, `ConsumerGroup` replicas field is determined by KafkaSource controller

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

This pull-request has been approved by: *<a href="https://github.com/knative-sandbox/eventing-kafka-broker/pull/2608#" title="Author self-approved">aavarghese</a>*
**Once this PR has been reviewed and has the lgtm label**, please assign pierdipi for approval by writing `/assign @pierdipi` in a comment. For more information see:[The Kubernetes Code Review Process](https://git.k8s.io/community/contributors/guide/owners.md#the-code-review-process).

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).

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

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

Approvers can indicate their approval by writing `/approve` in a comment
Approvers can cancel approval by writing `/approve cancel` in a comment
</details>
<!-- META={"approvers":["pierdipi"]} -->
aavarghese: Waiting for #2607 to merge first. 

Part of breaking down https://github.com/knative-sandbox/eventing-kafka-broker/pull/2437 into smaller ones.
This **second** one is ready for review and merge.
codecov[bot]: # [Codecov](https://codecov.io/gh/knative-sandbox/eventing-kafka-broker/pull/2608?src=pr&el=h1&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=knative-sandbox) Report
> Merging [#2608](https://codecov.io/gh/knative-sandbox/eventing-kafka-broker/pull/2608?src=pr&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=knative-sandbox) (baf6519) into [main](https://codecov.io/gh/knative-sandbox/eventing-kafka-broker/commit/f2dbfa1788bbec0b84763a8c4e0d336696081db0?el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=knative-sandbox) (f2dbfa1) will **decrease** coverage by `6.07%`.
> The diff coverage is `90.90%`.

```diff
@@             Coverage Diff              @@
##               main    #2608      +/-   ##
============================================
- Coverage     62.47%   56.39%   -6.08%     
============================================
  Files           146       74      -72     
  Lines         10163     7694    -2469     
  Branches        229        0     -229     
============================================
- Hits           6349     4339    -2010     
+ Misses         3383     3056     -327     
+ Partials        431      299     -132     
```

| 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/2608?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/source/source.go](https://codecov.io/gh/knative-sandbox/eventing-kafka-broker/pull/2608/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=knative-sandbox#diff-Y29udHJvbC1wbGFuZS9wa2cvcmVjb25jaWxlci9zb3VyY2Uvc291cmNlLmdv) | `88.12% <90.62%> (+0.52%)` | :arrow_up: |
| [control-plane/pkg/reconciler/source/controller.go](https://codecov.io/gh/knative-sandbox/eventing-kafka-broker/pull/2608/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=knative-sandbox#diff-Y29udHJvbC1wbGFuZS9wa2cvcmVjb25jaWxlci9zb3VyY2UvY29udHJvbGxlci5nbw==) | `100.00% <100.00%> (ø)` | |
| [...ting/kafka/broker/core/utils/CollectionsUtils.java](https://codecov.io/gh/knative-sandbox/eventing-kafka-broker/pull/2608/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=knative-sandbox#diff-ZGF0YS1wbGFuZS9jb3JlL3NyYy9tYWluL2phdmEvZGV2L2tuYXRpdmUvZXZlbnRpbmcva2Fma2EvYnJva2VyL2NvcmUvdXRpbHMvQ29sbGVjdGlvbnNVdGlscy5qYXZh) | | |
| [...ka/broker/core/reconciler/ResourcesReconciler.java](https://codecov.io/gh/knative-sandbox/eventing-kafka-broker/pull/2608/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=knative-sandbox#diff-ZGF0YS1wbGFuZS9jb3JlL3NyYy9tYWluL2phdmEvZGV2L2tuYXRpdmUvZXZlbnRpbmcva2Fma2EvYnJva2VyL2NvcmUvcmVjb25jaWxlci9SZXNvdXJjZXNSZWNvbmNpbGVyLmphdmE=) | | |
| [...fka/broker/core/security/CredentialsValidator.java](https://codecov.io/gh/knative-sandbox/eventing-kafka-broker/pull/2608/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=knative-sandbox#diff-ZGF0YS1wbGFuZS9jb3JlL3NyYy9tYWluL2phdmEvZGV2L2tuYXRpdmUvZXZlbnRpbmcva2Fma2EvYnJva2VyL2NvcmUvc2VjdXJpdHkvQ3JlZGVudGlhbHNWYWxpZGF0b3IuamF2YQ==) | | |
| [...re/reconciler/impl/ResourcesReconcilerBuilder.java](https://codecov.io/gh/knative-sandbox/eventing-kafka-broker/pull/2608/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=knative-sandbox#diff-ZGF0YS1wbGFuZS9jb3JlL3NyYy9tYWluL2phdmEvZGV2L2tuYXRpdmUvZXZlbnRpbmcva2Fma2EvYnJva2VyL2NvcmUvcmVjb25jaWxlci9pbXBsL1Jlc291cmNlc1JlY29uY2lsZXJCdWlsZGVyLmphdmE=) | | |
| [.../core/reconciler/impl/ResourcesReconcilerImpl.java](https://codecov.io/gh/knative-sandbox/eventing-kafka-broker/pull/2608/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=knative-sandbox#diff-ZGF0YS1wbGFuZS9jb3JlL3NyYy9tYWluL2phdmEvZGV2L2tuYXRpdmUvZXZlbnRpbmcva2Fma2EvYnJva2VyL2NvcmUvcmVjb25jaWxlci9pbXBsL1Jlc291cmNlc1JlY29uY2lsZXJJbXBsLmphdmE=) | | |
| [...ting/kafka/broker/core/utils/ReferenceCounter.java](https://codecov.io/gh/knative-sandbox/eventing-kafka-broker/pull/2608/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=knative-sandbox#diff-ZGF0YS1wbGFuZS9jb3JlL3NyYy9tYWluL2phdmEvZGV2L2tuYXRpdmUvZXZlbnRpbmcva2Fma2EvYnJva2VyL2NvcmUvdXRpbHMvUmVmZXJlbmNlQ291bnRlci5qYXZh) | | |
| [...ver/impl/handler/ControlPlaneProbeRequestUtil.java](https://codecov.io/gh/knative-sandbox/eventing-kafka-broker/pull/2608/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=knative-sandbox#diff-ZGF0YS1wbGFuZS9yZWNlaXZlci9zcmMvbWFpbi9qYXZhL2Rldi9rbmF0aXZlL2V2ZW50aW5nL2thZmthL2Jyb2tlci9yZWNlaXZlci9pbXBsL2hhbmRsZXIvQ29udHJvbFBsYW5lUHJvYmVSZXF1ZXN0VXRpbC5qYXZh) | | |
| [...er/dispatcher/impl/consumer/InvalidCloudEvent.java](https://codecov.io/gh/knative-sandbox/eventing-kafka-broker/pull/2608/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=knative-sandbox#diff-ZGF0YS1wbGFuZS9kaXNwYXRjaGVyL3NyYy9tYWluL2phdmEvZGV2L2tuYXRpdmUvZXZlbnRpbmcva2Fma2EvYnJva2VyL2Rpc3BhdGNoZXIvaW1wbC9jb25zdW1lci9JbnZhbGlkQ2xvdWRFdmVudC5qYXZh) | | |
| ... and [64 more](https://codecov.io/gh/knative-sandbox/eventing-kafka-broker/pull/2608/diff?src=pr&el=tree-more&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=knative-sandbox) | |

Help us with your feedback. Take ten seconds to tell us [how you rate us](https://about.codecov.io/nps?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=knative-sandbox). Have a feature suggestion? [Share it here.](https://app.codecov.io/gh/feedback/?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=knative-sandbox)

knative-prow-robot: @aavarghese: PR needs rebase.

<details>

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

Test name | Commit | Details | Required | Rerun command
--- | --- | --- | --- | ---
build-tests_eventing-kafka-broker_main | f209dad97b5f9a45080c7aaf6a3fbd94045002aa | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2608/build-tests_eventing-kafka-broker_main/1567561302593769472) | true | `/test build-tests_eventing-kafka-broker_main`

[Your PR dashboard](https://prow.knative.dev/pr).

<details>

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

Test name | Commit | Details | Required | Rerun command
--- | --- | --- | --- | ---
build-tests_eventing-kafka-broker_main | f209dad97b5f9a45080c7aaf6a3fbd94045002aa | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2608/build-tests_eventing-kafka-broker_main/1567561302593769472) | true | `/test build-tests_eventing-kafka-broker_main`
reconciler-tests_eventing-kafka-broker_main | f209dad97b5f9a45080c7aaf6a3fbd94045002aa | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2608/reconciler-tests_eventing-kafka-broker_main/1567561303139028992) | true | `/test reconciler-tests_eventing-kafka-broker_main`

[Your PR dashboard](https://prow.knative.dev/pr).

<details>

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

Test name | Commit | Details | Required | Rerun command
--- | --- | --- | --- | ---
build-tests_eventing-kafka-broker_main | f209dad97b5f9a45080c7aaf6a3fbd94045002aa | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2608/build-tests_eventing-kafka-broker_main/1567561302593769472) | true | `/test build-tests_eventing-kafka-broker_main`
reconciler-tests_eventing-kafka-broker_main | f209dad97b5f9a45080c7aaf6a3fbd94045002aa | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2608/reconciler-tests_eventing-kafka-broker_main/1567561303139028992) | true | `/test reconciler-tests_eventing-kafka-broker_main`
reconciler-tests-namespaced-broker_eventing-kafka-broker_main | f209dad97b5f9a45080c7aaf6a3fbd94045002aa | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2608/reconciler-tests-namespaced-broker_eventing-kafka-broker_main/1567561303231303680) | true | `/test reconciler-tests-namespaced-broker_eventing-kafka-broker_main`

[Your PR dashboard](https://prow.knative.dev/pr).

<details>

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

Test name | Commit | Details | Required | Rerun command
--- | --- | --- | --- | ---
build-tests_eventing-kafka-broker_main | f209dad97b5f9a45080c7aaf6a3fbd94045002aa | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2608/build-tests_eventing-kafka-broker_main/1567561302593769472) | true | `/test build-tests_eventing-kafka-broker_main`
reconciler-tests_eventing-kafka-broker_main | f209dad97b5f9a45080c7aaf6a3fbd94045002aa | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2608/reconciler-tests_eventing-kafka-broker_main/1567561303139028992) | true | `/test reconciler-tests_eventing-kafka-broker_main`
reconciler-tests-namespaced-broker_eventing-kafka-broker_main | f209dad97b5f9a45080c7aaf6a3fbd94045002aa | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2608/reconciler-tests-namespaced-broker_eventing-kafka-broker_main/1567561303231303680) | true | `/test reconciler-tests-namespaced-broker_eventing-kafka-broker_main`
integration-tests-namespaced-broker_eventing-kafka-broker_main | f209dad97b5f9a45080c7aaf6a3fbd94045002aa | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2608/integration-tests-namespaced-broker_eventing-kafka-broker_main/1567561302933508096) | true | `/test integration-tests-namespaced-broker_eventing-kafka-broker_main`

[Your PR dashboard](https://prow.knative.dev/pr).

<details>

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

Test name | Commit | Details | Required | Rerun command
--- | --- | --- | --- | ---
build-tests_eventing-kafka-broker_main | f209dad97b5f9a45080c7aaf6a3fbd94045002aa | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2608/build-tests_eventing-kafka-broker_main/1567561302593769472) | true | `/test build-tests_eventing-kafka-broker_main`
reconciler-tests_eventing-kafka-broker_main | f209dad97b5f9a45080c7aaf6a3fbd94045002aa | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2608/reconciler-tests_eventing-kafka-broker_main/1567561303139028992) | true | `/test reconciler-tests_eventing-kafka-broker_main`
reconciler-tests-namespaced-broker_eventing-kafka-broker_main | f209dad97b5f9a45080c7aaf6a3fbd94045002aa | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2608/reconciler-tests-namespaced-broker_eventing-kafka-broker_main/1567561303231303680) | true | `/test reconciler-tests-namespaced-broker_eventing-kafka-broker_main`
integration-tests-namespaced-broker_eventing-kafka-broker_main | f209dad97b5f9a45080c7aaf6a3fbd94045002aa | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2608/integration-tests-namespaced-broker_eventing-kafka-broker_main/1567561302933508096) | true | `/test integration-tests-namespaced-broker_eventing-kafka-broker_main`
channel-integration-tests-sasl-ssl_eventing-kafka-broker_main | f209dad97b5f9a45080c7aaf6a3fbd94045002aa | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2608/channel-integration-tests-sasl-ssl_eventing-kafka-broker_main/1567561303491350528) | true | `/test channel-integration-tests-sasl-ssl_eventing-kafka-broker_main`

[Your PR dashboard](https://prow.knative.dev/pr).

<details>

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

Test name | Commit | Details | Required | Rerun command
--- | --- | --- | --- | ---
build-tests_eventing-kafka-broker_main | f209dad97b5f9a45080c7aaf6a3fbd94045002aa | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2608/build-tests_eventing-kafka-broker_main/1567561302593769472) | true | `/test build-tests_eventing-kafka-broker_main`
reconciler-tests_eventing-kafka-broker_main | f209dad97b5f9a45080c7aaf6a3fbd94045002aa | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2608/reconciler-tests_eventing-kafka-broker_main/1567561303139028992) | true | `/test reconciler-tests_eventing-kafka-broker_main`
reconciler-tests-namespaced-broker_eventing-kafka-broker_main | f209dad97b5f9a45080c7aaf6a3fbd94045002aa | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2608/reconciler-tests-namespaced-broker_eventing-kafka-broker_main/1567561303231303680) | true | `/test reconciler-tests-namespaced-broker_eventing-kafka-broker_main`
integration-tests-namespaced-broker_eventing-kafka-broker_main | f209dad97b5f9a45080c7aaf6a3fbd94045002aa | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2608/integration-tests-namespaced-broker_eventing-kafka-broker_main/1567561302933508096) | true | `/test integration-tests-namespaced-broker_eventing-kafka-broker_main`
channel-integration-tests-sasl-ssl_eventing-kafka-broker_main | f209dad97b5f9a45080c7aaf6a3fbd94045002aa | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2608/channel-integration-tests-sasl-ssl_eventing-kafka-broker_main/1567561303491350528) | true | `/test channel-integration-tests-sasl-ssl_eventing-kafka-broker_main`
upgrade-tests_eventing-kafka-broker_main | f209dad97b5f9a45080c7aaf6a3fbd94045002aa | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2608/upgrade-tests_eventing-kafka-broker_main/1567561303042560000) | true | `/test upgrade-tests_eventing-kafka-broker_main`

[Your PR dashboard](https://prow.knative.dev/pr).

<details>

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

Test name | Commit | Details | Required | Rerun command
--- | --- | --- | --- | ---
build-tests_eventing-kafka-broker_main | f209dad97b5f9a45080c7aaf6a3fbd94045002aa | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2608/build-tests_eventing-kafka-broker_main/1567561302593769472) | true | `/test build-tests_eventing-kafka-broker_main`
reconciler-tests_eventing-kafka-broker_main | f209dad97b5f9a45080c7aaf6a3fbd94045002aa | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2608/reconciler-tests_eventing-kafka-broker_main/1567561303139028992) | true | `/test reconciler-tests_eventing-kafka-broker_main`
reconciler-tests-namespaced-broker_eventing-kafka-broker_main | f209dad97b5f9a45080c7aaf6a3fbd94045002aa | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2608/reconciler-tests-namespaced-broker_eventing-kafka-broker_main/1567561303231303680) | true | `/test reconciler-tests-namespaced-broker_eventing-kafka-broker_main`
integration-tests-namespaced-broker_eventing-kafka-broker_main | f209dad97b5f9a45080c7aaf6a3fbd94045002aa | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2608/integration-tests-namespaced-broker_eventing-kafka-broker_main/1567561302933508096) | true | `/test integration-tests-namespaced-broker_eventing-kafka-broker_main`
channel-integration-tests-sasl-ssl_eventing-kafka-broker_main | f209dad97b5f9a45080c7aaf6a3fbd94045002aa | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2608/channel-integration-tests-sasl-ssl_eventing-kafka-broker_main/1567561303491350528) | true | `/test channel-integration-tests-sasl-ssl_eventing-kafka-broker_main`
upgrade-tests_eventing-kafka-broker_main | f209dad97b5f9a45080c7aaf6a3fbd94045002aa | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2608/upgrade-tests_eventing-kafka-broker_main/1567561303042560000) | true | `/test upgrade-tests_eventing-kafka-broker_main`
channel-integration-tests-ssl_eventing-kafka-broker_main | f209dad97b5f9a45080c7aaf6a3fbd94045002aa | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2608/channel-integration-tests-ssl_eventing-kafka-broker_main/1567561303378104320) | true | `/test channel-integration-tests-ssl_eventing-kafka-broker_main`

[Your PR dashboard](https://prow.knative.dev/pr).

<details>

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

Test name | Commit | Details | Required | Rerun command
--- | --- | --- | --- | ---
build-tests_eventing-kafka-broker_main | f209dad97b5f9a45080c7aaf6a3fbd94045002aa | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2608/build-tests_eventing-kafka-broker_main/1567561302593769472) | true | `/test build-tests_eventing-kafka-broker_main`
reconciler-tests_eventing-kafka-broker_main | f209dad97b5f9a45080c7aaf6a3fbd94045002aa | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2608/reconciler-tests_eventing-kafka-broker_main/1567561303139028992) | true | `/test reconciler-tests_eventing-kafka-broker_main`
reconciler-tests-namespaced-broker_eventing-kafka-broker_main | f209dad97b5f9a45080c7aaf6a3fbd94045002aa | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2608/reconciler-tests-namespaced-broker_eventing-kafka-broker_main/1567561303231303680) | true | `/test reconciler-tests-namespaced-broker_eventing-kafka-broker_main`
integration-tests-namespaced-broker_eventing-kafka-broker_main | f209dad97b5f9a45080c7aaf6a3fbd94045002aa | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2608/integration-tests-namespaced-broker_eventing-kafka-broker_main/1567561302933508096) | true | `/test integration-tests-namespaced-broker_eventing-kafka-broker_main`
channel-integration-tests-sasl-ssl_eventing-kafka-broker_main | f209dad97b5f9a45080c7aaf6a3fbd94045002aa | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2608/channel-integration-tests-sasl-ssl_eventing-kafka-broker_main/1567561303491350528) | true | `/test channel-integration-tests-sasl-ssl_eventing-kafka-broker_main`
upgrade-tests_eventing-kafka-broker_main | f209dad97b5f9a45080c7aaf6a3fbd94045002aa | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2608/upgrade-tests_eventing-kafka-broker_main/1567561303042560000) | true | `/test upgrade-tests_eventing-kafka-broker_main`
channel-integration-tests-ssl_eventing-kafka-broker_main | f209dad97b5f9a45080c7aaf6a3fbd94045002aa | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2608/channel-integration-tests-ssl_eventing-kafka-broker_main/1567561303378104320) | true | `/test channel-integration-tests-ssl_eventing-kafka-broker_main`
channel-reconciler-tests-sasl-ssl_eventing-kafka-broker_main | f209dad97b5f9a45080c7aaf6a3fbd94045002aa | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2608/channel-reconciler-tests-sasl-ssl_eventing-kafka-broker_main/1567561304212770816) | true | `/test channel-reconciler-tests-sasl-ssl_eventing-kafka-broker_main`

[Your PR dashboard](https://prow.knative.dev/pr).

<details>

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

Test name | Commit | Details | Required | Rerun command
--- | --- | --- | --- | ---
build-tests_eventing-kafka-broker_main | f209dad97b5f9a45080c7aaf6a3fbd94045002aa | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2608/build-tests_eventing-kafka-broker_main/1567561302593769472) | true | `/test build-tests_eventing-kafka-broker_main`
reconciler-tests_eventing-kafka-broker_main | f209dad97b5f9a45080c7aaf6a3fbd94045002aa | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2608/reconciler-tests_eventing-kafka-broker_main/1567561303139028992) | true | `/test reconciler-tests_eventing-kafka-broker_main`
reconciler-tests-namespaced-broker_eventing-kafka-broker_main | f209dad97b5f9a45080c7aaf6a3fbd94045002aa | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2608/reconciler-tests-namespaced-broker_eventing-kafka-broker_main/1567561303231303680) | true | `/test reconciler-tests-namespaced-broker_eventing-kafka-broker_main`
integration-tests-namespaced-broker_eventing-kafka-broker_main | f209dad97b5f9a45080c7aaf6a3fbd94045002aa | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2608/integration-tests-namespaced-broker_eventing-kafka-broker_main/1567561302933508096) | true | `/test integration-tests-namespaced-broker_eventing-kafka-broker_main`
channel-integration-tests-sasl-ssl_eventing-kafka-broker_main | f209dad97b5f9a45080c7aaf6a3fbd94045002aa | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2608/channel-integration-tests-sasl-ssl_eventing-kafka-broker_main/1567561303491350528) | true | `/test channel-integration-tests-sasl-ssl_eventing-kafka-broker_main`
upgrade-tests_eventing-kafka-broker_main | f209dad97b5f9a45080c7aaf6a3fbd94045002aa | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2608/upgrade-tests_eventing-kafka-broker_main/1567561303042560000) | true | `/test upgrade-tests_eventing-kafka-broker_main`
channel-integration-tests-ssl_eventing-kafka-broker_main | f209dad97b5f9a45080c7aaf6a3fbd94045002aa | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2608/channel-integration-tests-ssl_eventing-kafka-broker_main/1567561303378104320) | true | `/test channel-integration-tests-ssl_eventing-kafka-broker_main`
channel-reconciler-tests-sasl-ssl_eventing-kafka-broker_main | f209dad97b5f9a45080c7aaf6a3fbd94045002aa | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2608/channel-reconciler-tests-sasl-ssl_eventing-kafka-broker_main/1567561304212770816) | true | `/test channel-reconciler-tests-sasl-ssl_eventing-kafka-broker_main`
channel-integration-tests-sasl-plain_eventing-kafka-broker_main | f209dad97b5f9a45080c7aaf6a3fbd94045002aa | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2608/channel-integration-tests-sasl-plain_eventing-kafka-broker_main/1567561303562653696) | true | `/test channel-integration-tests-sasl-plain_eventing-kafka-broker_main`

[Your PR dashboard](https://prow.knative.dev/pr).

<details>

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

Test name | Commit | Details | Required | Rerun command
--- | --- | --- | --- | ---
reconciler-tests_eventing-kafka-broker_main | f209dad97b5f9a45080c7aaf6a3fbd94045002aa | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2608/reconciler-tests_eventing-kafka-broker_main/1567561303139028992) | true | `/test reconciler-tests_eventing-kafka-broker_main`
reconciler-tests-namespaced-broker_eventing-kafka-broker_main | f209dad97b5f9a45080c7aaf6a3fbd94045002aa | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2608/reconciler-tests-namespaced-broker_eventing-kafka-broker_main/1567561303231303680) | true | `/test reconciler-tests-namespaced-broker_eventing-kafka-broker_main`
integration-tests-namespaced-broker_eventing-kafka-broker_main | f209dad97b5f9a45080c7aaf6a3fbd94045002aa | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2608/integration-tests-namespaced-broker_eventing-kafka-broker_main/1567561302933508096) | true | `/test integration-tests-namespaced-broker_eventing-kafka-broker_main`
channel-integration-tests-sasl-ssl_eventing-kafka-broker_main | f209dad97b5f9a45080c7aaf6a3fbd94045002aa | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2608/channel-integration-tests-sasl-ssl_eventing-kafka-broker_main/1567561303491350528) | true | `/test channel-integration-tests-sasl-ssl_eventing-kafka-broker_main`
upgrade-tests_eventing-kafka-broker_main | f209dad97b5f9a45080c7aaf6a3fbd94045002aa | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2608/upgrade-tests_eventing-kafka-broker_main/1567561303042560000) | true | `/test upgrade-tests_eventing-kafka-broker_main`
channel-integration-tests-ssl_eventing-kafka-broker_main | f209dad97b5f9a45080c7aaf6a3fbd94045002aa | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2608/channel-integration-tests-ssl_eventing-kafka-broker_main/1567561303378104320) | true | `/test channel-integration-tests-ssl_eventing-kafka-broker_main`
channel-reconciler-tests-sasl-ssl_eventing-kafka-broker_main | f209dad97b5f9a45080c7aaf6a3fbd94045002aa | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2608/channel-reconciler-tests-sasl-ssl_eventing-kafka-broker_main/1567561304212770816) | true | `/test channel-reconciler-tests-sasl-ssl_eventing-kafka-broker_main`
channel-integration-tests-sasl-plain_eventing-kafka-broker_main | f209dad97b5f9a45080c7aaf6a3fbd94045002aa | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2608/channel-integration-tests-sasl-plain_eventing-kafka-broker_main/1567561303562653696) | true | `/test channel-integration-tests-sasl-plain_eventing-kafka-broker_main`
channel-reconciler-tests-ssl_eventing-kafka-broker_main | 186aab872bffdeba87be0b10c548c0eb5afb619c | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2608/channel-reconciler-tests-ssl_eventing-kafka-broker_main/1567592080283275264) | true | `/test channel-reconciler-tests-ssl_eventing-kafka-broker_main`

[Your PR dashboard](https://prow.knative.dev/pr).

<details>

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

<details>

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

Test name | Commit | Details | Required | Rerun command
--- | --- | --- | --- | ---
channel-reconciler-tests-ssl_eventing-kafka-broker_main | b7a8612a2856d323d43a3dbedfc61374cbf38877 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2608/channel-reconciler-tests-ssl_eventing-kafka-broker_main/1567932448459722752) | true | `/test channel-reconciler-tests-ssl_eventing-kafka-broker_main`

[Your PR dashboard](https://prow.knative.dev/pr).

<details>

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

Test name | Commit | Details | Required | Rerun command
--- | --- | --- | --- | ---
channel-reconciler-tests-ssl_eventing-kafka-broker_main | b7a8612a2856d323d43a3dbedfc61374cbf38877 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2608/channel-reconciler-tests-ssl_eventing-kafka-broker_main/1567932448459722752) | true | `/test channel-reconciler-tests-ssl_eventing-kafka-broker_main`
channel-reconciler-tests-sasl-plain_eventing-kafka-broker_main | b7a8612a2856d323d43a3dbedfc61374cbf38877 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2608/channel-reconciler-tests-sasl-plain_eventing-kafka-broker_main/1567932450133250048) | true | `/test channel-reconciler-tests-sasl-plain_eventing-kafka-broker_main`

[Your PR dashboard](https://prow.knative.dev/pr).

<details>

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

Test name | Commit | Details | Required | Rerun command
--- | --- | --- | --- | ---
channel-reconciler-tests-ssl_eventing-kafka-broker_main | b7a8612a2856d323d43a3dbedfc61374cbf38877 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2608/channel-reconciler-tests-ssl_eventing-kafka-broker_main/1567932448459722752) | true | `/test channel-reconciler-tests-ssl_eventing-kafka-broker_main`
channel-reconciler-tests-sasl-plain_eventing-kafka-broker_main | b7a8612a2856d323d43a3dbedfc61374cbf38877 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2608/channel-reconciler-tests-sasl-plain_eventing-kafka-broker_main/1567932450133250048) | true | `/test channel-reconciler-tests-sasl-plain_eventing-kafka-broker_main`
channel-reconciler-tests-sasl-ssl_eventing-kafka-broker_main | b7a8612a2856d323d43a3dbedfc61374cbf38877 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2608/channel-reconciler-tests-sasl-ssl_eventing-kafka-broker_main/1567932449294389248) | true | `/test channel-reconciler-tests-sasl-ssl_eventing-kafka-broker_main`

[Your PR dashboard](https://prow.knative.dev/pr).

<details>

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

Test name | Commit | Details | Required | Rerun command
--- | --- | --- | --- | ---
reconciler-tests_eventing-kafka-broker_main | 02a5ad82dfad3bcf5a26830c45b348a0cc21dc6a | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2608/reconciler-tests_eventing-kafka-broker_main/1568002507471327232) | true | `/test reconciler-tests_eventing-kafka-broker_main`

[Your PR dashboard](https://prow.knative.dev/pr).

<details>

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

This pull-request has been approved by: *<a href="https://github.com/knative-sandbox/eventing-kafka-broker/pull/2608#" title="Author self-approved">aavarghese</a>*, *<a href="https://github.com/knative-sandbox/eventing-kafka-broker/pull/2608#pullrequestreview-1101755024" title="Approved">matzew</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)~~ [matzew]

Approvers can indicate their approval by writing `/approve` in a comment
Approvers can cancel approval by writing `/approve cancel` in a comment
</details>
<!-- META={"approvers":[]} -->

Patch:
diff --git a/control-plane/pkg/keda/keda.go b/control-plane/pkg/keda/keda.go
index 5acdcde44..7397e6adb 100644
--- a/control-plane/pkg/keda/keda.go
+++ b/control-plane/pkg/keda/keda.go
@@ -204,3 +204,25 @@ func addAuthSecretTargetRef(parameter string, secretKeyRef v1beta1.SecretValueFr
 	secretTargetRefs = append(secretTargetRefs, ref)
 	return secretTargetRefs
 }
+
+func SetAutoscalingAnnotations(objannotations map[string]string) map[string]string {
+	if objannotations != nil {
+		cgannotations := map[string]string{}
+		setAnnotation(objannotations, keda.AutoscalingClassAnnotation, cgannotations)
+		setAnnotation(objannotations, keda.AutoscalingMinScaleAnnotation, cgannotations)
+		setAnnotation(objannotations, keda.AutoscalingMaxScaleAnnotation, cgannotations)
+		setAnnotation(objannotations, keda.KedaAutoscalingPollingIntervalAnnotation, cgannotations)
+		setAnnotation(objannotations, keda.KedaAutoscalingCooldownPeriodAnnotation, cgannotations)
+		setAnnotation(objannotations, keda.KedaAutoscalingKafkaLagThreshold, cgannotations)
+		return cgannotations
+	}
+	return nil
+}
+
+func setAnnotation(objannotations map[string]string, key string, cgannotations map[string]string) {
+	value, ok := objannotations[key]
+	if !ok || value == "" {
+		return
+	}
+	cgannotations[key] = value
+}
diff --git a/control-plane/pkg/reconciler/source/controller.go b/control-plane/pkg/reconciler/source/controller.go
index 39558b676..f1fbe98fd 100644
--- a/control-plane/pkg/reconciler/source/controller.go
+++ b/control-plane/pkg/reconciler/source/controller.go
@@ -30,6 +30,7 @@ import (
 	kafkainformer "knative.dev/eventing-kafka/pkg/client/injection/informers/sources/v1beta1/kafkasource"
 	"knative.dev/eventing-kafka/pkg/client/injection/reconciler/sources/v1beta1/kafkasource"
 
+	kedaclient "knative.dev/eventing-autoscaler-keda/third_party/pkg/client/injection/client"
 	"knative.dev/eventing-kafka-broker/control-plane/pkg/reconciler/consumergroup"
 )
 
@@ -43,6 +44,7 @@ func NewController(ctx context.Context) *controller.Impl {
 	r := &Reconciler{
 		ConsumerGroupLister: consumerGroupInformer.Lister(),
 		InternalsClient:     consumergroupclient.Get(ctx),
+		KedaClient:          kedaclient.Get(ctx),
 	}
 
 	impl := kafkasource.NewImpl(ctx, r)
diff --git a/control-plane/pkg/reconciler/source/source.go b/control-plane/pkg/reconciler/source/source.go
index c3536ce35..67920d9bf 100644
--- a/control-plane/pkg/reconciler/source/source.go
+++ b/control-plane/pkg/reconciler/source/source.go
@@ -37,6 +37,9 @@ import (
 	internalscg "knative.dev/eventing-kafka-broker/control-plane/pkg/apis/internals/kafka/eventing/v1alpha1"
 	internalsclient "knative.dev/eventing-kafka-broker/control-plane/pkg/client/internals/kafka/clientset/versioned"
 	internalslst "knative.dev/eventing-kafka-broker/control-plane/pkg/client/internals/kafka/listers/eventing/v1alpha1"
+
+	kedaclientset "knative.dev/eventing-autoscaler-keda/third_party/pkg/client/clientset/versioned"
+	kedafunc "knative.dev/eventing-kafka-broker/control-plane/pkg/keda"
 )
 
 const (
@@ -55,6 +58,7 @@ var (
 type Reconciler struct {
 	ConsumerGroupLister internalslst.ConsumerGroupLister
 	InternalsClient     internalsclient.Interface
+	KedaClient          kedaclientset.Interface
 }
 
 func (r *Reconciler) ReconcileKind(ctx context.Context, ks *sources.KafkaSource) reconciler.Event {
@@ -135,7 +139,6 @@ func (r Reconciler) reconcileConsumerGroup(ctx context.Context, ks *sources.Kafk
 					Reply:      &internalscg.ReplyStrategy{NoReply: &internalscg.NoReply{Enabled: true}},
 				},
 			},
-			Replicas: ks.Spec.Consumers,
 		},
 	}
 
@@ -144,15 +147,20 @@ func (r Reconciler) reconcileConsumerGroup(ctx context.Context, ks *sources.Kafk
 			Extensions: ks.Spec.CloudEventOverrides.Extensions,
 		}
 	}
+
 	if kt, ok := ks.Labels[sources.KafkaKeyTypeLabel]; ok && len(kt) > 0 {
 		expectedCg.Spec.Template.Spec.Configs.KeyType = &kt
 	}
 
+	// TODO: make keda annotation values configurable and maybe unexposed
+	expectedCg.Annotations = kedafunc.SetAutoscalingAnnotations(ks.Annotations)
+
 	cg, err := r.ConsumerGroupLister.ConsumerGroups(ks.GetNamespace()).Get(string(ks.UID)) //Get by consumer group id
 	if err != nil && !apierrors.IsNotFound(err) {
 		return nil, err
 	}
 	if apierrors.IsNotFound(err) {
+		expectedCg.Spec.Replicas = ks.Spec.Consumers
 		cg, err := r.InternalsClient.InternalV1alpha1().ConsumerGroups(expectedCg.GetNamespace()).Create(ctx, expectedCg, metav1.CreateOptions{})
 		if err != nil && !apierrors.IsAlreadyExists(err) {
 			return nil, fmt.Errorf("failed to create consumer group %s/%s: %w", expectedCg.GetNamespace(), expectedCg.GetName(), err)
@@ -160,7 +168,7 @@ func (r Reconciler) reconcileConsumerGroup(ctx context.Context, ks *sources.Kafk
 		return cg, nil
 	}
 
-	if equality.Semantic.DeepDerivative(expectedCg.Spec, cg.Spec) {
+	if equality.Semantic.DeepDerivative(expectedCg.Spec, cg.Spec) && equality.Semantic.DeepDerivative(expectedCg.Annotations, cg.Annotations) {
 		return cg, nil
 	}
 
@@ -170,6 +178,19 @@ func (r Reconciler) reconcileConsumerGroup(ctx context.Context, ks *sources.Kafk
 		Spec:       expectedCg.Spec,
 		Status:     cg.Status,
 	}
+	newCg.Annotations = expectedCg.Annotations
+
+	// If KEDA is not enabled, then we must update the ConsumerGroup replicas to match KafkaSource consumers
+	// TODO: code below failing unit tests with err: "panic: interface conversion: testing.ActionImpl is not testing.GetAction: missing method GetName"
+	/*if err := discovery.ServerSupportsVersion(r.KubeClient.Discovery(), keda.KedaSchemeGroupVersion); err != nil {
+		newCg.Spec.Replicas = ks.Spec.Consumers
+	}*/
+
+	_, err = r.KedaClient.KedaV1alpha1().ScaledObjects(cg.GetNamespace()).List(ctx, metav1.ListOptions{})
+	if err != nil && apierrors.IsNotFound(err) {
+		newCg.Spec.Replicas = ks.Spec.Consumers
+	}
+
 	if cg, err = r.InternalsClient.InternalV1alpha1().ConsumerGroups(cg.GetNamespace()).Update(ctx, newCg, metav1.UpdateOptions{}); err != nil {
 		return nil, fmt.Errorf("failed to update consumer group %s/%s: %w", newCg.GetNamespace(), newCg.GetName(), err)
 	}
diff --git a/data-plane/core/src/main/java/dev/knative/eventing/kafka/broker/core/metrics/Metrics.java b/data-plane/core/src/main/java/dev/knative/eventing/kafka/broker/core/metrics/Metrics.java
index f5254cb07..6d51db9e4 100644
--- a/data-plane/core/src/main/java/dev/knative/eventing/kafka/broker/core/metrics/Metrics.java
+++ b/data-plane/core/src/main/java/dev/knative/eventing/kafka/broker/core/metrics/Metrics.java
@@ -15,15 +15,18 @@
  */
 package dev.knative.eventing.kafka.broker.core.metrics;
 
+import dev.knative.eventing.kafka.broker.contract.DataPlaneContract;
 import dev.knative.eventing.kafka.broker.core.AsyncCloseable;
 import dev.knative.eventing.kafka.broker.core.utils.BaseEnv;
 import io.micrometer.core.instrument.Counter;
 import io.micrometer.core.instrument.DistributionSummary;
 import io.micrometer.core.instrument.Gauge;
+import io.micrometer.core.instrument.Meter;
 import io.micrometer.core.instrument.MeterRegistry;
-import io.micrometer.core.instrument.Tags;
+import io.micrometer.core.instrument.Tag;
 import io.micrometer.core.instrument.binder.BaseUnits;
 import io.micrometer.core.instrument.binder.kafka.KafkaClientMetrics;
+import io.micrometer.core.instrument.search.Search;
 import io.micrometer.prometheus.PrometheusConfig;
 import io.micrometer.prometheus.PrometheusMeterRegistry;
 import io.vertx.core.Future;
@@ -42,6 +45,7 @@ import org.apache.kafka.clients.producer.Producer;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import java.util.Collection;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 import java.util.concurrent.RejectedExecutionException;
@@ -293,6 +297,18 @@ public class Metrics {
       .baseUnit(Metrics.Units.DIMENSIONLESS);
   }
 
+  public static Collection<Meter> searchResourceMeters(final MeterRegistry registry, final DataPlaneContract.Reference ref) {
+    return Search.in(registry)
+      .tags(resourceRefTags(ref))
+      .meters();
+  }
+
+  public static Collection<Meter> searchEgressMeters(final MeterRegistry registry, final DataPlaneContract.Reference ref) {
+    return Search.in(registry)
+      .tags(egressRefTags(ref))
+      .meters();
+  }
+
   public static DistributionSummary.Builder eventDispatchLatency(final io.micrometer.core.instrument.Tags tags) {
     return DistributionSummary
       .builder(EVENT_DISPATCH_LATENCY)
@@ -337,4 +353,18 @@ public class Metrics {
       .tags(tags)
       .baseUnit(Metrics.Units.DIMENSIONLESS);
   }
+
+  public static io.micrometer.core.instrument.Tags resourceRefTags(final DataPlaneContract.Reference ref) {
+    return io.micrometer.core.instrument.Tags.of(
+      Tag.of(Metrics.Tags.RESOURCE_NAME, ref.getName()),
+      Tag.of(Metrics.Tags.RESOURCE_NAMESPACE, ref.getNamespace())
+    );
+  }
+
+  public static io.micrometer.core.instrument.Tags egressRefTags(final DataPlaneContract.Reference ref) {
+    return io.micrometer.core.instrument.Tags.of(
+      Tag.of(Metrics.Tags.CONSUMER_NAME, ref.getName()),
+      Tag.of(Metrics.Tags.RESOURCE_NAMESPACE, ref.getNamespace())
+    );
+  }
 }
diff --git a/data-plane/core/src/main/java/dev/knative/eventing/kafka/broker/core/reconciler/IngressReconcilerListener.java b/data-plane/core/src/main/java/dev/knative/eventing/kafka/broker/core/reconciler/IngressReconcilerListener.java
index 58f30784b..fbf78238d 100644
--- a/data-plane/core/src/main/java/dev/knative/eventing/kafka/broker/core/reconciler/IngressReconcilerListener.java
+++ b/data-plane/core/src/main/java/dev/knative/eventing/kafka/broker/core/reconciler/IngressReconcilerListener.java
@@ -16,8 +16,13 @@
 package dev.knative.eventing.kafka.broker.core.reconciler;
 
 import dev.knative.eventing.kafka.broker.contract.DataPlaneContract;
+import io.vertx.core.CompositeFuture;
 import io.vertx.core.Future;
 
+import java.util.Arrays;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
 public interface IngressReconcilerListener {
 
   Future<Void> onNewIngress(DataPlaneContract.Resource resource, DataPlaneContract.Ingress ingress);
@@ -26,4 +31,44 @@ public interface IngressReconcilerListener {
 
   Future<Void> onDeleteIngress(DataPlaneContract.Resource resource, DataPlaneContract.Ingress ingress);
 
+  static IngressReconcilerListener all(final IngressReconcilerListener... listeners) {
+    return new CompositeIngressReconcilerLister(listeners);
+  }
+}
+
+class CompositeIngressReconcilerLister implements IngressReconcilerListener {
+
+  private IngressReconcilerListener[] listeners;
+
+  public CompositeIngressReconcilerLister(final IngressReconcilerListener... listeners) {
+    Objects.requireNonNull(listeners);
+    this.listeners = listeners;
+  }
+
+  @Override
+  public Future<Void> onNewIngress(DataPlaneContract.Resource resource, DataPlaneContract.Ingress ingress) {
+    return CompositeFuture.all(
+      Arrays.stream(listeners)
+        .map(l -> l.onNewIngress(resource, ingress))
+        .collect(Collectors.toList())
+    ).mapEmpty();
+  }
+
+  @Override
+  public Future<Void> onUpdateIngress(DataPlaneContract.Resource resource, DataPlaneContract.Ingress ingress) {
+    return CompositeFuture.all(
+      Arrays.stream(listeners)
+        .map(l -> l.onUpdateIngress(resource, ingress))
+        .collect(Collectors.toList())
+    ).mapEmpty();
+  }
+
+  @Override
+  public Future<Void> onDeleteIngress(DataPlaneContract.Resource resource, DataPlaneContract.Ingress ingress) {
+    return CompositeFuture.all(
+      Arrays.stream(listeners)
+        .map(l -> l.onDeleteIngress(resource, ingress))
+        .collect(Collectors.toList())
+    ).mapEmpty();
+  }
 }
diff --git a/data-plane/dispatcher/src/main/java/dev/knative/eventing/kafka/broker/dispatcher/impl/RecordDispatcherImpl.java b/data-plane/dispatcher/src/main/java/dev/knative/eventing/kafka/broker/dispatcher/impl/RecordDispatcherImpl.java
index aa4acc35f..e3fa0b59e 100644
--- a/data-plane/dispatcher/src/main/java/dev/knative/eventing/kafka/broker/dispatcher/impl/RecordDispatcherImpl.java
+++ b/data-plane/dispatcher/src/main/java/dev/knative/eventing/kafka/broker/dispatcher/impl/RecordDispatcherImpl.java
@@ -504,6 +504,10 @@ public class RecordDispatcherImpl implements RecordDispatcher {
   public Future<Void> close() {
     this.closed.set(true);
 
+    Metrics
+      .searchEgressMeters(meterRegistry, resourceContext.getEgress().getReference())
+      .forEach(meterRegistry::remove);
+
     if (inFlightEvents.get() == 0) {
       closePromise.tryComplete();
     }
diff --git a/data-plane/receiver/src/main/java/dev/knative/eventing/kafka/broker/receiver/IngressRequestHandler.java b/data-plane/receiver/src/main/java/dev/knative/eventing/kafka/broker/receiver/IngressRequestHandler.java
index 9fab7b06c..c2a2877c0 100644
--- a/data-plane/receiver/src/main/java/dev/knative/eventing/kafka/broker/receiver/IngressRequestHandler.java
+++ b/data-plane/receiver/src/main/java/dev/knative/eventing/kafka/broker/receiver/IngressRequestHandler.java
@@ -15,10 +15,12 @@
  */
 package dev.knative.eventing.kafka.broker.receiver;
 
+import dev.knative.eventing.kafka.broker.core.reconciler.IngressReconcilerListener;
+
 /**
  * This class handles incoming ingress requests.
  */
-public interface IngressRequestHandler {
+public interface IngressRequestHandler extends IngressReconcilerListener {
 
   void handle(RequestContext request, IngressProducer producer);
 
diff --git a/data-plane/receiver/src/main/java/dev/knative/eventing/kafka/broker/receiver/impl/ReceiverVerticle.java b/data-plane/receiver/src/main/java/dev/knative/eventing/kafka/broker/receiver/impl/ReceiverVerticle.java
index f817b775d..82bc7033d 100644
--- a/data-plane/receiver/src/main/java/dev/knative/eventing/kafka/broker/receiver/impl/ReceiverVerticle.java
+++ b/data-plane/receiver/src/main/java/dev/knative/eventing/kafka/broker/receiver/impl/ReceiverVerticle.java
@@ -15,6 +15,7 @@
  */
 package dev.knative.eventing.kafka.broker.receiver.impl;
 
+import dev.knative.eventing.kafka.broker.core.reconciler.IngressReconcilerListener;
 import dev.knative.eventing.kafka.broker.core.reconciler.ResourcesReconciler;
 import dev.knative.eventing.kafka.broker.receiver.IngressProducer;
 import dev.knative.eventing.kafka.broker.receiver.IngressRequestHandler;
@@ -87,7 +88,7 @@ public class ReceiverVerticle extends AbstractVerticle implements Handler<HttpSe
     this.ingressProducerStore = this.ingressProducerStoreFactory.apply(vertx);
     this.messageConsumer = ResourcesReconciler
       .builder()
-      .watchIngress(this.ingressProducerStore)
+      .watchIngress(IngressReconcilerListener.all(this.ingressProducerStore, this.ingressRequestHandler))
       .buildAndListen(vertx);
 
     this.server = vertx.createHttpServer(httpServerOptions);
diff --git a/data-plane/receiver/src/main/java/dev/knative/eventing/kafka/broker/receiver/impl/handler/IngressRequestHandlerImpl.java b/data-plane/receiver/src/main/java/dev/knative/eventing/kafka/broker/receiver/impl/handler/IngressRequestHandlerImpl.java
index fd0448664..6f85672fe 100644
--- a/data-plane/receiver/src/main/java/dev/knative/eventing/kafka/broker/receiver/impl/handler/IngressRequestHandlerImpl.java
+++ b/data-plane/receiver/src/main/java/dev/knative/eventing/kafka/broker/receiver/impl/handler/IngressRequestHandlerImpl.java
@@ -15,7 +15,9 @@
  */
 package dev.knative.eventing.kafka.broker.receiver.impl.handler;
 
+import dev.knative.eventing.kafka.broker.contract.DataPlaneContract;
 import dev.knative.eventing.kafka.broker.core.metrics.Metrics;
+import dev.knative.eventing.kafka.broker.core.reconciler.IngressReconcilerListener;
 import dev.knative.eventing.kafka.broker.core.tracing.TracingConfig;
 import dev.knative.eventing.kafka.broker.core.tracing.TracingSpan;
 import dev.knative.eventing.kafka.broker.receiver.IngressProducer;
@@ -44,7 +46,7 @@ import static io.netty.handler.codec.http.HttpResponseStatus.SERVICE_UNAVAILABLE
  * <p>
  * Instances of this class can be shared among verticles, given the {@code requestToRecordMapper} provided is shareable among verticles.
  */
-public class IngressRequestHandlerImpl implements IngressRequestHandler {
+public class IngressRequestHandlerImpl implements IngressRequestHandler, IngressReconcilerListener {
 
   static final Tag UNKNOWN_EVENT_TYPE_TAG = Tag.of(Metrics.Tags.EVENT_TYPE, "unknown");
 
@@ -81,10 +83,7 @@ public class IngressRequestHandlerImpl implements IngressRequestHandler {
   @Override
   public void handle(final RequestContext requestContext, final IngressProducer producer) {
 
-    final var resourceTags = Tags.of(
-      Tag.of(Metrics.Tags.RESOURCE_NAME, producer.getReference().getName()),
-      Tag.of(Metrics.Tags.RESOURCE_NAMESPACE, producer.getReference().getNamespace())
-    );
+    final Tags resourceTags = Metrics.resourceRefTags(producer.getReference());
 
     requestToRecordMapper
       .requestToRecord(requestContext.getRequest(), producer.getTopic())
@@ -171,4 +170,19 @@ public class IngressRequestHandlerImpl implements IngressRequestHandler {
       });
   }
 
+  @Override
+  public Future<Void> onNewIngress(DataPlaneContract.Resource resource, DataPlaneContract.Ingress ingress) {
+    return Future.succeededFuture();
+  }
+
+  @Override
+  public Future<Void> onUpdateIngress(DataPlaneContract.Resource resource, DataPlaneContract.Ingress ingress) {
+    return Future.succeededFuture();
+  }
+
+  @Override
+  public Future<Void> onDeleteIngress(DataPlaneContract.Resource resource, DataPlaneContract.Ingress ingress) {
+    Metrics.searchResourceMeters(meterRegistry, resource.getReference()).forEach(meterRegistry::remove);
+    return Future.succeededFuture();
+  }
 }
diff --git a/go.mod b/go.mod
index 4ff2edbc1..bbf6deb18 100644
--- a/go.mod
+++ b/go.mod
@@ -38,9 +38,9 @@ require (
 require (
 	knative.dev/eventing v0.34.1-0.20220907090718-fae8544d8568
 	knative.dev/eventing-kafka v0.34.1-0.20220907020318-2f1fbd6dda1b
-	knative.dev/hack v0.0.0-20220907111718-6c301965af4c
+	knative.dev/hack v0.0.0-20220908170219-36b2b3c7a245
 	knative.dev/pkg v0.0.0-20220826162920-93b66e6a8700
-	knative.dev/reconciler-test v0.0.0-20220907152619-a53370571d5b
+	knative.dev/reconciler-test v0.0.0-20220908165920-0cc56d0eebe2
 )
 
 require (
diff --git a/go.sum b/go.sum
index b24744c08..6ad276612 100644
--- a/go.sum
+++ b/go.sum
@@ -1611,16 +1611,16 @@ knative.dev/hack v0.0.0-20220815132133-e9a8475f4329/go.mod h1:t/azP8I/Cygaw+87O7
 knative.dev/hack v0.0.0-20220823140917-8d1e4ccf9dc3/go.mod h1:t/azP8I/Cygaw+87O7rkAPrNRjCelmtfSzWzu/9TM7I=
 knative.dev/hack v0.0.0-20220902220419-664eac5c391e/go.mod h1:yk2OjGDsbEnQjfxdm0/HJKS2WqTLEFg/N6nUs6Rqx3Q=
 knative.dev/hack v0.0.0-20220906140443-f9dc7220d362/go.mod h1:yk2OjGDsbEnQjfxdm0/HJKS2WqTLEFg/N6nUs6Rqx3Q=
-knative.dev/hack v0.0.0-20220907111718-6c301965af4c h1:TTVBodIukkW7CUXSep9k/nc+nynXbjkBqXyYZxIS9Jw=
-knative.dev/hack v0.0.0-20220907111718-6c301965af4c/go.mod h1:yk2OjGDsbEnQjfxdm0/HJKS2WqTLEFg/N6nUs6Rqx3Q=
+knative.dev/hack v0.0.0-20220908170219-36b2b3c7a245 h1:VbG+uEhRW+t/xeq5G5/XazQrlbKmykJK1IeVfZMuyCQ=
+knative.dev/hack v0.0.0-20220908170219-36b2b3c7a245/go.mod h1:yk2OjGDsbEnQjfxdm0/HJKS2WqTLEFg/N6nUs6Rqx3Q=
 knative.dev/hack/schema v0.0.0-20220823140917-8d1e4ccf9dc3/go.mod h1:ffjwmdcrH5vN3mPhO8RrF2KfNnbHeCE2C60A+2cv3U0=
 knative.dev/pkg v0.0.0-20220818004048-4a03844c0b15/go.mod h1:YLjXbkQLlGHok+u0FLfMbBHFzY9WGu3GHhnrptoAy8I=
 knative.dev/pkg v0.0.0-20220826162920-93b66e6a8700 h1:6xjS69vf5Pbwu+dWckqPALmm5pc3p0/XScPpRBhugRc=
 knative.dev/pkg v0.0.0-20220826162920-93b66e6a8700/go.mod h1:WIQZyPTLzT+z0V3/gB91aWugIi3E1mkU9rjCrLfjOwY=
 knative.dev/reconciler-test v0.0.0-20220818122349-177f8264c28c/go.mod h1:A437yxlDVDVKQv779WlB9Nj9lWAMoOKHQXFXls24Sps=
 knative.dev/reconciler-test v0.0.0-20220905144823-18e7400195c1/go.mod h1:XBrYVW7mHvm9ogENdh4qS3xFHacT7GQGZOCtDb0dqXs=
-knative.dev/reconciler-test v0.0.0-20220907152619-a53370571d5b h1:bXGGC05Kcq4YDiePc5cFPcoLZpCJHJoqVmeVXKSuzuQ=
-knative.dev/reconciler-test v0.0.0-20220907152619-a53370571d5b/go.mod h1:kn3vlvNiCYjqjc5RWZ3RgGv4WN9tyHWJMDYoCz7vgnY=
+knative.dev/reconciler-test v0.0.0-20220908165920-0cc56d0eebe2 h1:jUJmJ81LOuLB19X5NT9XVc4HBEJK+L+cikIiFBUZo2w=
+knative.dev/reconciler-test v0.0.0-20220908165920-0cc56d0eebe2/go.mod h1:kn3vlvNiCYjqjc5RWZ3RgGv4WN9tyHWJMDYoCz7vgnY=
 pgregory.net/rapid v0.3.3 h1:jCjBsY4ln4Atz78QoBWxUEvAHaFyNDQg9+WU62aCn1U=
 pgregory.net/rapid v0.3.3/go.mod h1:UYpPVyjFHzYBGHIxLFoupi8vwk6rXNzRY9OMvVxFIOU=
 rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
diff --git a/vendor/knative.dev/eventing-autoscaler-keda/third_party/pkg/client/clientset/versioned/clientset.go b/vendor/knative.dev/eventing-autoscaler-keda/third_party/pkg/client/clientset/versioned/clientset.go
new file mode 100644
index 000000000..9d951e88c
--- /dev/null
+++ b/vendor/knative.dev/eventing-autoscaler-keda/third_party/pkg/client/clientset/versioned/clientset.go
@@ -0,0 +1,121 @@
+/*
+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.
+*/
+
+// Code generated by client-gen. DO NOT EDIT.
+
+package versioned
+
+import (
+	"fmt"
+	"net/http"
+
+	discovery "k8s.io/client-go/discovery"
+	rest "k8s.io/client-go/rest"
+	flowcontrol "k8s.io/client-go/util/flowcontrol"
+	kedav1alpha1 "knative.dev/eventing-autoscaler-keda/third_party/pkg/client/clientset/versioned/typed/keda/v1alpha1"
+)
+
+type Interface interface {
+	Discovery() discovery.DiscoveryInterface
+	KedaV1alpha1() kedav1alpha1.KedaV1alpha1Interface
+}
+
+// Clientset contains the clients for groups. Each group has exactly one
+// version included in a Clientset.
+type Clientset struct {
+	*discovery.DiscoveryClient
+	kedaV1alpha1 *kedav1alpha1.KedaV1alpha1Client
+}
+
+// KedaV1alpha1 retrieves the KedaV1alpha1Client
+func (c *Clientset) KedaV1alpha1() kedav1alpha1.KedaV1alpha1Interface {
+	return c.kedaV1alpha1
+}
+
+// Discovery retrieves the DiscoveryClient
+func (c *Clientset) Discovery() discovery.DiscoveryInterface {
+	if c == nil {
+		return nil
+	}
+	return c.DiscoveryClient
+}
+
+// NewForConfig creates a new Clientset for the given config.
+// If config's RateLimiter is not set and QPS and Burst are acceptable,
+// NewForConfig will generate a rate-limiter in configShallowCopy.
+// NewForConfig is equivalent to NewForConfigAndClient(c, httpClient),
+// where httpClient was generated with rest.HTTPClientFor(c).
+func NewForConfig(c *rest.Config) (*Clientset, error) {
+	configShallowCopy := *c
+
+	if configShallowCopy.UserAgent == "" {
+		configShallowCopy.UserAgent = rest.DefaultKubernetesUserAgent()
+	}
+
+	// share the transport between all clients
+	httpClient, err := rest.HTTPClientFor(&configShallowCopy)
+	if err != nil {
+		return nil, err
+	}
+
+	return NewForConfigAndClient(&configShallowCopy, httpClient)
+}
+
+// NewForConfigAndClient creates a new Clientset for the given config and http client.
+// Note the http client provided takes precedence over the configured transport values.
+// If config's RateLimiter is not set and QPS and Burst are acceptable,
+// NewForConfigAndClient will generate a rate-limiter in configShallowCopy.
+func NewForConfigAndClient(c *rest.Config, httpClient *http.Client) (*Clientset, error) {
+	configShallowCopy := *c
+	if configShallowCopy.RateLimiter == nil && configShallowCopy.QPS > 0 {
+		if configShallowCopy.Burst <= 0 {
+			return nil, fmt.Errorf("burst is required to be greater than 0 when RateLimiter is not set and QPS is set to greater than 0")
+		}
+		configShallowCopy.RateLimiter = flowcontrol.NewTokenBucketRateLimiter(configShallowCopy.QPS, configShallowCopy.Burst)
+	}
+
+	var cs Clientset
+	var err error
+	cs.kedaV1alpha1, err = kedav1alpha1.NewForConfigAndClient(&configShallowCopy, httpClient)
+	if err != nil {
+		return nil, err
+	}
+
+	cs.DiscoveryClient, err = discovery.NewDiscoveryClientForConfigAndClient(&configShallowCopy, httpClient)
+	if err != nil {
+		return nil, err
+	}
+	return &cs, nil
+}
+
+// NewForConfigOrDie creates a new Clientset for the given config and
+// panics if there is an error in the config.
+func NewForConfigOrDie(c *rest.Config) *Clientset {
+	cs, err := NewForConfig(c)
+	if err != nil {
+		panic(err)
+	}
+	return cs
+}
+
+// New creates a new Clientset for the given RESTClient.
+func New(c rest.Interface) *Clientset {
+	var cs Clientset
+	cs.kedaV1alpha1 = kedav1alpha1.New(c)
+
+	cs.DiscoveryClient = discovery.NewDiscoveryClient(c)
+	return &cs
+}
diff --git a/vendor/knative.dev/eventing-autoscaler-keda/third_party/pkg/client/clientset/versioned/doc.go b/vendor/knative.dev/eventing-autoscaler-keda/third_party/pkg/client/clientset/versioned/doc.go
new file mode 100644
index 000000000..e48c2aa44
--- /dev/null
+++ b/vendor/knative.dev/eventing-autoscaler-keda/third_party/pkg/client/clientset/versioned/doc.go
@@ -0,0 +1,20 @@
+/*
+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.
+*/
+
+// Code generated by client-gen. DO NOT EDIT.
+
+// This package has the automatically generated clientset.
+package versioned
diff --git a/vendor/knative.dev/eventing-autoscaler-keda/third_party/pkg/client/clientset/versioned/fake/clientset_generated.go b/vendor/knative.dev/eventing-autoscaler-keda/third_party/pkg/client/clientset/versioned/fake/clientset_generated.go
new file mode 100644
index 000000000..0e872c0fd
--- /dev/null
+++ b/vendor/knative.dev/eventing-autoscaler-keda/third_party/pkg/client/clientset/versioned/fake/clientset_generated.go
@@ -0,0 +1,85 @@
+/*
+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.
+*/
+
+// Code generated by client-gen. DO NOT EDIT.
+
+package fake
+
+import (
+	"k8s.io/apimachinery/pkg/runtime"
+	"k8s.io/apimachinery/pkg/watch"
+	"k8s.io/client-go/discovery"
+	fakediscovery "k8s.io/client-go/discovery/fake"
+	"k8s.io/client-go/testing"
+	clientset "knative.dev/eventing-autoscaler-keda/third_party/pkg/client/clientset/versioned"
+	kedav1alpha1 "knative.dev/eventing-autoscaler-keda/third_party/pkg/client/clientset/versioned/typed/keda/v1alpha1"
+	fakekedav1alpha1 "knative.dev/eventing-autoscaler-keda/third_party/pkg/client/clientset/versioned/typed/keda/v1alpha1/fake"
+)
+
+// NewSimpleClientset returns a clientset that will respond with the provided objects.
+// It's backed by a very simple object tracker that processes creates, updates and deletions as-is,
+// without applying any validations and/or defaults. It shouldn't be considered a replacement
+// for a real clientset and is mostly useful in simple unit tests.
+func NewSimpleClientset(objects ...runtime.Object) *Clientset {
+	o := testing.NewObjectTracker(scheme, codecs.UniversalDecoder())
+	for _, obj := range objects {
+		if err := o.Add(obj); err != nil {
+			panic(err)
+		}
+	}
+
+	cs := &Clientset{tracker: o}
+	cs.discovery = &fakediscovery.FakeDiscovery{Fake: &cs.Fake}
+	cs.AddReactor("*", "*", testing.ObjectReaction(o))
+	cs.AddWatchReactor("*", func(action testing.Action) (handled bool, ret watch.Interface, err error) {
+		gvr := action.GetResource()
+		ns := action.GetNamespace()
+		watch, err := o.Watch(gvr, ns)
+		if err != nil {
+			return false, nil, err
+		}
+		return true, watch, nil
+	})
+
+	return cs
+}
+
+// Clientset implements clientset.Interface. Meant to be embedded into a
+// struct to get a default implementation. This makes faking out just the method
+// you want to test easier.
+type Clientset struct {
+	testing.Fake
+	discovery *fakediscovery.FakeDiscovery
+	tracker   testing.ObjectTracker
+}
+
+func (c *Clientset) Discovery() discovery.DiscoveryInterface {
+	return c.discovery
+}
+
+func (c *Clientset) Tracker() testing.ObjectTracker {
+	return c.tracker
+}
+
+var (
+	_ clientset.Interface = &Clientset{}
+	_ testing.FakeClient  = &Clientset{}
+)
+
+// KedaV1alpha1 retrieves the KedaV1alpha1Client
+func (c *Clientset) KedaV1alpha1() kedav1alpha1.KedaV1alpha1Interface {
+	return &fakekedav1alpha1.FakeKedaV1alpha1{Fake: &c.Fake}
+}
diff --git a/vendor/knative.dev/eventing-autoscaler-keda/third_party/pkg/client/clientset/versioned/fake/doc.go b/vendor/knative.dev/eventing-autoscaler-keda/third_party/pkg/client/clientset/versioned/fake/doc.go
new file mode 100644
index 000000000..2c4903250
--- /dev/null
+++ b/vendor/knative.dev/eventing-autoscaler-keda/third_party/pkg/client/clientset/versioned/fake/doc.go
@@ -0,0 +1,20 @@
+/*
+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.
+*/
+
+// Code generated by client-gen. DO NOT EDIT.
+
+// This package has the automatically generated fake clientset.
+package fake
diff --git a/vendor/knative.dev/eventing-autoscaler-keda/third_party/pkg/client/clientset/versioned/fake/register.go b/vendor/knative.dev/eventing-autoscaler-keda/third_party/pkg/client/clientset/versioned/fake/register.go
new file mode 100644
index 000000000..6555aa503
--- /dev/null
+++ b/vendor/knative.dev/eventing-autoscaler-keda/third_party/pkg/client/clientset/versioned/fake/register.go
@@ -0,0 +1,56 @@
+/*
+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.
+*/
+
+// Code generated by client-gen. DO NOT EDIT.
+
+package fake
+
+import (
+	v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+	runtime "k8s.io/apimachinery/pkg/runtime"
+	schema "k8s.io/apimachinery/pkg/runtime/schema"
+	serializer "k8s.io/apimachinery/pkg/runtime/serializer"
+	utilruntime "k8s.io/apimachinery/pkg/util/runtime"
+	kedav1alpha1 "knative.dev/eventing-autoscaler-keda/third_party/pkg/apis/keda/v1alpha1"
+)
+
+var scheme = runtime.NewScheme()
+var codecs = serializer.NewCodecFactory(scheme)
+
+var localSchemeBuilder = runtime.SchemeBuilder{
+	kedav1alpha1.AddToScheme,
+}
+
+// AddToScheme adds all types of this clientset into the given scheme. This allows composition
+// of clientsets, like in:
+//
+//   import (
+//     "k8s.io/client-go/kubernetes"
+//     clientsetscheme "k8s.io/client-go/kubernetes/scheme"
+//     aggregatorclientsetscheme "k8s.io/kube-aggregator/pkg/client/clientset_generated/clientset/scheme"
+//   )
+//
+//   kclientset, _ := kubernetes.NewForConfig(c)
+//   _ = aggregatorclientsetscheme.AddToScheme(clientsetscheme.Scheme)
+//
+// After this, RawExtensions in Kubernetes types will serialize kube-aggregator types
+// correctly.
+var AddToScheme = localSchemeBuilder.AddToScheme
+
+func init() {
+	v1.AddToGroupVersion(scheme, schema.GroupVersion{Version: "v1"})
+	utilruntime.Must(AddToScheme(scheme))
+}
diff --git a/vendor/knative.dev/eventing-autoscaler-keda/third_party/pkg/client/clientset/versioned/scheme/doc.go b/vendor/knative.dev/eventing-autoscaler-keda/third_party/pkg/client/clientset/versioned/scheme/doc.go
new file mode 100644
index 000000000..7acc2dcf2
--- /dev/null
+++ b/vendor/knative.dev/eventing-autoscaler-keda/third_party/pkg/client/clientset/versioned/scheme/doc.go
@@ -0,0 +1,20 @@
+/*
+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.
+*/
+
+// Code generated by client-gen. DO NOT EDIT.
+
+// This package contains the scheme of the automatically generated clientset.
+package scheme
diff --git a/vendor/knative.dev/eventing-autoscaler-keda/third_party/pkg/client/clientset/versioned/scheme/register.go b/vendor/knative.dev/eventing-autoscaler-keda/third_party/pkg/client/clientset/versioned/scheme/register.go
new file mode 100644
index 000000000..0882d9013
--- /dev/null
+++ b/vendor/knative.dev/eventing-autoscaler-keda/third_party/pkg/client/clientset/versioned/scheme/register.go
@@ -0,0 +1,56 @@
+/*
+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.
+*/
+
+// Code generated by client-gen. DO NOT EDIT.
+
+package scheme
+
+import (
+	v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+	runtime "k8s.io/apimachinery/pkg/runtime"
+	schema "k8s.io/apimachinery/pkg/runtime/schema"
+	serializer "k8s.io/apimachinery/pkg/runtime/serializer"
+	utilruntime "k8s.io/apimachinery/pkg/util/runtime"
+	kedav1alpha1 "knative.dev/eventing-autoscaler-keda/third_party/pkg/apis/keda/v1alpha1"
+)
+
+var Scheme = runtime.NewScheme()
+var Codecs = serializer.NewCodecFactory(Scheme)
+var ParameterCodec = runtime.NewParameterCodec(Scheme)
+var localSchemeBuilder = runtime.SchemeBuilder{
+	kedav1alpha1.AddToScheme,
+}
+
+// AddToScheme adds all types of this clientset into the given scheme. This allows composition
+// of clientsets, like in:
+//
+//   import (
+//     "k8s.io/client-go/kubernetes"
+//     clientsetscheme "k8s.io/client-go/kubernetes/scheme"
+//     aggregatorclientsetscheme "k8s.io/kube-aggregator/pkg/client/clientset_generated/clientset/scheme"
+//   )
+//
+//   kclientset, _ := kubernetes.NewForConfig(c)
+//   _ = aggregatorclientsetscheme.AddToScheme(clientsetscheme.Scheme)
+//
+// After this, RawExtensions in Kubernetes types will serialize kube-aggregator types
+// correctly.
+var AddToScheme = localSchemeBuilder.AddToScheme
+
+func init() {
+	v1.AddToGroupVersion(Scheme, schema.GroupVersion{Version: "v1"})
+	utilruntime.Must(AddToScheme(Scheme))
+}
diff --git a/vendor/knative.dev/eventing-autoscaler-keda/third_party/pkg/client/clientset/versioned/typed/keda/v1alpha1/clustertriggerauthentication.go b/vendor/knative.dev/eventing-autoscaler-keda/third_party/pkg/client/clientset/versioned/typed/keda/v1alpha1/clustertriggerauthentication.go
new file mode 100644
index 000000000..3ed2d4e92
--- /dev/null
+++ b/vendor/knative.dev/eventing-autoscaler-keda/third_party/pkg/client/clientset/versioned/typed/keda/v1alpha1/clustertriggerauthentication.go
@@ -0,0 +1,168 @@
+/*
+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.
+*/
+
+// Code generated by client-gen. DO NOT EDIT.
+
+package v1alpha1
+
+import (
+	"context"
+	"time"
+
+	v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+	types "k8s.io/apimachinery/pkg/types"
+	watch "k8s.io/apimachinery/pkg/watch"
+	rest "k8s.io/client-go/rest"
+	v1alpha1 "knative.dev/eventing-autoscaler-keda/third_party/pkg/apis/keda/v1alpha1"
+	scheme "knative.dev/eventing-autoscaler-keda/third_party/pkg/client/clientset/versioned/scheme"
+)
+
+// ClusterTriggerAuthenticationsGetter has a method to return a ClusterTriggerAuthenticationInterface.
+// A group's client should implement this interface.
+type ClusterTriggerAuthenticationsGetter interface {
+	ClusterTriggerAuthentications() ClusterTriggerAuthenticationInterface
+}
+
+// ClusterTriggerAuthenticationInterface has methods to work with ClusterTriggerAuthentication resources.
+type ClusterTriggerAuthenticationInterface interface {
+	Create(ctx context.Context, clusterTriggerAuthentication *v1alpha1.ClusterTriggerAuthentication, opts v1.CreateOptions) (*v1alpha1.ClusterTriggerAuthentication, error)
+	Update(ctx context.Context, clusterTriggerAuthentication *v1alpha1.ClusterTriggerAuthentication, opts v1.UpdateOptions) (*v1alpha1.ClusterTriggerAuthentication, error)
+	Delete(ctx context.Context, name string, opts v1.DeleteOptions) error
+	DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error
+	Get(ctx context.Context, name string, opts v1.GetOptions) (*v1alpha1.ClusterTriggerAuthentication, error)
+	List(ctx context.Context, opts v1.ListOptions) (*v1alpha1.ClusterTriggerAuthenticationList, error)
+	Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error)
+	Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1alpha1.ClusterTriggerAuthentication, err error)
+	ClusterTriggerAuthenticationExpansion
+}
+
+// clusterTriggerAuthentications implements ClusterTriggerAuthenticationInterface
+type clusterTriggerAuthentications struct {
+	client rest.Interface
+}
+
+// newClusterTriggerAuthentications returns a ClusterTriggerAuthentications
+func newClusterTriggerAuthentications(c *KedaV1alpha1Client) *clusterTriggerAuthentications {
+	return &clusterTriggerAuthentications{
+		client: c.RESTClient(),
+	}
+}
+
+// Get takes name of the clusterTriggerAuthentication, and returns the corresponding clusterTriggerAuthentication object, and an error if there is any.
+func (c *clusterTriggerAuthentications) Get(ctx context.Context, name string, options v1.GetOptions) (result *v1alpha1.ClusterTriggerAuthentication, err error) {
+	result = &v1alpha1.ClusterTriggerAuthentication{}
+	err = c.client.Get().
+		Resource("clustertriggerauthentications").
+		Name(name).
+		VersionedParams(&options, scheme.ParameterCodec).
+		Do(ctx).
+		Into(result)
+	return
+}
+
+// List takes label and field selectors, and returns the list of ClusterTriggerAuthentications that match those selectors.
+func (c *clusterTriggerAuthentications) List(ctx context.Context, opts v1.ListOptions) (result *v1alpha1.ClusterTriggerAuthenticationList, err error) {
+	var timeout time.Duration
+	if opts.TimeoutSeconds != nil {
+		timeout = time.Duration(*opts.TimeoutSeconds) * time.Second
+	}
+	result = &v1alpha1.ClusterTriggerAuthenticationList{}
+	err = c.client.Get().
+		Resource("clustertriggerauthentications").
+		VersionedParams(&opts, scheme.ParameterCodec).
+		Timeout(timeout).
+		Do(ctx).
+		Into(result)
+	return
+}
+
+// Watch returns a watch.Interface that watches the requested clusterTriggerAuthentications.
+func (c *clusterTriggerAuthentications) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) {
+	var timeout time.Duration
+	if opts.TimeoutSeconds != nil {
+		timeout = time.Duration(*opts.TimeoutSeconds) * time.Second
+	}
+	opts.Watch = true
+	return c.client.Get().
+		Resource("clustertriggerauthentications").
+		VersionedParams(&opts, scheme.ParameterCodec).
+		Timeout(timeout).
+		Watch(ctx)
+}
+
+// Create takes the representation of a clusterTriggerAuthentication and creates it.  Returns the server's representation of the clusterTriggerAuthentication, and an error, if there is any.
+func (c *clusterTriggerAuthentications) Create(ctx context.Context, clusterTriggerAuthentication *v1alpha1.ClusterTriggerAuthentication, opts v1.CreateOptions) (result *v1alpha1.ClusterTriggerAuthentication, err error) {
+	result = &v1alpha1.ClusterTriggerAuthentication{}
+	err = c.client.Post().
+		Resource("clustertriggerauthentications").
+		VersionedParams(&opts, scheme.ParameterCodec).
+		Body(clusterTriggerAuthentication).
+		Do(ctx).
+		Into(result)
+	return
+}
+
+// Update takes the representation of a clusterTriggerAuthentication and updates it. Returns the server's representation of the clusterTriggerAuthentication, and an error, if there is any.
+func (c *clusterTriggerAuthentications) Update(ctx context.Context, clusterTriggerAuthentication *v1alpha1.ClusterTriggerAuthentication, opts v1.UpdateOptions) (result *v1alpha1.ClusterTriggerAuthentication, err error) {
+	result = &v1alpha1.ClusterTriggerAuthentication{}
+	err = c.client.Put().
+		Resource("clustertriggerauthentications").
+		Name(clusterTriggerAuthentication.Name).
+		VersionedParams(&opts, scheme.ParameterCodec).
+		Body(clusterTriggerAuthentication).
+		Do(ctx).
+		Into(result)
+	return
+}
+
+// Delete takes name of the clusterTriggerAuthentication and deletes it. Returns an error if one occurs.
+func (c *clusterTriggerAuthentications) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error {
+	return c.client.Delete().
+		Resource("clustertriggerauthentications").
+		Name(name).
+		Body(&opts).
+		Do(ctx).
+		Error()
+}
+
+// DeleteCollection deletes a collection of objects.
+func (c *clusterTriggerAuthentications) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error {
+	var timeout time.Duration
+	if listOpts.TimeoutSeconds != nil {
+		timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second
+	}
+	return c.client.Delete().
+		Resource("clustertriggerauthentications").
+		VersionedParams(&listOpts, scheme.ParameterCodec).
+		Timeout(timeout).
+		Body(&opts).
+		Do(ctx).
+		Error()
+}
+
+// Patch applies the patch and returns the patched clusterTriggerAuthentication.
+func (c *clusterTriggerAuthentications) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1alpha1.ClusterTriggerAuthentication, err error) {
+	result = &v1alpha1.ClusterTriggerAuthentication{}
+	err = c.client.Patch(pt).
+		Resource("clustertriggerauthentications").
+		Name(name).
+		SubResource(subresources...).
+		VersionedParams(&opts, scheme.ParameterCodec).
+		Body(data).
+		Do(ctx).
+		Into(result)
+	return
+}
diff --git a/vendor/knative.dev/eventing-autoscaler-keda/third_party/pkg/client/clientset/versioned/typed/keda/v1alpha1/doc.go b/vendor/knative.dev/eventing-autoscaler-keda/third_party/pkg/client/clientset/versioned/typed/keda/v1alpha1/doc.go
new file mode 100644
index 000000000..41e872fe9
--- /dev/null
+++ b/vendor/knative.dev/eventing-autoscaler-keda/third_party/pkg/client/clientset/versioned/typed/keda/v1alpha1/doc.go
@@ -0,0 +1,20 @@
+/*
+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.
+*/
+
+// Code generated by client-gen. DO NOT EDIT.
+
+// This package has the automatically generated typed clients.
+package v1alpha1
diff --git a/vendor/knative.dev/eventing-autoscaler-keda/third_party/pkg/client/clientset/versioned/typed/keda/v1alpha1/fake/doc.go b/vendor/knative.dev/eventing-autoscaler-keda/third_party/pkg/client/clientset/versioned/typed/keda/v1alpha1/fake/doc.go
new file mode 100644
index 000000000..c7f6e65ca
--- /dev/null
+++ b/vendor/knative.dev/eventing-autoscaler-keda/third_party/pkg/client/clientset/versioned/typed/keda/v1alpha1/fake/doc.go
@@ -0,0 +1,20 @@
+/*
+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.
+*/
+
+// Code generated by client-gen. DO NOT EDIT.
+
+// Package fake has the automatically generated clients.
+package fake
diff --git a/vendor/knative.dev/eventing-autoscaler-keda/third_party/pkg/client/clientset/versioned/typed/keda/v1alpha1/fake/fake_clustertriggerauthentication.go b/vendor/knative.dev/eventing-autoscaler-keda/third_party/pkg/client/clientset/versioned/typed/keda/v1alpha1/fake/fake_clustertriggerauthentication.go
new file mode 100644
index 000000000..6d5f19e72
--- /dev/null
+++ b/vendor/knative.dev/eventing-autoscaler-keda/third_party/pkg/client/clientset/versioned/typed/keda/v1alpha1/fake/fake_clustertriggerauthentication.go
@@ -0,0 +1,122 @@
+/*
+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.
+*/
+
+// Code generated by client-gen. DO NOT EDIT.
+
+package fake
+
+import (
+	"context"
+
+	v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+	labels "k8s.io/apimachinery/pkg/labels"
+	schema "k8s.io/apimachinery/pkg/runtime/schema"
+	types "k8s.io/apimachinery/pkg/types"
+	watch "k8s.io/apimachinery/pkg/watch"
+	testing "k8s.io/client-go/testing"
+	v1alpha1 "knative.dev/eventing-autoscaler-keda/third_party/pkg/apis/keda/v1alpha1"
+)
+
+// FakeClusterTriggerAuthentications implements ClusterTriggerAuthenticationInterface
+type FakeClusterTriggerAuthentications struct {
+	Fake *FakeKedaV1alpha1
+}
+
+var clustertriggerauthenticationsResource = schema.GroupVersionResource{Group: "keda", Version: "v1alpha1", Resource: "clustertriggerauthentications"}
+
+var clustertriggerauthenticationsKind = schema.GroupVersionKind{Group: "keda", Version: "v1alpha1", Kind: "ClusterTriggerAuthentication"}
+
+// Get takes name of the clusterTriggerAuthentication, and returns the corresponding clusterTriggerAuthentication object, and an error if there is any.
+func (c *FakeClusterTriggerAuthentications) Get(ctx context.Context, name string, options v1.GetOptions) (result *v1alpha1.ClusterTriggerAuthentication, err error) {
+	obj, err := c.Fake.
+		Invokes(testing.NewRootGetAction(clustertriggerauthenticationsResource, name), &v1alpha1.ClusterTriggerAuthentication{})
+	if obj == nil {
+		return nil, err
+	}
+	return obj.(*v1alpha1.ClusterTriggerAuthentication), err
+}
+
+// List takes label and field selectors, and returns the list of ClusterTriggerAuthentications that match those selectors.
+func (c *FakeClusterTriggerAuthentications) List(ctx context.Context, opts v1.ListOptions) (result *v1alpha1.ClusterTriggerAuthenticationList, err error) {
+	obj, err := c.Fake.
+		Invokes(testing.NewRootListAction(clustertriggerauthenticationsResource, clustertriggerauthenticationsKind, opts), &v1alpha1.ClusterTriggerAuthenticationList{})
+	if obj == nil {
+		return nil, err
+	}
+
+	label, _, _ := testing.ExtractFromListOptions(opts)
+	if label == nil {
+		label = labels.Everything()
+	}
+	list := &v1alpha1.ClusterTriggerAuthenticationList{ListMeta: obj.(*v1alpha1.ClusterTriggerAuthenticationList).ListMeta}
+	for _, item := range obj.(*v1alpha1.ClusterTriggerAuthenticationList).Items {
+		if label.Matches(labels.Set(item.Labels)) {
+			list.Items = append(list.Items, item)
+		}
+	}
+	return list, err
+}
+
+// Watch returns a watch.Interface that watches the requested clusterTriggerAuthentications.
+func (c *FakeClusterTriggerAuthentications) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) {
+	return c.Fake.
+		InvokesWatch(testing.NewRootWatchAction(clustertriggerauthenticationsResource, opts))
+}
+
+// Create takes the representation of a clusterTriggerAuthentication and creates it.  Returns the server's representation of the clusterTriggerAuthentication, and an error, if there is any.
+func (c *FakeClusterTriggerAuthentications) Create(ctx context.Context, clusterTriggerAuthentication *v1alpha1.ClusterTriggerAuthentication, opts v1.CreateOptions) (result *v1alpha1.ClusterTriggerAuthentication, err error) {
+	obj, err := c.Fake.
+		Invokes(testing.NewRootCreateAction(clustertriggerauthenticationsResource, clusterTriggerAuthentication), &v1alpha1.ClusterTriggerAuthentication{})
+	if obj == nil {
+		return nil, err
+	}
+	return obj.(*v1alpha1.ClusterTriggerAuthentication), err
+}
+
+// Update takes the representation of a clusterTriggerAuthentication and updates it. Returns the server's representation of the clusterTriggerAuthentication, and an error, if there is any.
+func (c *FakeClusterTriggerAuthentications) Update(ctx context.Context, clusterTriggerAuthentication *v1alpha1.ClusterTriggerAuthentication, opts v1.UpdateOptions) (result *v1alpha1.ClusterTriggerAuthentication, err error) {
+	obj, err := c.Fake.
+		Invokes(testing.NewRootUpdateAction(clustertriggerauthenticationsResource, clusterTriggerAuthentication), &v1alpha1.ClusterTriggerAuthentication{})
+	if obj == nil {
+		return nil, err
+	}
+	return obj.(*v1alpha1.ClusterTriggerAuthentication), err
+}
+
+// Delete takes name of the clusterTriggerAuthentication and deletes it. Returns an error if one occurs.
+func (c *FakeClusterTriggerAuthentications) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error {
+	_, err := c.Fake.
+		Invokes(testing.NewRootDeleteActionWithOptions(clustertriggerauthenticationsResource, name, opts), &v1alpha1.ClusterTriggerAuthentication{})
+	return err
+}
+
+// DeleteCollection deletes a collection of objects.
+func (c *FakeClusterTriggerAuthentications) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error {
+	action := testing.NewRootDeleteCollectionAction(clustertriggerauthenticationsResource, listOpts)
+
+	_, err := c.Fake.Invokes(action, &v1alpha1.ClusterTriggerAuthenticationList{})
+	return err
+}
+
+// Patch applies the patch and returns the patched clusterTriggerAuthentication.
+func (c *FakeClusterTriggerAuthentications) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1alpha1.ClusterTriggerAuthentication, err error) {
+	obj, err := c.Fake.
+		Invokes(testing.NewRootPatchSubresourceAction(clustertriggerauthenticationsResource, name, pt, data, subresources...), &v1alpha1.ClusterTriggerAuthentication{})
+	if obj == nil {
+		return nil, err
+	}
+	return obj.(*v1alpha1.ClusterTriggerAuthentication), err
+}
diff --git a/vendor/knative.dev/eventing-autoscaler-keda/third_party/pkg/client/clientset/versioned/typed/keda/v1alpha1/fake/fake_keda_client.go b/vendor/knative.dev/eventing-autoscaler-keda/third_party/pkg/client/clientset/versioned/typed/keda/v1alpha1/fake/fake_keda_client.go
new file mode 100644
index 000000000..110bdb7af
--- /dev/null
+++ b/vendor/knative.dev/eventing-autoscaler-keda/third_party/pkg/client/clientset/versioned/typed/keda/v1alpha1/fake/fake_keda_client.go
@@ -0,0 +1,52 @@
+/*
+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.
+*/
+
+// Code generated by client-gen. DO NOT EDIT.
+
+package fake
+
+import (
+	rest "k8s.io/client-go/rest"
+	testing "k8s.io/client-go/testing"
+	v1alpha1 "knative.dev/eventing-autoscaler-keda/third_party/pkg/client/clientset/versioned/typed/keda/v1alpha1"
+)
+
+type FakeKedaV1alpha1 struct {
+	*testing.Fake
+}
+
+func (c *FakeKedaV1alpha1) ClusterTriggerAuthentications() v1alpha1.ClusterTriggerAuthenticationInterface {
+	return &FakeClusterTriggerAuthentications{c}
+}
+
+func (c *FakeKedaV1alpha1) ScaledJobs(namespace string) v1alpha1.ScaledJobInterface {
+	return &FakeScaledJobs{c, namespace}
+}
+
+func (c *FakeKedaV1alpha1) ScaledObjects(namespace string) v1alpha1.ScaledObjectInterface {
+	return &FakeScaledObjects{c, namespace}
+}
+
+func (c *FakeKedaV1alpha1) TriggerAuthentications(namespace string) v1alpha1.TriggerAuthenticationInterface {
+	return &FakeTriggerAuthentications{c, namespace}
+}
+
+// RESTClient returns a RESTClient that is used to communicate
+// with API server by this client implementation.
+func (c *FakeKedaV1alpha1) RESTClient() rest.Interface {
+	var ret *rest.RESTClient
+	return ret
+}
diff --git a/vendor/knative.dev/eventing-autoscaler-keda/third_party/pkg/client/clientset/versioned/typed/keda/v1alpha1/fake/fake_scaledjob.go b/vendor/knative.dev/eventing-autoscaler-keda/third_party/pkg/client/clientset/versioned/typed/keda/v1alpha1/fake/fake_scaledjob.go
new file mode 100644
index 000000000..a00f0e671
--- /dev/null
+++ b/vendor/knative.dev/eventing-autoscaler-keda/third_party/pkg/client/clientset/versioned/typed/keda/v1alpha1/fake/fake_scaledjob.go
@@ -0,0 +1,142 @@
+/*
+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.
+*/
+
+// Code generated by client-gen. DO NOT EDIT.
+
+package fake
+
+import (
+	"context"
+
+	v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+	labels "k8s.io/apimachinery/pkg/labels"
+	schema "k8s.io/apimachinery/pkg/runtime/schema"
+	types "k8s.io/apimachinery/pkg/types"
+	watch "k8s.io/apimachinery/pkg/watch"
+	testing "k8s.io/client-go/testing"
+	v1alpha1 "knative.dev/eventing-autoscaler-keda/third_party/pkg/apis/keda/v1alpha1"
+)
+
+// FakeScaledJobs implements ScaledJobInterface
+type FakeScaledJobs struct {
+	Fake *FakeKedaV1alpha1
+	ns   string
+}
+
+var scaledjobsResource = schema.GroupVersionResource{Group: "keda", Version: "v1alpha1", Resource: "scaledjobs"}
+
+var scaledjobsKind = schema.GroupVersionKind{Group: "keda", Version: "v1alpha1", Kind: "ScaledJob"}
+
+// Get takes name of the scaledJob, and returns the corresponding scaledJob object, and an error if there is any.
+func (c *FakeScaledJobs) Get(ctx context.Context, name string, options v1.GetOptions) (result *v1alpha1.ScaledJob, err error) {
+	obj, err := c.Fake.
+		Invokes(testing.NewGetAction(scaledjobsResource, c.ns, name), &v1alpha1.ScaledJob{})
+
+	if obj == nil {
+		return nil, err
+	}
+	return obj.(*v1alpha1.ScaledJob), err
+}
+
+// List takes label and field selectors, and returns the list of ScaledJobs that match those selectors.
+func (c *FakeScaledJobs) List(ctx context.Context, opts v1.ListOptions) (result *v1alpha1.ScaledJobList, err error) {
+	obj, err := c.Fake.
+		Invokes(testing.NewListAction(scaledjobsResource, scaledjobsKind, c.ns, opts), &v1alpha1.ScaledJobList{})
+
+	if obj == nil {
+		return nil, err
+	}
+
+	label, _, _ := testing.ExtractFromListOptions(opts)
+	if label == nil {
+		label = labels.Everything()
+	}
+	list := &v1alpha1.ScaledJobList{ListMeta: obj.(*v1alpha1.ScaledJobList).ListMeta}
+	for _, item := range obj.(*v1alpha1.ScaledJobList).Items {
+		if label.Matches(labels.Set(item.Labels)) {
+			list.Items = append(list.Items, item)
+		}
+	}
+	return list, err
+}
+
+// Watch returns a watch.Interface that watches the requested scaledJobs.
+func (c *FakeScaledJobs) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) {
+	return c.Fake.
+		InvokesWatch(testing.NewWatchAction(scaledjobsResource, c.ns, opts))
+
+}
+
+// Create takes the representation of a scaledJob and creates it.  Returns the server's representation of the scaledJob, and an error, if there is any.
+func (c *FakeScaledJobs) Create(ctx context.Context, scaledJob *v1alpha1.ScaledJob, opts v1.CreateOptions) (result *v1alpha1.ScaledJob, err error) {
+	obj, err := c.Fake.
+		Invokes(testing.NewCreateAction(scaledjobsResource, c.ns, scaledJob), &v1alpha1.ScaledJob{})
+
+	if obj == nil {
+		return nil, err
+	}
+	return obj.(*v1alpha1.ScaledJob), err
+}
+
+// Update takes the representation of a scaledJob and updates it. Returns the server's representation of the scaledJob, and an error, if there is any.
+func (c *FakeScaledJobs) Update(ctx context.Context, scaledJob *v1alpha1.ScaledJob, opts v1.UpdateOptions) (result *v1alpha1.ScaledJob, err error) {
+	obj, err := c.Fake.
+		Invokes(testing.NewUpdateAction(scaledjobsResource, c.ns, scaledJob), &v1alpha1.ScaledJob{})
+
+	if obj == nil {
+		return nil, err
+	}
+	return obj.(*v1alpha1.ScaledJob), err
+}
+
+// UpdateStatus was generated because the type contains a Status member.
+// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus().
+func (c *FakeScaledJobs) UpdateStatus(ctx context.Context, scaledJob *v1alpha1.ScaledJob, opts v1.UpdateOptions) (*v1alpha1.ScaledJob, error) {
+	obj, err := c.Fake.
+		Invokes(testing.NewUpdateSubresourceAction(scaledjobsResource, "status", c.ns, scaledJob), &v1alpha1.ScaledJob{})
+
+	if obj == nil {
+		return nil, err
+	}
+	return obj.(*v1alpha1.ScaledJob), err
+}
+
+// Delete takes name of the scaledJob and deletes it. Returns an error if one occurs.
+func (c *FakeScaledJobs) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error {
+	_, err := c.Fake.
+		Invokes(testing.NewDeleteActionWithOptions(scaledjobsResource, c.ns, name, opts), &v1alpha1.ScaledJob{})
+
+	return err
+}
+
+// DeleteCollection deletes a collection of objects.
+func (c *FakeScaledJobs) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error {
+	action := testing.NewDeleteCollectionAction(scaledjobsResource, c.ns, listOpts)
+
+	_, err := c.Fake.Invokes(action, &v1alpha1.ScaledJobList{})
+	return err
+}
+
+// Patch applies the patch and returns the patched scaledJob.
+func (c *FakeScaledJobs) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1alpha1.ScaledJob, err error) {
+	obj, err := c.Fake.
+		Invokes(testing.NewPatchSubresourceAction(scaledjobsResource, c.ns, name, pt, data, subresources...), &v1alpha1.ScaledJob{})
+
+	if obj == nil {
+		return nil, err
+	}
+	return obj.(*v1alpha1.ScaledJob), err
+}
diff --git a/vendor/knative.dev/eventing-autoscaler-keda/third_party/pkg/client/clientset/versioned/typed/keda/v1alpha1/fake/fake_scaledobject.go b/vendor/knative.dev/eventing-autoscaler-keda/third_party/pkg/client/clientset/versioned/typed/keda/v1alpha1/fake/fake_scaledobject.go
new file mode 100644
index 000000000..3769872e9
--- /dev/null
+++ b/vendor/knative.dev/eventing-autoscaler-keda/third_party/pkg/client/clientset/versioned/typed/keda/v1alpha1/fake/fake_scaledobject.go
@@ -0,0 +1,142 @@
+/*
+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.
+*/
+
+// Code generated by client-gen. DO NOT EDIT.
+
+package fake
+
+import (
+	"context"
+
+	v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+	labels "k8s.io/apimachinery/pkg/labels"
+	schema "k8s.io/apimachinery/pkg/runtime/schema"
+	types "k8s.io/apimachinery/pkg/types"
+	watch "k8s.io/apimachinery/pkg/watch"
+	testing "k8s.io/client-go/testing"
+	v1alpha1 "knative.dev/eventing-autoscaler-keda/third_party/pkg/apis/keda/v1alpha1"
+)
+
+// FakeScaledObjects implements ScaledObjectInterface
+type FakeScaledObjects struct {
+	Fake *FakeKedaV1alpha1
+	ns   string
+}
+
+var scaledobjectsResource = schema.GroupVersionResource{Group: "keda", Version: "v1alpha1", Resource: "scaledobjects"}
+
+var scaledobjectsKind = schema.GroupVersionKind{Group: "keda", Version: "v1alpha1", Kind: "ScaledObject"}
+
+// Get takes name of the scaledObject, and returns the corresponding scaledObject object, and an error if there is any.
+func (c *FakeScaledObjects) Get(ctx context.Context, name string, options v1.GetOptions) (result *v1alpha1.ScaledObject, err error) {
+	obj, err := c.Fake.
+		Invokes(testing.NewGetAction(scaledobjectsResource, c.ns, name), &v1alpha1.ScaledObject{})
+
+	if obj == nil {
+		return nil, err
+	}
+	return obj.(*v1alpha1.ScaledObject), err
+}
+
+// List takes label and field selectors, and returns the list of ScaledObjects that match those selectors.
+func (c *FakeScaledObjects) List(ctx context.Context, opts v1.ListOptions) (result *v1alpha1.ScaledObjectList, err error) {
+	obj, err := c.Fake.
+		Invokes(testing.NewListAction(scaledobjectsResource, scaledobjectsKind, c.ns, opts), &v1alpha1.ScaledObjectList{})
+
+	if obj == nil {
+		return nil, err
+	}
+
+	label, _, _ := testing.ExtractFromListOptions(opts)
+	if label == nil {
+		label = labels.Everything()
+	}
+	list := &v1alpha1.ScaledObjectList{ListMeta: obj.(*v1alpha1.ScaledObjectList).ListMeta}
+	for _, item := range obj.(*v1alpha1.ScaledObjectList).Items {
+		if label.Matches(labels.Set(item.Labels)) {
+			list.Items = append(list.Items, item)
+		}
+	}
+	return list, err
+}
+
+// Watch returns a watch.Interface that watches the requested scaledObjects.
+func (c *FakeScaledObjects) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) {
+	return c.Fake.
+		InvokesWatch(testing.NewWatchAction(scaledobjectsResource, c.ns, opts))
+
+}
+
+// Create takes the representation of a scaledObject and creates it.  Returns the server's representation of the scaledObject, and an error, if there is any.
+func (c *FakeScaledObjects) Create(ctx context.Context, scaledObject *v1alpha1.ScaledObject, opts v1.CreateOptions) (result *v1alpha1.ScaledObject, err error) {
+	obj, err := c.Fake.
+		Invokes(testing.NewCreateAction(scaledobjectsResource, c.ns, scaledObject), &v1alpha1.ScaledObject{})
+
+	if obj == nil {
+		return nil, err
+	}
+	return obj.(*v1alpha1.ScaledObject), err
+}
+
+// Update takes the representation of a scaledObject and updates it. Returns the server's representation of the scaledObject, and an error, if there is any.
+func (c *FakeScaledObjects) Update(ctx context.Context, scaledObject *v1alpha1.ScaledObject, opts v1.UpdateOptions) (result *v1alpha1.ScaledObject, err error) {
+	obj, err := c.Fake.
+		Invokes(testing.NewUpdateAction(scaledobjectsResource, c.ns, scaledObject), &v1alpha1.ScaledObject{})
+
+	if obj == nil {
+		return nil, err
+	}
+	return obj.(*v1alpha1.ScaledObject), err
+}
+
+// UpdateStatus was generated because the type contains a Status member.
+// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus().
+func (c *FakeScaledObjects) UpdateStatus(ctx context.Context, scaledObject *v1alpha1.ScaledObject, opts v1.UpdateOptions) (*v1alpha1.ScaledObject, error) {
+	obj, err := c.Fake.
+		Invokes(testing.NewUpdateSubresourceAction(scaledobjectsResource, "status", c.ns, scaledObject), &v1alpha1.ScaledObject{})
+
+	if obj == nil {
+		return nil, err
+	}
+	return obj.(*v1alpha1.ScaledObject), err
+}
+
+// Delete takes name of the scaledObject and deletes it. Returns an error if one occurs.
+func (c *FakeScaledObjects) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error {
+	_, err := c.Fake.
+		Invokes(testing.NewDeleteActionWithOptions(scaledobjectsResource, c.ns, name, opts), &v1alpha1.ScaledObject{})
+
+	return err
+}
+
+// DeleteCollection deletes a collection of objects.
+func (c *FakeScaledObjects) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error {
+	action := testing.NewDeleteCollectionAction(scaledobjectsResource, c.ns, listOpts)
+
+	_, err := c.Fake.Invokes(action, &v1alpha1.ScaledObjectList{})
+	return err
+}
+
+// Patch applies the patch and returns the patched scaledObject.
+func (c *FakeScaledObjects) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1alpha1.ScaledObject, err error) {
+	obj, err := c.Fake.
+		Invokes(testing.NewPatchSubresourceAction(scaledobjectsResource, c.ns, name, pt, data, subresources...), &v1alpha1.ScaledObject{})
+
+	if obj == nil {
+		return nil, err
+	}
+	return obj.(*v1alpha1.ScaledObject), err
+}
diff --git a/vendor/knative.dev/eventing-autoscaler-keda/third_party/pkg/client/clientset/versioned/typed/keda/v1alpha1/fake/fake_triggerauthentication.go b/vendor/knative.dev/eventing-autoscaler-keda/third_party/pkg/client/clientset/versioned/typed/keda/v1alpha1/fake/fake_triggerauthentication.go
new file mode 100644
index 000000000..0ca5880e4
--- /dev/null
+++ b/vendor/knative.dev/eventing-autoscaler-keda/third_party/pkg/client/clientset/versioned/typed/keda/v1alpha1/fake/fake_triggerauthentication.go
@@ -0,0 +1,130 @@
+/*
+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.
+*/
+
+// Code generated by client-gen. DO NOT EDIT.
+
+package fake
+
+import (
+	"context"
+
+	v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+	labels "k8s.io/apimachinery/pkg/labels"
+	schema "k8s.io/apimachinery/pkg/runtime/schema"
+	types "k8s.io/apimachinery/pkg/types"
+	watch "k8s.io/apimachinery/pkg/watch"
+	testing "k8s.io/client-go/testing"
+	v1alpha1 "knative.dev/eventing-autoscaler-keda/third_party/pkg/apis/keda/v1alpha1"
+)
+
+// FakeTriggerAuthentications implements TriggerAuthenticationInterface
+type FakeTriggerAuthentications struct {
+	Fake *FakeKedaV1alpha1
+	ns   string
+}
+
+var triggerauthenticationsResource = schema.GroupVersionResource{Group: "keda", Version: "v1alpha1", Resource: "triggerauthentications"}
+
+var triggerauthenticationsKind = schema.GroupVersionKind{Group: "keda", Version: "v1alpha1", Kind: "TriggerAuthentication"}
+
+// Get takes name of the triggerAuthentication, and returns the corresponding triggerAuthentication object, and an error if there is any.
+func (c *FakeTriggerAuthentications) Get(ctx context.Context, name string, options v1.GetOptions) (result *v1alpha1.TriggerAuthentication, err error) {
+	obj, err := c.Fake.
+		Invokes(testing.NewGetAction(triggerauthenticationsResource, c.ns, name), &v1alpha1.TriggerAuthentication{})
+
+	if obj == nil {
+		return nil, err
+	}
+	return obj.(*v1alpha1.TriggerAuthentication), err
+}
+
+// List takes label and field selectors, and returns the list of TriggerAuthentications that match those selectors.
+func (c *FakeTriggerAuthentications) List(ctx context.Context, opts v1.ListOptions) (result *v1alpha1.TriggerAuthenticationList, err error) {
+	obj, err := c.Fake.
+		Invokes(testing.NewListAction(triggerauthenticationsResource, triggerauthenticationsKind, c.ns, opts), &v1alpha1.TriggerAuthenticationList{})
+
+	if obj == nil {
+		return nil, err
+	}
+
+	label, _, _ := testing.ExtractFromListOptions(opts)
+	if label == nil {
+		label = labels.Everything()
+	}
+	list := &v1alpha1.TriggerAuthenticationList{ListMeta: obj.(*v1alpha1.TriggerAuthenticationList).ListMeta}
+	for _, item := range obj.(*v1alpha1.TriggerAuthenticationList).Items {
+		if label.Matches(labels.Set(item.Labels)) {
+			list.Items = append(list.Items, item)
+		}
+	}
+	return list, err
+}
+
+// Watch returns a watch.Interface that watches the requested triggerAuthentications.
+func (c *FakeTriggerAuthentications) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) {
+	return c.Fake.
+		InvokesWatch(testing.NewWatchAction(triggerauthenticationsResource, c.ns, opts))
+
+}
+
+// Create takes the representation of a triggerAuthentication and creates it.  Returns the server's representation of the triggerAuthentication, and an error, if there is any.
+func (c *FakeTriggerAuthentications) Create(ctx context.Context, triggerAuthentication *v1alpha1.TriggerAuthentication, opts v1.CreateOptions) (result *v1alpha1.TriggerAuthentication, err error) {
+	obj, err := c.Fake.
+		Invokes(testing.NewCreateAction(triggerauthenticationsResource, c.ns, triggerAuthentication), &v1alpha1.TriggerAuthentication{})
+
+	if obj == nil {
+		return nil, err
+	}
+	return obj.(*v1alpha1.TriggerAuthentication), err
+}
+
+// Update takes the representation of a triggerAuthentication and updates it. Returns the server's representation of the triggerAuthentication, and an error, if there is any.
+func (c *FakeTriggerAuthentications) Update(ctx context.Context, triggerAuthentication *v1alpha1.TriggerAuthentication, opts v1.UpdateOptions) (result *v1alpha1.TriggerAuthentication, err error) {
+	obj, err := c.Fake.
+		Invokes(testing.NewUpdateAction(triggerauthenticationsResource, c.ns, triggerAuthentication), &v1alpha1.TriggerAuthentication{})
+
+	if obj == nil {
+		return nil, err
+	}
+	return obj.(*v1alpha1.TriggerAuthentication), err
+}
+
+// Delete takes name of the triggerAuthentication and deletes it. Returns an error if one occurs.
+func (c *FakeTriggerAuthentications) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error {
+	_, err := c.Fake.
+		Invokes(testing.NewDeleteActionWithOptions(triggerauthenticationsResource, c.ns, name, opts), &v1alpha1.TriggerAuthentication{})
+
+	return err
+}
+
+// DeleteCollection deletes a collection of objects.
+func (c *FakeTriggerAuthentications) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error {
+	action := testing.NewDeleteCollectionAction(triggerauthenticationsResource, c.ns, listOpts)
+
+	_, err := c.Fake.Invokes(action, &v1alpha1.TriggerAuthenticationList{})
+	return err
+}
+
+// Patch applies the patch and returns the patched triggerAuthentication.
+func (c *FakeTriggerAuthentications) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1alpha1.TriggerAuthentication, err error) {
+	obj, err := c.Fake.
+		Invokes(testing.NewPatchSubresourceAction(triggerauthenticationsResource, c.ns, name, pt, data, subresources...), &v1alpha1.TriggerAuthentication{})
+
+	if obj == nil {
+		return nil, err
+	}
+	return obj.(*v1alpha1.TriggerAuthentication), err
+}
diff --git a/vendor/knative.dev/eventing-autoscaler-keda/third_party/pkg/client/clientset/versioned/typed/keda/v1alpha1/generated_expansion.go b/vendor/knative.dev/eventing-autoscaler-keda/third_party/pkg/client/clientset/versioned/typed/keda/v1alpha1/generated_expansion.go
new file mode 100644
index 000000000..6bca2a24c
--- /dev/null
+++ b/vendor/knative.dev/eventing-autoscaler-keda/third_party/pkg/client/clientset/versioned/typed/keda/v1alpha1/generated_expansion.go
@@ -0,0 +1,27 @@
+/*
+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.
+*/
+
+// Code generated by client-gen. DO NOT EDIT.
+
+package v1alpha1
+
+type ClusterTriggerAuthenticationExpansion interface{}
+
+type ScaledJobExpansion interface{}
+
+type ScaledObjectExpansion interface{}
+
+type TriggerAuthenticationExpansion interface{}
diff --git a/vendor/knative.dev/eventing-autoscaler-keda/third_party/pkg/client/clientset/versioned/typed/keda/v1alpha1/keda_client.go b/vendor/knative.dev/eventing-autoscaler-keda/third_party/pkg/client/clientset/versioned/typed/keda/v1alpha1/keda_client.go
new file mode 100644
index 000000000..a5a98043f
--- /dev/null
+++ b/vendor/knative.dev/eventing-autoscaler-keda/third_party/pkg/client/clientset/versioned/typed/keda/v1alpha1/keda_client.go
@@ -0,0 +1,122 @@
+/*
+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.
+*/
+
+// Code generated by client-gen. DO NOT EDIT.
+
+package v1alpha1
+
+import (
+	"net/http"
+
+	rest "k8s.io/client-go/rest"
+	v1alpha1 "knative.dev/eventing-autoscaler-keda/third_party/pkg/apis/keda/v1alpha1"
+	"knative.dev/eventing-autoscaler-keda/third_party/pkg/client/clientset/versioned/scheme"
+)
+
+type KedaV1alpha1Interface interface {
+	RESTClient() rest.Interface
+	ClusterTriggerAuthenticationsGetter
+	ScaledJobsGetter
+	ScaledObjectsGetter
+	TriggerAuthenticationsGetter
+}
+
+// KedaV1alpha1Client is used to interact with features provided by the keda group.
+type KedaV1alpha1Client struct {
+	restClient rest.Interface
+}
+
+func (c *KedaV1alpha1Client) ClusterTriggerAuthentications() ClusterTriggerAuthenticationInterface {
+	return newClusterTriggerAuthentications(c)
+}
+
+func (c *KedaV1alpha1Client) ScaledJobs(namespace string) ScaledJobInterface {
+	return newScaledJobs(c, namespace)
+}
+
+func (c *KedaV1alpha1Client) ScaledObjects(namespace string) ScaledObjectInterface {
+	return newScaledObjects(c, namespace)
+}
+
+func (c *KedaV1alpha1Client) TriggerAuthentications(namespace string) TriggerAuthenticationInterface {
+	return newTriggerAuthentications(c, namespace)
+}
+
+// NewForConfig creates a new KedaV1alpha1Client for the given config.
+// NewForConfig is equivalent to NewForConfigAndClient(c, httpClient),
+// where httpClient was generated with rest.HTTPClientFor(c).
+func NewForConfig(c *rest.Config) (*KedaV1alpha1Client, error) {
+	config := *c
+	if err := setConfigDefaults(&config); err != nil {
+		return nil, err
+	}
+	httpClient, err := rest.HTTPClientFor(&config)
+	if err != nil {
+		return nil, err
+	}
+	return NewForConfigAndClient(&config, httpClient)
+}
+
+// NewForConfigAndClient creates a new KedaV1alpha1Client for the given config and http client.
+// Note the http client provided takes precedence over the configured transport values.
+func NewForConfigAndClient(c *rest.Config, h *http.Client) (*KedaV1alpha1Client, error) {
+	config := *c
+	if err := setConfigDefaults(&config); err != nil {
+		return nil, err
+	}
+	client, err := rest.RESTClientForConfigAndClient(&config, h)
+	if err != nil {
+		return nil, err
+	}
+	return &KedaV1alpha1Client{client}, nil
+}
+
+// NewForConfigOrDie creates a new KedaV1alpha1Client for the given config and
+// panics if there is an error in the config.
+func NewForConfigOrDie(c *rest.Config) *KedaV1alpha1Client {
+	client, err := NewForConfig(c)
+	if err != nil {
+		panic(err)
+	}
+	return client
+}
+
+// New creates a new KedaV1alpha1Client for the given RESTClient.
+func New(c rest.Interface) *KedaV1alpha1Client {
+	return &KedaV1alpha1Client{c}
+}
+
+func setConfigDefaults(config *rest.Config) error {
+	gv := v1alpha1.SchemeGroupVersion
+	config.GroupVersion = &gv
+	config.APIPath = "/apis"
+	config.NegotiatedSerializer = scheme.Codecs.WithoutConversion()
+
+	if config.UserAgent == "" {
+		config.UserAgent = rest.DefaultKubernetesUserAgent()
+	}
+
+	return nil
+}
+
+// RESTClient returns a RESTClient that is used to communicate
+// with API server by this client implementation.
+func (c *KedaV1alpha1Client) RESTClient() rest.Interface {
+	if c == nil {
+		return nil
+	}
+	return c.restClient
+}
diff --git a/vendor/knative.dev/eventing-autoscaler-keda/third_party/pkg/client/clientset/versioned/typed/keda/v1alpha1/scaledjob.go b/vendor/knative.dev/eventing-autoscaler-keda/third_party/pkg/client/clientset/versioned/typed/keda/v1alpha1/scaledjob.go
new file mode 100644
index 000000000..4ffdd0156
--- /dev/null
+++ b/vendor/knative.dev/eventing-autoscaler-keda/third_party/pkg/client/clientset/versioned/typed/keda/v1alpha1/scaledjob.go
@@ -0,0 +1,195 @@
+/*
+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.
+*/
+
+// Code generated by client-gen. DO NOT EDIT.
+
+package v1alpha1
+
+import (
+	"context"
+	"time"
+
+	v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+	types "k8s.io/apimachinery/pkg/types"
+	watch "k8s.io/apimachinery/pkg/watch"
+	rest "k8s.io/client-go/rest"
+	v1alpha1 "knative.dev/eventing-autoscaler-keda/third_party/pkg/apis/keda/v1alpha1"
+	scheme "knative.dev/eventing-autoscaler-keda/third_party/pkg/client/clientset/versioned/scheme"
+)
+
+// ScaledJobsGetter has a method to return a ScaledJobInterface.
+// A group's client should implement this interface.
+type ScaledJobsGetter interface {
+	ScaledJobs(namespace string) ScaledJobInterface
+}
+
+// ScaledJobInterface has methods to work with ScaledJob resources.
+type ScaledJobInterface interface {
+	Create(ctx context.Context, scaledJob *v1alpha1.ScaledJob, opts v1.CreateOptions) (*v1alpha1.ScaledJob, error)
+	Update(ctx context.Context, scaledJob *v1alpha1.ScaledJob, opts v1.UpdateOptions) (*v1alpha1.ScaledJob, error)
+	UpdateStatus(ctx context.Context, scaledJob *v1alpha1.ScaledJob, opts v1.UpdateOptions) (*v1alpha1.ScaledJob, error)
+	Delete(ctx context.Context, name string, opts v1.DeleteOptions) error
+	DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error
+	Get(ctx context.Context, name string, opts v1.GetOptions) (*v1alpha1.ScaledJob, error)
+	List(ctx context.Context, opts v1.ListOptions) (*v1alpha1.ScaledJobList, error)
+	Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error)
+	Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1alpha1.ScaledJob, err error)
+	ScaledJobExpansion
+}
+
+// scaledJobs implements ScaledJobInterface
+type scaledJobs struct {
+	client rest.Interface
+	ns     string
+}
+
+// newScaledJobs returns a ScaledJobs
+func newScaledJobs(c *KedaV1alpha1Client, namespace string) *scaledJobs {
+	return &scaledJobs{
+		client: c.RESTClient(),
+		ns:     namespace,
+	}
+}
+
+// Get takes name of the scaledJob, and returns the corresponding scaledJob object, and an error if there is any.
+func (c *scaledJobs) Get(ctx context.Context, name string, options v1.GetOptions) (result *v1alpha1.ScaledJob, err error) {
+	result = &v1alpha1.ScaledJob{}
+	err = c.client.Get().
+		Namespace(c.ns).
+		Resource("scaledjobs").
+		Name(name).
+		VersionedParams(&options, scheme.ParameterCodec).
+		Do(ctx).
+		Into(result)
+	return
+}
+
+// List takes label and field selectors, and returns the list of ScaledJobs that match those selectors.
+func (c *scaledJobs) List(ctx context.Context, opts v1.ListOptions) (result *v1alpha1.ScaledJobList, err error) {
+	var timeout time.Duration
+	if opts.TimeoutSeconds != nil {
+		timeout = time.Duration(*opts.TimeoutSeconds) * time.Second
+	}
+	result = &v1alpha1.ScaledJobList{}
+	err = c.client.Get().
+		Namespace(c.ns).
+		Resource("scaledjobs").
+		VersionedParams(&opts, scheme.ParameterCodec).
+		Timeout(timeout).
+		Do(ctx).
+		Into(result)
+	return
+}
+
+// Watch returns a watch.Interface that watches the requested scaledJobs.
+func (c *scaledJobs) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) {
+	var timeout time.Duration
+	if opts.TimeoutSeconds != nil {
+		timeout = time.Duration(*opts.TimeoutSeconds) * time.Second
+	}
+	opts.Watch = true
+	return c.client.Get().
+		Namespace(c.ns).
+		Resource("scaledjobs").
+		VersionedParams(&opts, scheme.ParameterCodec).
+		Timeout(timeout).
+		Watch(ctx)
+}
+
+// Create takes the representation of a scaledJob and creates it.  Returns the server's representation of the scaledJob, and an error, if there is any.
+func (c *scaledJobs) Create(ctx context.Context, scaledJob *v1alpha1.ScaledJob, opts v1.CreateOptions) (result *v1alpha1.ScaledJob, err error) {
+	result = &v1alpha1.ScaledJob{}
+	err = c.client.Post().
+		Namespace(c.ns).
+		Resource("scaledjobs").
+		VersionedParams(&opts, scheme.ParameterCodec).
+		Body(scaledJob).
+		Do(ctx).
+		Into(result)
+	return
+}
+
+// Update takes the representation of a scaledJob and updates it. Returns the server's representation of the scaledJob, and an error, if there is any.
+func (c *scaledJobs) Update(ctx context.Context, scaledJob *v1alpha1.ScaledJob, opts v1.UpdateOptions) (result *v1alpha1.ScaledJob, err error) {
+	result = &v1alpha1.ScaledJob{}
+	err = c.client.Put().
+		Namespace(c.ns).
+		Resource("scaledjobs").
+		Name(scaledJob.Name).
+		VersionedParams(&opts, scheme.ParameterCodec).
+		Body(scaledJob).
+		Do(ctx).
+		Into(result)
+	return
+}
+
+// UpdateStatus was generated because the type contains a Status member.
+// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus().
+func (c *scaledJobs) UpdateStatus(ctx context.Context, scaledJob *v1alpha1.ScaledJob, opts v1.UpdateOptions) (result *v1alpha1.ScaledJob, err error) {
+	result = &v1alpha1.ScaledJob{}
+	err = c.client.Put().
+		Namespace(c.ns).
+		Resource("scaledjobs").
+		Name(scaledJob.Name).
+		SubResource("status").
+		VersionedParams(&opts, scheme.ParameterCodec).
+		Body(scaledJob).
+		Do(ctx).
+		Into(result)
+	return
+}
+
+// Delete takes name of the scaledJob and deletes it. Returns an error if one occurs.
+func (c *scaledJobs) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error {
+	return c.client.Delete().
+		Namespace(c.ns).
+		Resource("scaledjobs").
+		Name(name).
+		Body(&opts).
+		Do(ctx).
+		Error()
+}
+
+// DeleteCollection deletes a collection of objects.
+func (c *scaledJobs) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error {
+	var timeout time.Duration
+	if listOpts.TimeoutSeconds != nil {
+		timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second
+	}
+	return c.client.Delete().
+		Namespace(c.ns).
+		Resource("scaledjobs").
+		VersionedParams(&listOpts, scheme.ParameterCodec).
+		Timeout(timeout).
+		Body(&opts).
+		Do(ctx).
+		Error()
+}
+
+// Patch applies the patch and returns the patched scaledJob.
+func (c *scaledJobs) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1alpha1.ScaledJob, err error) {
+	result = &v1alpha1.ScaledJob{}
+	err = c.client.Patch(pt).
+		Namespace(c.ns).
+		Resource("scaledjobs").
+		Name(name).
+		SubResource(subresources...).
+		VersionedParams(&opts, scheme.ParameterCodec).
+		Body(data).
+		Do(ctx).
+		Into(result)
+	return
+}
diff --git a/vendor/knative.dev/eventing-autoscaler-keda/third_party/pkg/client/clientset/versioned/typed/keda/v1alpha1/scaledobject.go b/vendor/knative.dev/eventing-autoscaler-keda/third_party/pkg/client/clientset/versioned/typed/keda/v1alpha1/scaledobject.go
new file mode 100644
index 000000000..160a51851
--- /dev/null
+++ b/vendor/knative.dev/eventing-autoscaler-keda/third_party/pkg/client/clientset/versioned/typed/keda/v1alpha1/scaledobject.go
@@ -0,0 +1,195 @@
+/*
+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.
+*/
+
+// Code generated by client-gen. DO NOT EDIT.
+
+package v1alpha1
+
+import (
+	"context"
+	"time"
+
+	v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+	types "k8s.io/apimachinery/pkg/types"
+	watch "k8s.io/apimachinery/pkg/watch"
+	rest "k8s.io/client-go/rest"
+	v1alpha1 "knative.dev/eventing-autoscaler-keda/third_party/pkg/apis/keda/v1alpha1"
+	scheme "knative.dev/eventing-autoscaler-keda/third_party/pkg/client/clientset/versioned/scheme"
+)
+
+// ScaledObjectsGetter has a method to return a ScaledObjectInterface.
+// A group's client should implement this interface.
+type ScaledObjectsGetter interface {
+	ScaledObjects(namespace string) ScaledObjectInterface
+}
+
+// ScaledObjectInterface has methods to work with ScaledObject resources.
+type ScaledObjectInterface interface {
+	Create(ctx context.Context, scaledObject *v1alpha1.ScaledObject, opts v1.CreateOptions) (*v1alpha1.ScaledObject, error)
+	Update(ctx context.Context, scaledObject *v1alpha1.ScaledObject, opts v1.UpdateOptions) (*v1alpha1.ScaledObject, error)
+	UpdateStatus(ctx context.Context, scaledObject *v1alpha1.ScaledObject, opts v1.UpdateOptions) (*v1alpha1.ScaledObject, error)
+	Delete(ctx context.Context, name string, opts v1.DeleteOptions) error
+	DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error
+	Get(ctx context.Context, name string, opts v1.GetOptions) (*v1alpha1.ScaledObject, error)
+	List(ctx context.Context, opts v1.ListOptions) (*v1alpha1.ScaledObjectList, error)
+	Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error)
+	Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1alpha1.ScaledObject, err error)
+	ScaledObjectExpansion
+}
+
+// scaledObjects implements ScaledObjectInterface
+type scaledObjects struct {
+	client rest.Interface
+	ns     string
+}
+
+// newScaledObjects returns a ScaledObjects
+func newScaledObjects(c *KedaV1alpha1Client, namespace string) *scaledObjects {
+	return &scaledObjects{
+		client: c.RESTClient(),
+		ns:     namespace,
+	}
+}
+
+// Get takes name of the scaledObject, and returns the corresponding scaledObject object, and an error if there is any.
+func (c *scaledObjects) Get(ctx context.Context, name string, options v1.GetOptions) (result *v1alpha1.ScaledObject, err error) {
+	result = &v1alpha1.ScaledObject{}
+	err = c.client.Get().
+		Namespace(c.ns).
+		Resource("scaledobjects").
+		Name(name).
+		VersionedParams(&options, scheme.ParameterCodec).
+		Do(ctx).
+		Into(result)
+	return
+}
+
+// List takes label and field selectors, and returns the list of ScaledObjects that match those selectors.
+func (c *scaledObjects) List(ctx context.Context, opts v1.ListOptions) (result *v1alpha1.ScaledObjectList, err error) {
+	var timeout time.Duration
+	if opts.TimeoutSeconds != nil {
+		timeout = time.Duration(*opts.TimeoutSeconds) * time.Second
+	}
+	result = &v1alpha1.ScaledObjectList{}
+	err = c.client.Get().
+		Namespace(c.ns).
+		Resource("scaledobjects").
+		VersionedParams(&opts, scheme.ParameterCodec).
+		Timeout(timeout).
+		Do(ctx).
+		Into(result)
+	return
+}
+
+// Watch returns a watch.Interface that watches the requested scaledObjects.
+func (c *scaledObjects) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) {
+	var timeout time.Duration
+	if opts.TimeoutSeconds != nil {
+		timeout = time.Duration(*opts.TimeoutSeconds) * time.Second
+	}
+	opts.Watch = true
+	return c.client.Get().
+		Namespace(c.ns).
+		Resource("scaledobjects").
+		VersionedParams(&opts, scheme.ParameterCodec).
+		Timeout(timeout).
+		Watch(ctx)
+}
+
+// Create takes the representation of a scaledObject and creates it.  Returns the server's representation of the scaledObject, and an error, if there is any.
+func (c *scaledObjects) Create(ctx context.Context, scaledObject *v1alpha1.ScaledObject, opts v1.CreateOptions) (result *v1alpha1.ScaledObject, err error) {
+	result = &v1alpha1.ScaledObject{}
+	err = c.client.Post().
+		Namespace(c.ns).
+		Resource("scaledobjects").
+		VersionedParams(&opts, scheme.ParameterCodec).
+		Body(scaledObject).
+		Do(ctx).
+		Into(result)
+	return
+}
+
+// Update takes the representation of a scaledObject and updates it. Returns the server's representation of the scaledObject, and an error, if there is any.
+func (c *scaledObjects) Update(ctx context.Context, scaledObject *v1alpha1.ScaledObject, opts v1.UpdateOptions) (result *v1alpha1.ScaledObject, err error) {
+	result = &v1alpha1.ScaledObject{}
+	err = c.client.Put().
+		Namespace(c.ns).
+		Resource("scaledobjects").
+		Name(scaledObject.Name).
+		VersionedParams(&opts, scheme.ParameterCodec).
+		Body(scaledObject).
+		Do(ctx).
+		Into(result)
+	return
+}
+
+// UpdateStatus was generated because the type contains a Status member.
+// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus().
+func (c *scaledObjects) UpdateStatus(ctx context.Context, scaledObject *v1alpha1.ScaledObject, opts v1.UpdateOptions) (result *v1alpha1.ScaledObject, err error) {
+	result = &v1alpha1.ScaledObject{}
+	err = c.client.Put().
+		Namespace(c.ns).
+		Resource("scaledobjects").
+		Name(scaledObject.Name).
+		SubResource("status").
+		VersionedParams(&opts, scheme.ParameterCodec).
+		Body(scaledObject).
+		Do(ctx).
+		Into(result)
+	return
+}
+
+// Delete takes name of the scaledObject and deletes it. Returns an error if one occurs.
+func (c *scaledObjects) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error {
+	return c.client.Delete().
+		Namespace(c.ns).
+		Resource("scaledobjects").
+		Name(name).
+		Body(&opts).
+		Do(ctx).
+		Error()
+}
+
+// DeleteCollection deletes a collection of objects.
+func (c *scaledObjects) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error {
+	var timeout time.Duration
+	if listOpts.TimeoutSeconds != nil {
+		timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second
+	}
+	return c.client.Delete().
+		Namespace(c.ns).
+		Resource("scaledobjects").
+		VersionedParams(&listOpts, scheme.ParameterCodec).
+		Timeout(timeout).
+		Body(&opts).
+		Do(ctx).
+		Error()
+}
+
+// Patch applies the patch and returns the patched scaledObject.
+func (c *scaledObjects) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1alpha1.ScaledObject, err error) {
+	result = &v1alpha1.ScaledObject{}
+	err = c.client.Patch(pt).
+		Namespace(c.ns).
+		Resource("scaledobjects").
+		Name(name).
+		SubResource(subresources...).
+		VersionedParams(&opts, scheme.ParameterCodec).
+		Body(data).
+		Do(ctx).
+		Into(result)
+	return
+}
diff --git a/vendor/knative.dev/eventing-autoscaler-keda/third_party/pkg/client/clientset/versioned/typed/keda/v1alpha1/triggerauthentication.go b/vendor/knative.dev/eventing-autoscaler-keda/third_party/pkg/client/clientset/versioned/typed/keda/v1alpha1/triggerauthentication.go
new file mode 100644
index 000000000..df5bde4e9
--- /dev/null
+++ b/vendor/knative.dev/eventing-autoscaler-keda/third_party/pkg/client/clientset/versioned/typed/keda/v1alpha1/triggerauthentication.go
@@ -0,0 +1,178 @@
+/*
+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.
+*/
+
+// Code generated by client-gen. DO NOT EDIT.
+
+package v1alpha1
+
+import (
+	"context"
+	"time"
+
+	v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+	types "k8s.io/apimachinery/pkg/types"
+	watch "k8s.io/apimachinery/pkg/watch"
+	rest "k8s.io/client-go/rest"
+	v1alpha1 "knative.dev/eventing-autoscaler-keda/third_party/pkg/apis/keda/v1alpha1"
+	scheme "knative.dev/eventing-autoscaler-keda/third_party/pkg/client/clientset/versioned/scheme"
+)
+
+// TriggerAuthenticationsGetter has a method to return a TriggerAuthenticationInterface.
+// A group's client should implement this interface.
+type TriggerAuthenticationsGetter interface {
+	TriggerAuthentications(namespace string) TriggerAuthenticationInterface
+}
+
+// TriggerAuthenticationInterface has methods to work with TriggerAuthentication resources.
+type TriggerAuthenticationInterface interface {
+	Create(ctx context.Context, triggerAuthentication *v1alpha1.TriggerAuthentication, opts v1.CreateOptions) (*v1alpha1.TriggerAuthentication, error)
+	Update(ctx context.Context, triggerAuthentication *v1alpha1.TriggerAuthentication, opts v1.UpdateOptions) (*v1alpha1.TriggerAuthentication, error)
+	Delete(ctx context.Context, name string, opts v1.DeleteOptions) error
+	DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error
+	Get(ctx context.Context, name string, opts v1.GetOptions) (*v1alpha1.TriggerAuthentication, error)
+	List(ctx context.Context, opts v1.ListOptions) (*v1alpha1.TriggerAuthenticationList, error)
+	Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error)
+	Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1alpha1.TriggerAuthentication, err error)
+	TriggerAuthenticationExpansion
+}
+
+// triggerAuthentications implements TriggerAuthenticationInterface
+type triggerAuthentications struct {
+	client rest.Interface
+	ns     string
+}
+
+// newTriggerAuthentications returns a TriggerAuthentications
+func newTriggerAuthentications(c *KedaV1alpha1Client, namespace string) *triggerAuthentications {
+	return &triggerAuthentications{
+		client: c.RESTClient(),
+		ns:     namespace,
+	}
+}
+
+// Get takes name of the triggerAuthentication, and returns the corresponding triggerAuthentication object, and an error if there is any.
+func (c *triggerAuthentications) Get(ctx context.Context, name string, options v1.GetOptions) (result *v1alpha1.TriggerAuthentication, err error) {
+	result = &v1alpha1.TriggerAuthentication{}
+	err = c.client.Get().
+		Namespace(c.ns).
+		Resource("triggerauthentications").
+		Name(name).
+		VersionedParams(&options, scheme.ParameterCodec).
+		Do(ctx).
+		Into(result)
+	return
+}
+
+// List takes label and field selectors, and returns the list of TriggerAuthentications that match those selectors.
+func (c *triggerAuthentications) List(ctx context.Context, opts v1.ListOptions) (result *v1alpha1.TriggerAuthenticationList, err error) {
+	var timeout time.Duration
+	if opts.TimeoutSeconds != nil {
+		timeout = time.Duration(*opts.TimeoutSeconds) * time.Second
+	}
+	result = &v1alpha1.TriggerAuthenticationList{}
+	err = c.client.Get().
+		Namespace(c.ns).
+		Resource("triggerauthentications").
+		VersionedParams(&opts, scheme.ParameterCodec).
+		Timeout(timeout).
+		Do(ctx).
+		Into(result)
+	return
+}
+
+// Watch returns a watch.Interface that watches the requested triggerAuthentications.
+func (c *triggerAuthentications) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) {
+	var timeout time.Duration
+	if opts.TimeoutSeconds != nil {
+		timeout = time.Duration(*opts.TimeoutSeconds) * time.Second
+	}
+	opts.Watch = true
+	return c.client.Get().
+		Namespace(c.ns).
+		Resource("triggerauthentications").
+		VersionedParams(&opts, scheme.ParameterCodec).
+		Timeout(timeout).
+		Watch(ctx)
+}
+
+// Create takes the representation of a triggerAuthentication and creates it.  Returns the server's representation of the triggerAuthentication, and an error, if there is any.
+func (c *triggerAuthentications) Create(ctx context.Context, triggerAuthentication *v1alpha1.TriggerAuthentication, opts v1.CreateOptions) (result *v1alpha1.TriggerAuthentication, err error) {
+	result = &v1alpha1.TriggerAuthentication{}
+	err = c.client.Post().
+		Namespace(c.ns).
+		Resource("triggerauthentications").
+		VersionedParams(&opts, scheme.ParameterCodec).
+		Body(triggerAuthentication).
+		Do(ctx).
+		Into(result)
+	return
+}
+
+// Update takes the representation of a triggerAuthentication and updates it. Returns the server's representation of the triggerAuthentication, and an error, if there is any.
+func (c *triggerAuthentications) Update(ctx context.Context, triggerAuthentication *v1alpha1.TriggerAuthentication, opts v1.UpdateOptions) (result *v1alpha1.TriggerAuthentication, err error) {
+	result = &v1alpha1.TriggerAuthentication{}
+	err = c.client.Put().
+		Namespace(c.ns).
+		Resource("triggerauthentications").
+		Name(triggerAuthentication.Name).
+		VersionedParams(&opts, scheme.ParameterCodec).
+		Body(triggerAuthentication).
+		Do(ctx).
+		Into(result)
+	return
+}
+
+// Delete takes name of the triggerAuthentication and deletes it. Returns an error if one occurs.
+func (c *triggerAuthentications) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error {
+	return c.client.Delete().
+		Namespace(c.ns).
+		Resource("triggerauthentications").
+		Name(name).
+		Body(&opts).
+		Do(ctx).
+		Error()
+}
+
+// DeleteCollection deletes a collection of objects.
+func (c *triggerAuthentications) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error {
+	var timeout time.Duration
+	if listOpts.TimeoutSeconds != nil {
+		timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second
+	}
+	return c.client.Delete().
+		Namespace(c.ns).
+		Resource("triggerauthentications").
+		VersionedParams(&listOpts, scheme.ParameterCodec).
+		Timeout(timeout).
+		Body(&opts).
+		Do(ctx).
+		Error()
+}
+
+// Patch applies the patch and returns the patched triggerAuthentication.
+func (c *triggerAuthentications) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1alpha1.TriggerAuthentication, err error) {
+	result = &v1alpha1.TriggerAuthentication{}
+	err = c.client.Patch(pt).
+		Namespace(c.ns).
+		Resource("triggerauthentications").
+		Name(name).
+		SubResource(subresources...).
+		VersionedParams(&opts, scheme.ParameterCodec).
+		Body(data).
+		Do(ctx).
+		Into(result)
+	return
+}
diff --git a/vendor/knative.dev/eventing-autoscaler-keda/third_party/pkg/client/injection/client/client.go b/vendor/knative.dev/eventing-autoscaler-keda/third_party/pkg/client/injection/client/client.go
new file mode 100644
index 000000000..baa05d7a3
--- /dev/null
+++ b/vendor/knative.dev/eventing-autoscaler-keda/third_party/pkg/client/injection/client/client.go
@@ -0,0 +1,632 @@
+/*
+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.
+*/
+
+// Code generated by injection-gen. DO NOT EDIT.
+
+package client
+
+import (
+	context "context"
+	json "encoding/json"
+	errors "errors"
+	fmt "fmt"
+
+	v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+	unstructured "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
+	runtime "k8s.io/apimachinery/pkg/runtime"
+	schema "k8s.io/apimachinery/pkg/runtime/schema"
+	types "k8s.io/apimachinery/pkg/types"
+	watch "k8s.io/apimachinery/pkg/watch"
+	discovery "k8s.io/client-go/discovery"
+	dynamic "k8s.io/client-go/dynamic"
+	rest "k8s.io/client-go/rest"
+	v1alpha1 "knative.dev/eventing-autoscaler-keda/third_party/pkg/apis/keda/v1alpha1"
+	versioned "knative.dev/eventing-autoscaler-keda/third_party/pkg/client/clientset/versioned"
+	typedkedav1alpha1 "knative.dev/eventing-autoscaler-keda/third_party/pkg/client/clientset/versioned/typed/keda/v1alpha1"
+	injection "knative.dev/pkg/injection"
+	dynamicclient "knative.dev/pkg/injection/clients/dynamicclient"
+	logging "knative.dev/pkg/logging"
+)
+
+func init() {
+	injection.Default.RegisterClient(withClientFromConfig)
+	injection.Default.RegisterClientFetcher(func(ctx context.Context) interface{} {
+		return Get(ctx)
+	})
+	injection.Dynamic.RegisterDynamicClient(withClientFromDynamic)
+}
+
+// Key is used as the key for associating information with a context.Context.
+type Key struct{}
+
+func withClientFromConfig(ctx context.Context, cfg *rest.Config) context.Context {
+	return context.WithValue(ctx, Key{}, versioned.NewForConfigOrDie(cfg))
+}
+
+func withClientFromDynamic(ctx context.Context) context.Context {
+	return context.WithValue(ctx, Key{}, &wrapClient{dyn: dynamicclient.Get(ctx)})
+}
+
+// Get extracts the versioned.Interface client from the context.
+func Get(ctx context.Context) versioned.Interface {
+	untyped := ctx.Value(Key{})
+	if untyped == nil {
+		if injection.GetConfig(ctx) == nil {
+			logging.FromContext(ctx).Panic(
+				"Unable to fetch knative.dev/eventing-autoscaler-keda/third_party/pkg/client/clientset/versioned.Interface from context. This context is not the application context (which is typically given to constructors via sharedmain).")
+		} else {
+			logging.FromContext(ctx).Panic(
+				"Unable to fetch knative.dev/eventing-autoscaler-keda/third_party/pkg/client/clientset/versioned.Interface from context.")
+		}
+	}
+	return untyped.(versioned.Interface)
+}
+
+type wrapClient struct {
+	dyn dynamic.Interface
+}
+
+var _ versioned.Interface = (*wrapClient)(nil)
+
+func (w *wrapClient) Discovery() discovery.DiscoveryInterface {
+	panic("Discovery called on dynamic client!")
+}
+
+func convert(from interface{}, to runtime.Object) error {
+	bs, err := json.Marshal(from)
+	if err != nil {
+		return fmt.Errorf("Marshal() = %w", err)
+	}
+	if err := json.Unmarshal(bs, to); err != nil {
+		return fmt.Errorf("Unmarshal() = %w", err)
+	}
+	return nil
+}
+
+// KedaV1alpha1 retrieves the KedaV1alpha1Client
+func (w *wrapClient) KedaV1alpha1() typedkedav1alpha1.KedaV1alpha1Interface {
+	return &wrapKedaV1alpha1{
+		dyn: w.dyn,
+	}
+}
+
+type wrapKedaV1alpha1 struct {
+	dyn dynamic.Interface
+}
+
+func (w *wrapKedaV1alpha1) RESTClient() rest.Interface {
+	panic("RESTClient called on dynamic client!")
+}
+
+func (w *wrapKedaV1alpha1) ClusterTriggerAuthentications() typedkedav1alpha1.ClusterTriggerAuthenticationInterface {
+	return &wrapKedaV1alpha1ClusterTriggerAuthenticationImpl{
+		dyn: w.dyn.Resource(schema.GroupVersionResource{
+			Group:    "keda",
+			Version:  "v1alpha1",
+			Resource: "clustertriggerauthentications",
+		}),
+	}
+}
+
+type wrapKedaV1alpha1ClusterTriggerAuthenticationImpl struct {
+	dyn dynamic.NamespaceableResourceInterface
+}
+
+var _ typedkedav1alpha1.ClusterTriggerAuthenticationInterface = (*wrapKedaV1alpha1ClusterTriggerAuthenticationImpl)(nil)
+
+func (w *wrapKedaV1alpha1ClusterTriggerAuthenticationImpl) Create(ctx context.Context, in *v1alpha1.ClusterTriggerAuthentication, opts v1.CreateOptions) (*v1alpha1.ClusterTriggerAuthentication, error) {
+	in.SetGroupVersionKind(schema.GroupVersionKind{
+		Group:   "keda",
+		Version: "v1alpha1",
+		Kind:    "ClusterTriggerAuthentication",
+	})
+	uo := &unstructured.Unstructured{}
+	if err := convert(in, uo); err != nil {
+		return nil, err
+	}
+	uo, err := w.dyn.Create(ctx, uo, opts)
+	if err != nil {
+		return nil, err
+	}
+	out := &v1alpha1.ClusterTriggerAuthentication{}
+	if err := convert(uo, out); err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (w *wrapKedaV1alpha1ClusterTriggerAuthenticationImpl) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error {
+	return w.dyn.Delete(ctx, name, opts)
+}
+
+func (w *wrapKedaV1alpha1ClusterTriggerAuthenticationImpl) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error {
+	return w.dyn.DeleteCollection(ctx, opts, listOpts)
+}
+
+func (w *wrapKedaV1alpha1ClusterTriggerAuthenticationImpl) Get(ctx context.Context, name string, opts v1.GetOptions) (*v1alpha1.ClusterTriggerAuthentication, error) {
+	uo, err := w.dyn.Get(ctx, name, opts)
+	if err != nil {
+		return nil, err
+	}
+	out := &v1alpha1.ClusterTriggerAuthentication{}
+	if err := convert(uo, out); err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (w *wrapKedaV1alpha1ClusterTriggerAuthenticationImpl) List(ctx context.Context, opts v1.ListOptions) (*v1alpha1.ClusterTriggerAuthenticationList, error) {
+	uo, err := w.dyn.List(ctx, opts)
+	if err != nil {
+		return nil, err
+	}
+	out := &v1alpha1.ClusterTriggerAuthenticationList{}
+	if err := convert(uo, out); err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (w *wrapKedaV1alpha1ClusterTriggerAuthenticationImpl) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1alpha1.ClusterTriggerAuthentication, err error) {
+	uo, err := w.dyn.Patch(ctx, name, pt, data, opts)
+	if err != nil {
+		return nil, err
+	}
+	out := &v1alpha1.ClusterTriggerAuthentication{}
+	if err := convert(uo, out); err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (w *wrapKedaV1alpha1ClusterTriggerAuthenticationImpl) Update(ctx context.Context, in *v1alpha1.ClusterTriggerAuthentication, opts v1.UpdateOptions) (*v1alpha1.ClusterTriggerAuthentication, error) {
+	in.SetGroupVersionKind(schema.GroupVersionKind{
+		Group:   "keda",
+		Version: "v1alpha1",
+		Kind:    "ClusterTriggerAuthentication",
+	})
+	uo := &unstructured.Unstructured{}
+	if err := convert(in, uo); err != nil {
+		return nil, err
+	}
+	uo, err := w.dyn.Update(ctx, uo, opts)
+	if err != nil {
+		return nil, err
+	}
+	out := &v1alpha1.ClusterTriggerAuthentication{}
+	if err := convert(uo, out); err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (w *wrapKedaV1alpha1ClusterTriggerAuthenticationImpl) UpdateStatus(ctx context.Context, in *v1alpha1.ClusterTriggerAuthentication, opts v1.UpdateOptions) (*v1alpha1.ClusterTriggerAuthentication, error) {
+	in.SetGroupVersionKind(schema.GroupVersionKind{
+		Group:   "keda",
+		Version: "v1alpha1",
+		Kind:    "ClusterTriggerAuthentication",
+	})
+	uo := &unstructured.Unstructured{}
+	if err := convert(in, uo); err != nil {
+		return nil, err
+	}
+	uo, err := w.dyn.UpdateStatus(ctx, uo, opts)
+	if err != nil {
+		return nil, err
+	}
+	out := &v1alpha1.ClusterTriggerAuthentication{}
+	if err := convert(uo, out); err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (w *wrapKedaV1alpha1ClusterTriggerAuthenticationImpl) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) {
+	return nil, errors.New("NYI: Watch")
+}
+
+func (w *wrapKedaV1alpha1) ScaledJobs(namespace string) typedkedav1alpha1.ScaledJobInterface {
+	return &wrapKedaV1alpha1ScaledJobImpl{
+		dyn: w.dyn.Resource(schema.GroupVersionResource{
+			Group:    "keda",
+			Version:  "v1alpha1",
+			Resource: "scaledjobs",
+		}),
+
+		namespace: namespace,
+	}
+}
+
+type wrapKedaV1alpha1ScaledJobImpl struct {
+	dyn dynamic.NamespaceableResourceInterface
+
+	namespace string
+}
+
+var _ typedkedav1alpha1.ScaledJobInterface = (*wrapKedaV1alpha1ScaledJobImpl)(nil)
+
+func (w *wrapKedaV1alpha1ScaledJobImpl) Create(ctx context.Context, in *v1alpha1.ScaledJob, opts v1.CreateOptions) (*v1alpha1.ScaledJob, error) {
+	in.SetGroupVersionKind(schema.GroupVersionKind{
+		Group:   "keda",
+		Version: "v1alpha1",
+		Kind:    "ScaledJob",
+	})
+	uo := &unstructured.Unstructured{}
+	if err := convert(in, uo); err != nil {
+		return nil, err
+	}
+	uo, err := w.dyn.Namespace(w.namespace).Create(ctx, uo, opts)
+	if err != nil {
+		return nil, err
+	}
+	out := &v1alpha1.ScaledJob{}
+	if err := convert(uo, out); err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (w *wrapKedaV1alpha1ScaledJobImpl) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error {
+	return w.dyn.Namespace(w.namespace).Delete(ctx, name, opts)
+}
+
+func (w *wrapKedaV1alpha1ScaledJobImpl) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error {
+	return w.dyn.Namespace(w.namespace).DeleteCollection(ctx, opts, listOpts)
+}
+
+func (w *wrapKedaV1alpha1ScaledJobImpl) Get(ctx context.Context, name string, opts v1.GetOptions) (*v1alpha1.ScaledJob, error) {
+	uo, err := w.dyn.Namespace(w.namespace).Get(ctx, name, opts)
+	if err != nil {
+		return nil, err
+	}
+	out := &v1alpha1.ScaledJob{}
+	if err := convert(uo, out); err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (w *wrapKedaV1alpha1ScaledJobImpl) List(ctx context.Context, opts v1.ListOptions) (*v1alpha1.ScaledJobList, error) {
+	uo, err := w.dyn.Namespace(w.namespace).List(ctx, opts)
+	if err != nil {
+		return nil, err
+	}
+	out := &v1alpha1.ScaledJobList{}
+	if err := convert(uo, out); err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (w *wrapKedaV1alpha1ScaledJobImpl) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1alpha1.ScaledJob, err error) {
+	uo, err := w.dyn.Namespace(w.namespace).Patch(ctx, name, pt, data, opts)
+	if err != nil {
+		return nil, err
+	}
+	out := &v1alpha1.ScaledJob{}
+	if err := convert(uo, out); err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (w *wrapKedaV1alpha1ScaledJobImpl) Update(ctx context.Context, in *v1alpha1.ScaledJob, opts v1.UpdateOptions) (*v1alpha1.ScaledJob, error) {
+	in.SetGroupVersionKind(schema.GroupVersionKind{
+		Group:   "keda",
+		Version: "v1alpha1",
+		Kind:    "ScaledJob",
+	})
+	uo := &unstructured.Unstructured{}
+	if err := convert(in, uo); err != nil {
+		return nil, err
+	}
+	uo, err := w.dyn.Namespace(w.namespace).Update(ctx, uo, opts)
+	if err != nil {
+		return nil, err
+	}
+	out := &v1alpha1.ScaledJob{}
+	if err := convert(uo, out); err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (w *wrapKedaV1alpha1ScaledJobImpl) UpdateStatus(ctx context.Context, in *v1alpha1.ScaledJob, opts v1.UpdateOptions) (*v1alpha1.ScaledJob, error) {
+	in.SetGroupVersionKind(schema.GroupVersionKind{
+		Group:   "keda",
+		Version: "v1alpha1",
+		Kind:    "ScaledJob",
+	})
+	uo := &unstructured.Unstructured{}
+	if err := convert(in, uo); err != nil {
+		return nil, err
+	}
+	uo, err := w.dyn.Namespace(w.namespace).UpdateStatus(ctx, uo, opts)
+	if err != nil {
+		return nil, err
+	}
+	out := &v1alpha1.ScaledJob{}
+	if err := convert(uo, out); err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (w *wrapKedaV1alpha1ScaledJobImpl) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) {
+	return nil, errors.New("NYI: Watch")
+}
+
+func (w *wrapKedaV1alpha1) ScaledObjects(namespace string) typedkedav1alpha1.ScaledObjectInterface {
+	return &wrapKedaV1alpha1ScaledObjectImpl{
+		dyn: w.dyn.Resource(schema.GroupVersionResource{
+			Group:    "keda",
+			Version:  "v1alpha1",
+			Resource: "scaledobjects",
+		}),
+
+		namespace: namespace,
+	}
+}
+
+type wrapKedaV1alpha1ScaledObjectImpl struct {
+	dyn dynamic.NamespaceableResourceInterface
+
+	namespace string
+}
+
+var _ typedkedav1alpha1.ScaledObjectInterface = (*wrapKedaV1alpha1ScaledObjectImpl)(nil)
+
+func (w *wrapKedaV1alpha1ScaledObjectImpl) Create(ctx context.Context, in *v1alpha1.ScaledObject, opts v1.CreateOptions) (*v1alpha1.ScaledObject, error) {
+	in.SetGroupVersionKind(schema.GroupVersionKind{
+		Group:   "keda",
+		Version: "v1alpha1",
+		Kind:    "ScaledObject",
+	})
+	uo := &unstructured.Unstructured{}
+	if err := convert(in, uo); err != nil {
+		return nil, err
+	}
+	uo, err := w.dyn.Namespace(w.namespace).Create(ctx, uo, opts)
+	if err != nil {
+		return nil, err
+	}
+	out := &v1alpha1.ScaledObject{}
+	if err := convert(uo, out); err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (w *wrapKedaV1alpha1ScaledObjectImpl) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error {
+	return w.dyn.Namespace(w.namespace).Delete(ctx, name, opts)
+}
+
+func (w *wrapKedaV1alpha1ScaledObjectImpl) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error {
+	return w.dyn.Namespace(w.namespace).DeleteCollection(ctx, opts, listOpts)
+}
+
+func (w *wrapKedaV1alpha1ScaledObjectImpl) Get(ctx context.Context, name string, opts v1.GetOptions) (*v1alpha1.ScaledObject, error) {
+	uo, err := w.dyn.Namespace(w.namespace).Get(ctx, name, opts)
+	if err != nil {
+		return nil, err
+	}
+	out := &v1alpha1.ScaledObject{}
+	if err := convert(uo, out); err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (w *wrapKedaV1alpha1ScaledObjectImpl) List(ctx context.Context, opts v1.ListOptions) (*v1alpha1.ScaledObjectList, error) {
+	uo, err := w.dyn.Namespace(w.namespace).List(ctx, opts)
+	if err != nil {
+		return nil, err
+	}
+	out := &v1alpha1.ScaledObjectList{}
+	if err := convert(uo, out); err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (w *wrapKedaV1alpha1ScaledObjectImpl) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1alpha1.ScaledObject, err error) {
+	uo, err := w.dyn.Namespace(w.namespace).Patch(ctx, name, pt, data, opts)
+	if err != nil {
+		return nil, err
+	}
+	out := &v1alpha1.ScaledObject{}
+	if err := convert(uo, out); err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (w *wrapKedaV1alpha1ScaledObjectImpl) Update(ctx context.Context, in *v1alpha1.ScaledObject, opts v1.UpdateOptions) (*v1alpha1.ScaledObject, error) {
+	in.SetGroupVersionKind(schema.GroupVersionKind{
+		Group:   "keda",
+		Version: "v1alpha1",
+		Kind:    "ScaledObject",
+	})
+	uo := &unstructured.Unstructured{}
+	if err := convert(in, uo); err != nil {
+		return nil, err
+	}
+	uo, err := w.dyn.Namespace(w.namespace).Update(ctx, uo, opts)
+	if err != nil {
+		return nil, err
+	}
+	out := &v1alpha1.ScaledObject{}
+	if err := convert(uo, out); err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (w *wrapKedaV1alpha1ScaledObjectImpl) UpdateStatus(ctx context.Context, in *v1alpha1.ScaledObject, opts v1.UpdateOptions) (*v1alpha1.ScaledObject, error) {
+	in.SetGroupVersionKind(schema.GroupVersionKind{
+		Group:   "keda",
+		Version: "v1alpha1",
+		Kind:    "ScaledObject",
+	})
+	uo := &unstructured.Unstructured{}
+	if err := convert(in, uo); err != nil {
+		return nil, err
+	}
+	uo, err := w.dyn.Namespace(w.namespace).UpdateStatus(ctx, uo, opts)
+	if err != nil {
+		return nil, err
+	}
+	out := &v1alpha1.ScaledObject{}
+	if err := convert(uo, out); err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (w *wrapKedaV1alpha1ScaledObjectImpl) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) {
+	return nil, errors.New("NYI: Watch")
+}
+
+func (w *wrapKedaV1alpha1) TriggerAuthentications(namespace string) typedkedav1alpha1.TriggerAuthenticationInterface {
+	return &wrapKedaV1alpha1TriggerAuthenticationImpl{
+		dyn: w.dyn.Resource(schema.GroupVersionResource{
+			Group:    "keda",
+			Version:  "v1alpha1",
+			Resource: "triggerauthentications",
+		}),
+
+		namespace: namespace,
+	}
+}
+
+type wrapKedaV1alpha1TriggerAuthenticationImpl struct {
+	dyn dynamic.NamespaceableResourceInterface
+
+	namespace string
+}
+
+var _ typedkedav1alpha1.TriggerAuthenticationInterface = (*wrapKedaV1alpha1TriggerAuthenticationImpl)(nil)
+
+func (w *wrapKedaV1alpha1TriggerAuthenticationImpl) Create(ctx context.Context, in *v1alpha1.TriggerAuthentication, opts v1.CreateOptions) (*v1alpha1.TriggerAuthentication, error) {
+	in.SetGroupVersionKind(schema.GroupVersionKind{
+		Group:   "keda",
+		Version: "v1alpha1",
+		Kind:    "TriggerAuthentication",
+	})
+	uo := &unstructured.Unstructured{}
+	if err := convert(in, uo); err != nil {
+		return nil, err
+	}
+	uo, err := w.dyn.Namespace(w.namespace).Create(ctx, uo, opts)
+	if err != nil {
+		return nil, err
+	}
+	out := &v1alpha1.TriggerAuthentication{}
+	if err := convert(uo, out); err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (w *wrapKedaV1alpha1TriggerAuthenticationImpl) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error {
+	return w.dyn.Namespace(w.namespace).Delete(ctx, name, opts)
+}
+
+func (w *wrapKedaV1alpha1TriggerAuthenticationImpl) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error {
+	return w.dyn.Namespace(w.namespace).DeleteCollection(ctx, opts, listOpts)
+}
+
+func (w *wrapKedaV1alpha1TriggerAuthenticationImpl) Get(ctx context.Context, name string, opts v1.GetOptions) (*v1alpha1.TriggerAuthentication, error) {
+	uo, err := w.dyn.Namespace(w.namespace).Get(ctx, name, opts)
+	if err != nil {
+		return nil, err
+	}
+	out := &v1alpha1.TriggerAuthentication{}
+	if err := convert(uo, out); err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (w *wrapKedaV1alpha1TriggerAuthenticationImpl) List(ctx context.Context, opts v1.ListOptions) (*v1alpha1.TriggerAuthenticationList, error) {
+	uo, err := w.dyn.Namespace(w.namespace).List(ctx, opts)
+	if err != nil {
+		return nil, err
+	}
+	out := &v1alpha1.TriggerAuthenticationList{}
+	if err := convert(uo, out); err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (w *wrapKedaV1alpha1TriggerAuthenticationImpl) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1alpha1.TriggerAuthentication, err error) {
+	uo, err := w.dyn.Namespace(w.namespace).Patch(ctx, name, pt, data, opts)
+	if err != nil {
+		return nil, err
+	}
+	out := &v1alpha1.TriggerAuthentication{}
+	if err := convert(uo, out); err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (w *wrapKedaV1alpha1TriggerAuthenticationImpl) Update(ctx context.Context, in *v1alpha1.TriggerAuthentication, opts v1.UpdateOptions) (*v1alpha1.TriggerAuthentication, error) {
+	in.SetGroupVersionKind(schema.GroupVersionKind{
+		Group:   "keda",
+		Version: "v1alpha1",
+		Kind:    "TriggerAuthentication",
+	})
+	uo := &unstructured.Unstructured{}
+	if err := convert(in, uo); err != nil {
+		return nil, err
+	}
+	uo, err := w.dyn.Namespace(w.namespace).Update(ctx, uo, opts)
+	if err != nil {
+		return nil, err
+	}
+	out := &v1alpha1.TriggerAuthentication{}
+	if err := convert(uo, out); err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (w *wrapKedaV1alpha1TriggerAuthenticationImpl) UpdateStatus(ctx context.Context, in *v1alpha1.TriggerAuthentication, opts v1.UpdateOptions) (*v1alpha1.TriggerAuthentication, error) {
+	in.SetGroupVersionKind(schema.GroupVersionKind{
+		Group:   "keda",
+		Version: "v1alpha1",
+		Kind:    "TriggerAuthentication",
+	})
+	uo := &unstructured.Unstructured{}
+	if err := convert(in, uo); err != nil {
+		return nil, err
+	}
+	uo, err := w.dyn.Namespace(w.namespace).UpdateStatus(ctx, uo, opts)
+	if err != nil {
+		return nil, err
+	}
+	out := &v1alpha1.TriggerAuthentication{}
+	if err := convert(uo, out); err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (w *wrapKedaV1alpha1TriggerAuthenticationImpl) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) {
+	return nil, errors.New("NYI: Watch")
+}
diff --git a/vendor/knative.dev/eventing-autoscaler-keda/third_party/pkg/client/injection/client/fake/fake.go b/vendor/knative.dev/eventing-autoscaler-keda/third_party/pkg/client/injection/client/fake/fake.go
new file mode 100644
index 000000000..efa133700
--- /dev/null
+++ b/vendor/knative.dev/eventing-autoscaler-keda/third_party/pkg/client/injection/client/fake/fake.go
@@ -0,0 +1,57 @@
+/*
+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.
+*/
+
+// Code generated by injection-gen. DO NOT EDIT.
+
+package fake
+
+import (
+	context "context"
+
+	runtime "k8s.io/apimachinery/pkg/runtime"
+	rest "k8s.io/client-go/rest"
+	fake "knative.dev/eventing-autoscaler-keda/third_party/pkg/client/clientset/versioned/fake"
+	client "knative.dev/eventing-autoscaler-keda/third_party/pkg/client/injection/client"
+	injection "knative.dev/pkg/injection"
+	logging "knative.dev/pkg/logging"
+)
+
+func init() {
+	injection.Fake.RegisterClient(withClient)
+	injection.Fake.RegisterClientFetcher(func(ctx context.Context) interface{} {
+		return Get(ctx)
+	})
+}
+
+func withClient(ctx context.Context, cfg *rest.Config) context.Context {
+	ctx, _ = With(ctx)
+	return ctx
+}
+
+func With(ctx context.Context, objects ...runtime.Object) (context.Context, *fake.Clientset) {
+	cs := fake.NewSimpleClientset(objects...)
+	return context.WithValue(ctx, client.Key{}, cs), cs
+}
+
+// Get extracts the Kubernetes client from the context.
+func Get(ctx context.Context) *fake.Clientset {
+	untyped := ctx.Value(client.Key{})
+	if untyped == nil {
+		logging.FromContext(ctx).Panic(
+			"Unable to fetch knative.dev/eventing-autoscaler-keda/third_party/pkg/client/clientset/versioned/fake.Clientset from context.")
+	}
+	return untyped.(*fake.Clientset)
+}
diff --git a/vendor/knative.dev/hack/go.work.sum b/vendor/knative.dev/hack/go.work.sum
new file mode 100644
index 000000000..d709822f8
--- /dev/null
+++ b/vendor/knative.dev/hack/go.work.sum
@@ -0,0 +1,2 @@
+golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI=
+golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
diff --git a/vendor/knative.dev/hack/release.sh b/vendor/knative.dev/hack/release.sh
index 6944310ac..db01c2a50 100644
--- a/vendor/knative.dev/hack/release.sh
+++ b/vendor/knative.dev/hack/release.sh
@@ -29,6 +29,10 @@ readonly REPO_UPSTREAM="https://github.com/${ORG_NAME}/${REPO_NAME}"
 readonly NIGHTLY_GCR="gcr.io/knative-nightly/github.com/${ORG_NAME}/${REPO_NAME}"
 readonly RELEASE_GCR="gcr.io/knative-releases/github.com/${ORG_NAME}/${REPO_NAME}"
 
+# Signing identities for knative releases.
+readonly NIGHTLY_SIGNING_IDENTITY="signer@knative-nightly.iam.gserviceaccount.com"
+readonly RELEASE_SIGNING_IDENTITY="signer@knative-releases.iam.gserviceaccount.com"
+
 # Georeplicate images to {us,eu,asia}.gcr.io
 readonly GEO_REPLICATION=(us eu asia)
 
@@ -94,11 +98,12 @@ RELEASE_NOTES=""
 RELEASE_BRANCH=""
 RELEASE_GCS_BUCKET="knative-nightly/${REPO_NAME}"
 RELEASE_DIR=""
-KO_FLAGS="-P --platform=all"
+KO_FLAGS="-P --platform=all --image-refs=imagerefs.txt"
 VALIDATION_TESTS="./test/presubmit-tests.sh"
 ARTIFACTS_TO_PUBLISH=""
 FROM_NIGHTLY_RELEASE=""
 FROM_NIGHTLY_RELEASE_GCS=""
+SIGNING_IDENTITY=""
 export KO_DOCKER_REPO="gcr.io/knative-nightly"
 # Build stripped binary to reduce size
 export GOFLAGS="-ldflags=-s -ldflags=-w"
@@ -301,6 +306,34 @@ function build_from_source() {
   if [[ $? -ne 0 ]]; then
     abort "error building the release"
   fi
+  sign_release || abort "error signing the release"
+}
+
+# Build a release from source.
+function sign_release() {
+  if [ -z "$SIGN_IMAGES" ]; then # Temporary Feature Gate
+    return 0
+  fi
+  ## Sign the images with cosign
+  ## For now, check if ko has created imagerefs.txt file. In the future, missing image refs will break
+  ## the release for all jobs that publish images.
+  if [[ -f "imagerefs.txt" ]]; then
+      echo "Signing Images with the identity ${SIGNING_IDENTITY}"
+      COSIGN_EXPERIMENTAL=1 cosign sign $(cat imagerefs.txt) --recursive --identity-token="$(
+        gcloud auth print-identity-token --audiences=sigstore \
+        --include-email \
+        --impersonate-service-account="${SIGNING_IDENTITY}")"
+  fi
+
+  ## Check if there is checksums.txt file. If so, sign the checksum file
+  if [[ -f "checksums.txt" ]]; then
+      echo "Signing Images with the identity ${SIGNING_IDENTITY}"
+      COSIGN_EXPERIMENTAL=1 cosign sign-blob checksums.txt --output-signature checksums.txt.sig --identity-token="$(
+        gcloud auth print-identity-token --audiences=sigstore \
+        --include-email \
+        --impersonate-service-account="${SIGNING_IDENTITY}")"
+      ARTIFACTS_TO_PUBLISH="${ARTIFACTS_TO_PUBLISH} checksums.txt.sig"
+  fi
 }
 
 # Copy tagged images from the nightly GCR to the release GCR, tagging them 'latest'.
@@ -375,10 +408,12 @@ function parse_flags() {
             ;;
           --release-gcr)
             KO_DOCKER_REPO=$1
+            SIGNING_IDENTITY=$RELEASE_SIGNING_IDENTITY
             has_gcr_flag=1
             ;;
           --release-gcs)
             RELEASE_GCS_BUCKET=$1
+            SIGNING_IDENTITY=$RELEASE_SIGNING_IDENTITY
             RELEASE_DIR=""
             has_gcs_flag=1
             ;;
@@ -449,6 +484,11 @@ function parse_flags() {
     [[ -z "${RELEASE_DIR}" ]] && RELEASE_DIR="${REPO_ROOT_DIR}"
   fi
 
+  # Set signing identity for cosign, it would already be set to the RELEASE one if the release-gcr/release-gcs flags are set
+  if [[ -z "${SIGNING_IDENTITY}" ]]; then
+    SIGNING_IDENTITY="${NIGHTLY_SIGNING_IDENTITY}"
+  fi
+
   [[ -z "${RELEASE_GCS_BUCKET}" && -z "${RELEASE_DIR}" ]] && abort "--release-gcs or --release-dir must be used"
   if [[ -n "${RELEASE_DIR}" ]]; then
     mkdir -p "${RELEASE_DIR}" || abort "cannot create release dir '${RELEASE_DIR}'"
@@ -481,6 +521,7 @@ function parse_flags() {
   readonly RELEASE_DIR
   readonly VALIDATION_TESTS
   readonly FROM_NIGHTLY_RELEASE
+  readonly SIGNING_IDENTITY
 }
 
 # Run tests (unless --skip-tests was passed). Conveniently displays a banner indicating so.
diff --git a/vendor/modules.txt b/vendor/modules.txt
index 44bf210d0..272c1ffef 100644
--- a/vendor/modules.txt
+++ b/vendor/modules.txt
@@ -1343,6 +1343,13 @@ knative.dev/eventing/test/upgrade/prober/wathola/sender
 ## explicit; go 1.18
 knative.dev/eventing-autoscaler-keda/pkg/reconciler/keda
 knative.dev/eventing-autoscaler-keda/third_party/pkg/apis/keda/v1alpha1
+knative.dev/eventing-autoscaler-keda/third_party/pkg/client/clientset/versioned
+knative.dev/eventing-autoscaler-keda/third_party/pkg/client/clientset/versioned/fake
+knative.dev/eventing-autoscaler-keda/third_party/pkg/client/clientset/versioned/scheme
+knative.dev/eventing-autoscaler-keda/third_party/pkg/client/clientset/versioned/typed/keda/v1alpha1
+knative.dev/eventing-autoscaler-keda/third_party/pkg/client/clientset/versioned/typed/keda/v1alpha1/fake
+knative.dev/eventing-autoscaler-keda/third_party/pkg/client/injection/client
+knative.dev/eventing-autoscaler-keda/third_party/pkg/client/injection/client/fake
 # knative.dev/eventing-kafka v0.34.1-0.20220907020318-2f1fbd6dda1b
 ## explicit; go 1.16
 knative.dev/eventing-kafka/pkg/apis/bindings
@@ -1414,7 +1421,7 @@ knative.dev/eventing-kafka/test/upgrade/installation
 ## explicit; go 1.18
 knative.dev/eventing-redis/source/pkg/apis/sources
 knative.dev/eventing-redis/source/pkg/apis/sources/v1alpha1
-# knative.dev/hack v0.0.0-20220907111718-6c301965af4c
+# knative.dev/hack v0.0.0-20220908170219-36b2b3c7a245
 ## explicit; go 1.18
 knative.dev/hack
 knative.dev/hack/shell
@@ -1525,7 +1532,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-20220907152619-a53370571d5b
+# knative.dev/reconciler-test v0.0.0-20220908165920-0cc56d0eebe2
 ## explicit; go 1.18
 knative.dev/reconciler-test/cmd/eventshub
 knative.dev/reconciler-test/pkg/environment


Test patch:
diff --git a/control-plane/pkg/reconciler/source/controller_test.go b/control-plane/pkg/reconciler/source/controller_test.go
index 1218c2267..fbb094333 100644
--- a/control-plane/pkg/reconciler/source/controller_test.go
+++ b/control-plane/pkg/reconciler/source/controller_test.go
@@ -37,11 +37,13 @@ import (
 
 	_ "knative.dev/eventing-kafka-broker/control-plane/pkg/client/internals/kafka/injection/informers/eventing/v1alpha1/consumergroup/fake"
 
+	kedaclient "knative.dev/eventing-autoscaler-keda/third_party/pkg/client/injection/client/fake"
 	"knative.dev/eventing-kafka-broker/control-plane/pkg/config"
 )
 
-func TestNewControllerV2(t *testing.T) {
+func TestNewController(t *testing.T) {
 	ctx, _ := reconcilertesting.SetupFakeContext(t)
+	ctx, _ = kedaclient.With(ctx)
 
 	configs := &config.Env{
 		SystemNamespace:      "cm",
diff --git a/control-plane/pkg/reconciler/source/source_test.go b/control-plane/pkg/reconciler/source/source_test.go
index 2ace88d4a..650f4dd62 100644
--- a/control-plane/pkg/reconciler/source/source_test.go
+++ b/control-plane/pkg/reconciler/source/source_test.go
@@ -48,6 +48,8 @@ import (
 	fakeconsumergroupinformer "knative.dev/eventing-kafka-broker/control-plane/pkg/client/internals/kafka/injection/client/fake"
 
 	. "knative.dev/eventing-kafka-broker/control-plane/pkg/reconciler/testing"
+
+	kedaclient "knative.dev/eventing-autoscaler-keda/third_party/pkg/client/injection/client/fake"
 )
 
 func TestGetLabels(t *testing.T) {
@@ -473,10 +475,60 @@ func TestReconcileKind(t *testing.T) {
 				},
 			},
 		},
+		{
+			Name: "Reconciled normal - with autoscaling annotations",
+			Objects: []runtime.Object{
+				NewSource(WithAutoscalingAnnotationsSource()),
+			},
+			Key: testKey,
+			WantCreates: []runtime.Object{
+				NewConsumerGroup(
+					WithConsumerGroupName(SourceUUID),
+					WithConsumerGroupNamespace(SourceNamespace),
+					WithConsumerGroupOwnerRef(kmeta.NewControllerRef(NewSource())),
+					WithConsumerGroupMetaLabels(OwnerAsSourceLabel),
+					WithConsumerGroupLabels(ConsumerSourceLabel),
+					WithConsumerGroupAnnotations(ConsumerGroupAnnotations),
+					ConsumerGroupConsumerSpec(NewConsumerSpec(
+						ConsumerTopics(SourceTopics[0], SourceTopics[1]),
+						ConsumerConfigs(
+							ConsumerGroupIdConfig(SourceConsumerGroup),
+							ConsumerBootstrapServersConfig(SourceBootstrapServers),
+						),
+						ConsumerAuth(NewConsumerSpecAuth()),
+						ConsumerDelivery(
+							NewConsumerSpecDelivery(
+								internals.Ordered,
+								NewConsumerTimeout("PT600S"),
+								NewConsumerRetry(10),
+								NewConsumerBackoffDelay("PT0.3S"),
+								NewConsumerBackoffPolicy(eventingduck.BackoffPolicyExponential),
+							),
+						),
+						ConsumerSubscriber(NewSourceSinkReference()),
+						ConsumerReply(ConsumerNoReply()),
+					)),
+					ConsumerGroupReplicas(1),
+				),
+			},
+			WantStatusUpdates: []clientgotesting.UpdateActionImpl{
+				{
+					Object: NewSource(
+						StatusSourceConsumerGroupUnknown(),
+						StatusSourceSinkResolved(""),
+						StatusSourceSelector(),
+						WithAutoscalingAnnotationsSource(),
+					),
+				},
+			},
+		},
 		{
 			Name: "Reconciled normal - existing cg with sink update",
 			Objects: []runtime.Object{
-				NewSource(WithSourceSink(NewSourceSink2Reference())),
+				NewSource(
+					WithSourceSink(NewSourceSink2Reference()),
+					WithSourceConsumers(1),
+				),
 				NewConsumerGroup(
 					WithConsumerGroupName(SourceUUID),
 					WithConsumerGroupNamespace(SourceNamespace),
@@ -534,7 +586,6 @@ func TestReconcileKind(t *testing.T) {
 							ConsumerSubscriber(NewSourceSink2Reference()),
 							ConsumerReply(ConsumerNoReply()),
 						)),
-						ConsumerGroupReplicas(1),
 						ConsumerGroupReady,
 					),
 				},
@@ -543,6 +594,7 @@ func TestReconcileKind(t *testing.T) {
 				{
 					Object: NewSource(
 						WithSourceSink(NewSourceSink2Reference()),
+						WithSourceConsumers(1),
 						StatusSourceConsumerGroup(),
 						StatusSourceSinkResolved(""),
 						StatusSourceSelector(),
@@ -553,7 +605,64 @@ func TestReconcileKind(t *testing.T) {
 		{
 			Name: "Reconciled normal - existing cg with update",
 			Objects: []runtime.Object{
-				NewSource(),
+				NewSource(WithSourceConsumers(1)),
+				NewConsumerGroup(
+					WithConsumerGroupName(SourceUUID),
+					WithConsumerGroupNamespace(SourceNamespace),
+					WithConsumerGroupOwnerRef(kmeta.NewControllerRef(NewSource())),
+					WithConsumerGroupMetaLabels(OwnerAsSourceLabel),
+					WithConsumerGroupLabels(ConsumerSourceLabel),
+					ConsumerGroupReplicas(1),
+					ConsumerGroupReady,
+				),
+			},
+			Key: testKey,
+			WantUpdates: []clientgotesting.UpdateActionImpl{
+				{
+					Object: NewConsumerGroup(
+						WithConsumerGroupName(SourceUUID),
+						WithConsumerGroupNamespace(SourceNamespace),
+						WithConsumerGroupOwnerRef(kmeta.NewControllerRef(NewSource())),
+						WithConsumerGroupMetaLabels(OwnerAsSourceLabel),
+						WithConsumerGroupLabels(ConsumerSourceLabel),
+						ConsumerGroupConsumerSpec(NewConsumerSpec(
+							ConsumerTopics(SourceTopics[0], SourceTopics[1]),
+							ConsumerConfigs(
+								ConsumerGroupIdConfig(SourceConsumerGroup),
+								ConsumerBootstrapServersConfig(SourceBootstrapServers),
+							),
+							ConsumerAuth(NewConsumerSpecAuth()),
+							ConsumerDelivery(
+								NewConsumerSpecDelivery(
+									internals.Ordered,
+									NewConsumerTimeout("PT600S"),
+									NewConsumerRetry(10),
+									NewConsumerBackoffDelay("PT0.3S"),
+									NewConsumerBackoffPolicy(eventingduck.BackoffPolicyExponential),
+								),
+							),
+							ConsumerSubscriber(NewSourceSinkReference()),
+							ConsumerReply(ConsumerNoReply()),
+						)),
+						ConsumerGroupReady,
+					),
+				},
+			},
+			WantStatusUpdates: []clientgotesting.UpdateActionImpl{
+				{
+					Object: NewSource(
+						WithSourceConsumers(1),
+						StatusSourceConsumerGroup(),
+						StatusSourceSinkResolved(""),
+						StatusSourceSelector(),
+					),
+				},
+			},
+		},
+		{
+			Name: "Reconciled normal - existing cg with annotations update",
+			Objects: []runtime.Object{
+				NewSource(WithAutoscalingAnnotationsSource()),
 				NewConsumerGroup(
 					WithConsumerGroupName(SourceUUID),
 					WithConsumerGroupNamespace(SourceNamespace),
@@ -573,6 +682,7 @@ func TestReconcileKind(t *testing.T) {
 						WithConsumerGroupOwnerRef(kmeta.NewControllerRef(NewSource())),
 						WithConsumerGroupMetaLabels(OwnerAsSourceLabel),
 						WithConsumerGroupLabels(ConsumerSourceLabel),
+						WithConsumerGroupAnnotations(ConsumerGroupAnnotations),
 						ConsumerGroupConsumerSpec(NewConsumerSpec(
 							ConsumerTopics(SourceTopics[0], SourceTopics[1]),
 							ConsumerConfigs(
@@ -592,7 +702,6 @@ func TestReconcileKind(t *testing.T) {
 							ConsumerSubscriber(NewSourceSinkReference()),
 							ConsumerReply(ConsumerNoReply()),
 						)),
-						ConsumerGroupReplicas(1),
 						ConsumerGroupReady,
 					),
 				},
@@ -603,6 +712,7 @@ func TestReconcileKind(t *testing.T) {
 						StatusSourceConsumerGroup(),
 						StatusSourceSinkResolved(""),
 						StatusSourceSelector(),
+						WithAutoscalingAnnotationsSource(),
 					),
 				},
 			},
@@ -610,7 +720,7 @@ func TestReconcileKind(t *testing.T) {
 		{
 			Name: "Reconciled normal - existing cg with update but not ready",
 			Objects: []runtime.Object{
-				NewSource(),
+				NewSource(WithSourceConsumers(1)),
 				NewConsumerGroup(
 					WithConsumerGroupName(SourceUUID),
 					WithConsumerGroupNamespace(SourceNamespace),
@@ -649,13 +759,13 @@ func TestReconcileKind(t *testing.T) {
 							ConsumerSubscriber(NewSourceSinkReference()),
 							ConsumerReply(ConsumerNoReply()),
 						)),
-						ConsumerGroupReplicas(1),
 					),
 				},
 			},
 			WantStatusUpdates: []clientgotesting.UpdateActionImpl{
 				{
 					Object: NewSource(
+						WithSourceConsumers(1),
 						StatusSourceConsumerGroupUnknown(),
 						StatusSourceSinkResolved(""),
 						StatusSourceSelector(),
@@ -666,13 +776,14 @@ func TestReconcileKind(t *testing.T) {
 		{
 			Name: "Reconciled normal - existing cg without update",
 			Objects: []runtime.Object{
-				NewSource(),
+				NewSource(WithAutoscalingAnnotationsSource()),
 				NewConsumerGroup(
 					WithConsumerGroupName(SourceUUID),
 					WithConsumerGroupNamespace(SourceNamespace),
 					WithConsumerGroupOwnerRef(kmeta.NewControllerRef(NewSource())),
 					WithConsumerGroupMetaLabels(OwnerAsSourceLabel),
 					WithConsumerGroupLabels(ConsumerSourceLabel),
+					WithConsumerGroupAnnotations(ConsumerGroupAnnotations),
 					ConsumerGroupConsumerSpec(NewConsumerSpec(
 						ConsumerTopics(SourceTopics[0], SourceTopics[1]),
 						ConsumerConfigs(
@@ -703,6 +814,7 @@ func TestReconcileKind(t *testing.T) {
 						StatusSourceConsumerGroup(),
 						StatusSourceSinkResolved(""),
 						StatusSourceSelector(),
+						WithAutoscalingAnnotationsSource(),
 					),
 				},
 			},
@@ -846,10 +958,12 @@ func TestReconcileKind(t *testing.T) {
 	}
 
 	table.Test(t, NewFactory(nil, func(ctx context.Context, listers *Listers, env *config.Env, row *TableRow) controller.Reconciler {
+		ctx, _ = kedaclient.With(ctx)
 
 		reconciler := &Reconciler{
 			ConsumerGroupLister: listers.GetConsumerGroupLister(),
 			InternalsClient:     fakeconsumergroupinformer.Get(ctx),
+			KedaClient:          kedaclient.Get(ctx),
 		}
 
 		r := eventingkafkasourcereconciler.NewReconciler(
diff --git a/control-plane/pkg/reconciler/testing/objects_consumergroup.go b/control-plane/pkg/reconciler/testing/objects_consumergroup.go
index 581708680..bcb283dd3 100644
--- a/control-plane/pkg/reconciler/testing/objects_consumergroup.go
+++ b/control-plane/pkg/reconciler/testing/objects_consumergroup.go
@@ -26,6 +26,7 @@ import (
 	"knative.dev/pkg/apis"
 	duckv1 "knative.dev/pkg/apis/duck/v1"
 
+	"knative.dev/eventing-autoscaler-keda/pkg/reconciler/keda"
 	kafkainternals "knative.dev/eventing-kafka-broker/control-plane/pkg/apis/internals/kafka/eventing/v1alpha1"
 )
 
@@ -67,6 +68,15 @@ var (
 		kafkainternals.UserFacingResourceLabelSelector: "kafkachannel",
 		kafkainternals.KafkaChannelNameLabel:           ChannelName,
 	}
+
+	ConsumerGroupAnnotations = map[string]string{
+		keda.AutoscalingClassAnnotation:               keda.KEDA,
+		keda.AutoscalingMinScaleAnnotation:            "0",
+		keda.AutoscalingMaxScaleAnnotation:            "5",
+		keda.KedaAutoscalingPollingIntervalAnnotation: "30",
+		keda.KedaAutoscalingCooldownPeriodAnnotation:  "300",
+		keda.KedaAutoscalingKafkaLagThreshold:         "10",
+	}
 )
 
 type ConsumerGroupOption func(cg *kafkainternals.ConsumerGroup)
@@ -141,6 +151,12 @@ func WithConsumerGroupOwnerRef(ownerref *metav1.OwnerReference) ConsumerGroupOpt
 	}
 }
 
+func WithConsumerGroupAnnotations(annots map[string]string) ConsumerGroupOption {
+	return func(cg *kafkainternals.ConsumerGroup) {
+		cg.ObjectMeta.Annotations = annots
+	}
+}
+
 func WithConsumerGroupMetaLabels(labels map[string]string) ConsumerGroupOption {
 	return func(cg *kafkainternals.ConsumerGroup) {
 		cg.Labels = labels
diff --git a/control-plane/pkg/reconciler/testing/objects_source.go b/control-plane/pkg/reconciler/testing/objects_source.go
index a4af5bb6d..72c7ec56d 100644
--- a/control-plane/pkg/reconciler/testing/objects_source.go
+++ b/control-plane/pkg/reconciler/testing/objects_source.go
@@ -93,6 +93,22 @@ func WithCloudEventOverrides(overrides *duckv1.CloudEventOverrides) KRShapedOpti
 	}
 }
 
+func WithAutoscalingAnnotationsSource() KRShapedOption {
+	return func(obj duckv1.KRShaped) {
+		ks := obj.(*sources.KafkaSource)
+
+		if ks.Annotations == nil {
+			ks.Annotations = make(map[string]string)
+		}
+
+		for k, v := range ConsumerGroupAnnotations {
+			if _, ok := ks.Annotations[k]; !ok {
+				ks.Annotations[k] = v
+			}
+		}
+	}
+}
+
 func NewSourceSinkObject() *corev1.Service {
 	return NewService()
 }
@@ -128,6 +144,13 @@ func WithSourceSink(d duckv1.Destination) KRShapedOption {
 	}
 }
 
+func WithSourceConsumers(replicas int32) KRShapedOption {
+	return func(obj duckv1.KRShaped) {
+		s := obj.(*sources.KafkaSource)
+		s.Spec.Consumers = pointer.Int32Ptr(replicas)
+	}
+}
+
 func SourceDispatcherPod(namespace string, annotations map[string]string) runtime.Object {
 	return &corev1.Pod{
 		TypeMeta: metav1.TypeMeta{
diff --git a/data-plane/core/src/test/java/dev/knative/eventing/kafka/broker/core/metrics/MetricsTest.java b/data-plane/core/src/test/java/dev/knative/eventing/kafka/broker/core/metrics/MetricsTest.java
index 7ce223e64..943fa3d0c 100644
--- a/data-plane/core/src/test/java/dev/knative/eventing/kafka/broker/core/metrics/MetricsTest.java
+++ b/data-plane/core/src/test/java/dev/knative/eventing/kafka/broker/core/metrics/MetricsTest.java
@@ -17,7 +17,10 @@ package dev.knative.eventing.kafka.broker.core.metrics;
 
 import static org.assertj.core.api.Assertions.assertThat;
 
+import dev.knative.eventing.kafka.broker.contract.DataPlaneContract;
 import dev.knative.eventing.kafka.broker.core.utils.BaseEnv;
+import io.micrometer.core.instrument.Tag;
+import io.micrometer.core.instrument.Tags;
 import io.vertx.core.Vertx;
 import io.vertx.junit5.VertxExtension;
 import io.vertx.junit5.VertxTestContext;
@@ -26,9 +29,13 @@ import io.vertx.micrometer.backends.BackendRegistries;
 import org.apache.kafka.clients.consumer.MockConsumer;
 import org.apache.kafka.clients.consumer.OffsetResetStrategy;
 import org.apache.kafka.clients.producer.MockProducer;
+import org.assertj.core.api.AssertionInfo;
+import org.assertj.core.api.Assertions;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
 
+import java.util.stream.Collectors;
+
 @ExtendWith(VertxExtension.class)
 public class MetricsTest {
 
@@ -55,4 +62,80 @@ public class MetricsTest {
     final var meterBinder = Metrics.register(new MockConsumer<>(OffsetResetStrategy.LATEST));
     meterBinder.close();
   }
+
+  @Test
+  public void searchShouldReturnMetersWithAdditionalTags() {
+
+    final var registry = Metrics.getRegistry();
+
+    Metrics.eventCount(Tags.of(
+        Tag.of(Metrics.Tags.EVENT_TYPE, "type"),
+        Tag.of(Metrics.Tags.RESOURCE_NAME, "name"),
+        Tag.of(Metrics.Tags.RESOURCE_NAMESPACE, "namespace")
+      ))
+      .register(registry)
+      .increment();
+
+    Metrics.eventDispatchLatency(Tags.of(
+        Tag.of(Metrics.Tags.EVENT_TYPE, "type"),
+        Tag.of(Metrics.Tags.RESOURCE_NAME, "name"),
+        Tag.of(Metrics.Tags.CONSUMER_NAME, "cname"),
+        Tag.of(Metrics.Tags.RESOURCE_NAMESPACE, "namespace")
+      ))
+      .register(registry)
+      .record(10);
+
+    Metrics.eventProcessingLatency(Tags.of(
+        Tag.of(Metrics.Tags.EVENT_TYPE, "type"),
+        Tag.of(Metrics.Tags.RESOURCE_NAME, "name"),
+        Tag.of(Metrics.Tags.CONSUMER_NAME, "cname"),
+        Tag.of(Metrics.Tags.RESOURCE_NAMESPACE, "namespace")
+      ))
+      .register(registry)
+      .record(10);
+
+    Metrics.eventDispatchLatency(Tags.of(
+        Tag.of(Metrics.Tags.EVENT_TYPE, "type"),
+        Tag.of(Metrics.Tags.RESOURCE_NAME, "name"),
+        Tag.of(Metrics.Tags.CONSUMER_NAME, "cname"),
+        Tag.of(Metrics.Tags.RESOURCE_NAMESPACE, "other-namespace")
+      ))
+      .register(registry)
+      .record(10);
+
+    final var expectedResourceMetersCount = 3;
+    final var expectedEgressMetersCount = 2;
+
+    final var resourceMeters = Metrics.searchResourceMeters(registry, DataPlaneContract.Reference.newBuilder()
+      .setName("name")
+      .setNamespace("namespace")
+      .build()
+    );
+
+    final var egressMeters = Metrics.searchEgressMeters(registry, DataPlaneContract.Reference.newBuilder()
+      .setName("cname")
+      .setNamespace("namespace")
+      .build()
+    );
+
+    Assertions.assertThat(resourceMeters).hasSize(expectedResourceMetersCount);
+    Assertions.assertThat(egressMeters).hasSize(expectedEgressMetersCount);
+
+    Assertions.assertThat(
+      resourceMeters.stream().filter(m -> m.getId().getName().equals(Metrics.EVENTS_COUNT)).collect(Collectors.toList())
+    ).hasSize(1);
+    Assertions.assertThat(
+      resourceMeters.stream().filter(m -> m.getId().getName().equals(Metrics.EVENT_DISPATCH_LATENCY)).collect(Collectors.toList())
+    ).hasSize(1);
+    Assertions.assertThat(
+      resourceMeters.stream().filter(m -> m.getId().getName().equals(Metrics.EVENT_PROCESSING_LATENCY)).collect(Collectors.toList())
+    ).hasSize(1);
+
+    Assertions.assertThat(
+      egressMeters.stream().filter(m -> m.getId().getName().equals(Metrics.EVENT_DISPATCH_LATENCY)).collect(Collectors.toList())
+    ).hasSize(1);
+    Assertions.assertThat(
+      egressMeters.stream().filter(m -> m.getId().getName().equals(Metrics.EVENT_PROCESSING_LATENCY)).collect(Collectors.toList())
+    ).hasSize(1);
+  }
 }
diff --git a/vendor/knative.dev/reconciler-test/pkg/environment/magic.go b/vendor/knative.dev/reconciler-test/pkg/environment/magic.go
index 0d8ec5957..d79479fa9 100644
--- a/vendor/knative.dev/reconciler-test/pkg/environment/magic.go
+++ b/vendor/knative.dev/reconciler-test/pkg/environment/magic.go
@@ -75,6 +75,10 @@ type MagicEnvironment struct {
 
 	// managedT is used for test-scoped logging, if configured.
 	managedT feature.T
+
+	// imagePullSecretNamespace/imagePullSecretName: An optional secret to add to service account of new namespaces
+	imagePullSecretName      string
+	imagePullSecretNamespace string
 }
 
 const (
@@ -153,7 +157,9 @@ func (mr *MagicGlobalEnvironment) Environment(opts ...EnvOpts) (context.Context,
 		s:            mr.FeatureState,
 		featureMatch: mr.FeatureMatch,
 
-		namespace: namespace,
+		namespace:                namespace,
+		imagePullSecretName:      "kn-test-image-pull-secret",
+		imagePullSecretNamespace: "default",
 	}
 
 	ctx := ContextWith(mr.c, env)
@@ -237,6 +243,21 @@ func InNamespace(namespace string) EnvOpts {
 	}
 }
 
+// WithImagePullSecret takes namespace and name of a Secret to be added to ServiceAccounts
+// of newly created namespaces. This is useful if tests refer to private registries that require
+// authentication.
+func WithImagePullSecret(namespace string, name string) EnvOpts {
+	return func(ctx context.Context, env Environment) (context.Context, error) {
+		mr, ok := env.(*MagicEnvironment)
+		if !ok {
+			return ctx, errors.New("WithImagePullSecret: not a magic env")
+		}
+		mr.imagePullSecretNamespace = namespace
+		mr.imagePullSecretName = name
+		return ctx, nil
+	}
+}
+
 func (mr *MagicEnvironment) Namespace() string {
 	return mr.namespace
 }
diff --git a/vendor/knative.dev/reconciler-test/pkg/environment/namespace.go b/vendor/knative.dev/reconciler-test/pkg/environment/namespace.go
index 8d2783561..d2419be8e 100644
--- a/vendor/knative.dev/reconciler-test/pkg/environment/namespace.go
+++ b/vendor/knative.dev/reconciler-test/pkg/environment/namespace.go
@@ -23,6 +23,7 @@ import (
 	corev1 "k8s.io/api/core/v1"
 	apierrors "k8s.io/apimachinery/pkg/api/errors"
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+	"k8s.io/apimachinery/pkg/types"
 	"k8s.io/apimachinery/pkg/util/wait"
 	kubeclient "knative.dev/pkg/client/injection/kube/client"
 )
@@ -30,7 +31,7 @@ import (
 // CreateNamespaceIfNeeded creates a new namespace if it does not exist.
 func (mr *MagicEnvironment) CreateNamespaceIfNeeded() error {
 	c := kubeclient.Get(mr.c)
-	nsSpec, err := c.CoreV1().Namespaces().Get(context.Background(), mr.namespace, metav1.GetOptions{})
+	_, err := c.CoreV1().Namespaces().Get(context.Background(), mr.namespace, metav1.GetOptions{})
 
 	if err != nil {
 		if !apierrors.IsNotFound(err) {
@@ -39,8 +40,8 @@ func (mr *MagicEnvironment) CreateNamespaceIfNeeded() error {
 
 		// Namespace was not found, try to create it.
 
-		nsSpec = &corev1.Namespace{ObjectMeta: metav1.ObjectMeta{Name: mr.namespace}}
-		nsSpec, err = c.CoreV1().Namespaces().Create(context.Background(), nsSpec, metav1.CreateOptions{})
+		nsSpec := &corev1.Namespace{ObjectMeta: metav1.ObjectMeta{Name: mr.namespace}}
+		_, err = c.CoreV1().Namespaces().Create(context.Background(), nsSpec, metav1.CreateOptions{})
 
 		if err != nil {
 			return fmt.Errorf("failed to create Namespace: %s; %v", mr.namespace, err)
@@ -52,15 +53,47 @@ func (mr *MagicEnvironment) CreateNamespaceIfNeeded() error {
 
 		// https://github.com/kubernetes/kubernetes/issues/66689
 		// We can only start creating pods after the default ServiceAccount is created by the kube-controller-manager.
+		var sa *corev1.ServiceAccount
 		if err := wait.PollImmediate(interval, timeout, func() (bool, error) {
 			sas := c.CoreV1().ServiceAccounts(mr.namespace)
-			if _, err := sas.Get(context.Background(), "default", metav1.GetOptions{}); err == nil {
+			if sa, err = sas.Get(context.Background(), "default", metav1.GetOptions{}); err == nil {
 				return true, nil
 			}
 			return false, nil
 		}); err != nil {
 			return fmt.Errorf("the default ServiceAccount was not created for the Namespace: %s", mr.namespace)
 		}
+
+		srcSecret, err := c.CoreV1().Secrets(mr.imagePullSecretNamespace).Get(context.Background(), mr.imagePullSecretName, metav1.GetOptions{})
+		if err != nil {
+			if apierrors.IsNotFound(err) {
+				// Image pull secret doesn't exist, so no need to continue
+				return nil
+			}
+			return fmt.Errorf("error retrieving %s/%s secret: %s", mr.imagePullSecretNamespace, mr.imagePullSecretName, err)
+		}
+
+		// If image pull secret exists in the default namespace, copy it over to the new namespace
+		_, err = c.CoreV1().Secrets(mr.namespace).Create(
+			context.Background(),
+			&corev1.Secret{
+				ObjectMeta: metav1.ObjectMeta{
+					Name: mr.imagePullSecretName,
+				},
+				Data: srcSecret.Data,
+				Type: srcSecret.Type,
+			},
+			metav1.CreateOptions{})
+
+		if err != nil && !apierrors.IsAlreadyExists(err) {
+			return fmt.Errorf("error copying the image pull Secret: %s", err)
+		}
+
+		_, err = c.CoreV1().ServiceAccounts(mr.namespace).Patch(context.Background(), sa.Name, types.StrategicMergePatchType,
+			[]byte(`{"imagePullSecrets":[{"name":"`+mr.imagePullSecretName+`"}]}`), metav1.PatchOptions{})
+		if err != nil {
+			return fmt.Errorf("patch failed on NS/SA (%s/%s): %s", mr.namespace, sa.Name, err)
+		}
 	}
 	return nil
 }