Skip to content

Fix transfer-hpa-ownership panic when hpa name not provided#7260

Merged
JorTurFer merged 4 commits intokedacore:mainfrom
jameswilliams1:fix-transfer-hpa-panic
Nov 22, 2025
Merged

Fix transfer-hpa-ownership panic when hpa name not provided#7260
JorTurFer merged 4 commits intokedacore:mainfrom
jameswilliams1:fix-transfer-hpa-panic

Conversation

@jameswilliams1
Copy link
Contributor

@jameswilliams1 jameswilliams1 commented Nov 21, 2025

  • Fix panic in scaledobject webhook when transfer-hpa-ownership is true but the existing hpa name is not provided in advanced config
  • add test for above case

Checklist

Fixes #7254

@jameswilliams1 jameswilliams1 requested a review from a team as a code owner November 21, 2025 18:12
@keda-automation keda-automation requested a review from a team November 21, 2025 18:12
@github-actions
Copy link

Thank you for your contribution! 🙏

Please understand that we will do our best to review your PR and give you feedback as soon as possible, but please bear with us if it takes a little longer as expected.

While you are waiting, make sure to:

  • Add an entry in our changelog in alphabetical order and link related issue
  • Update the documentation, if needed
  • Add unit & e2e tests for your changes
  • GitHub checks are passing
  • Is the DCO check failing? Here is how you can fix DCO issues

Once the initial tests are successful, a KEDA member will ensure that the e2e tests are run. Once the e2e tests have been successfully completed, the PR may be merged at a later date. Please be patient.

Learn more about our contribution guide.

@snyk-io
Copy link

snyk-io bot commented Nov 21, 2025

Snyk checks have passed. No issues have been found so far.

Status Scanner Critical High Medium Low Total (0)
Open Source Security 0 0 0 0 0 issues

💻 Catch issues earlier using the plugins for VS Code, JetBrains IDEs, Visual Studio, and Eclipse.

Signed-off-by: James Williams <jamesleighwilliams@gmail.com>
… specified (kedacore#7254)

Signed-off-by: James Williams <jamesleighwilliams@gmail.com>
Signed-off-by: James Williams <jamesleighwilliams@gmail.com>
@rickbrouwer
Copy link
Member

Thanks for the PR! I see that some vendor files have also been changed. Are these changes necessary for this PR?

Copy link
Member

@JorTurFer JorTurFer left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is nice! Could you remove vendor changes?

Signed-off-by: James Williams <jamesleighwilliams@gmail.com>
@keda-automation keda-automation requested a review from a team November 22, 2025 17:58
@jameswilliams1
Copy link
Contributor Author

Thanks for the PR! I see that some vendor files have also been changed. Are these changes necessary for this PR?

no i think they are CRLF and my git settings changed them, reverted

Copy link
Member

@rickbrouwer rickbrouwer left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM!

@JorTurFer
Copy link
Member

JorTurFer commented Nov 22, 2025

/run-e2e transfer
Update: You can check the progress here

@JorTurFer
Copy link
Member

JorTurFer commented Nov 22, 2025

/run-e2e scaled_object_validation
Update: You can check the progress here

@JorTurFer JorTurFer merged commit f42c1f1 into kedacore:main Nov 22, 2025
24 checks passed
@jameswilliams1 jameswilliams1 deleted the fix-transfer-hpa-panic branch November 24, 2025 12:34
@JorTurFer JorTurFer mentioned this pull request Dec 7, 2025
31 tasks
JorTurFer pushed a commit to JorTurFer/keda that referenced this pull request Dec 8, 2025
…#7260)

* chore: renormalize line endings

Signed-off-by: James Williams <jamesleighwilliams@gmail.com>

* fix: nil pointer when transfer-hpa-ownership is true but hpa name not specified (kedacore#7254)

Signed-off-by: James Williams <jamesleighwilliams@gmail.com>

* update changelog

Signed-off-by: James Williams <jamesleighwilliams@gmail.com>

* revert vendor changes

Signed-off-by: James Williams <jamesleighwilliams@gmail.com>

---------

Signed-off-by: James Williams <jamesleighwilliams@gmail.com>
JorTurFer pushed a commit to JorTurFer/keda that referenced this pull request Dec 8, 2025
…#7260)

* chore: renormalize line endings

Signed-off-by: James Williams <jamesleighwilliams@gmail.com>

* fix: nil pointer when transfer-hpa-ownership is true but hpa name not specified (kedacore#7254)

Signed-off-by: James Williams <jamesleighwilliams@gmail.com>

* update changelog

Signed-off-by: James Williams <jamesleighwilliams@gmail.com>

* revert vendor changes

Signed-off-by: James Williams <jamesleighwilliams@gmail.com>

---------

Signed-off-by: James Williams <jamesleighwilliams@gmail.com>
JorTurFer pushed a commit to JorTurFer/keda that referenced this pull request Dec 8, 2025
…#7260)

* chore: renormalize line endings

Signed-off-by: James Williams <jamesleighwilliams@gmail.com>

* fix: nil pointer when transfer-hpa-ownership is true but hpa name not specified (kedacore#7254)

Signed-off-by: James Williams <jamesleighwilliams@gmail.com>

* update changelog

Signed-off-by: James Williams <jamesleighwilliams@gmail.com>

* revert vendor changes

Signed-off-by: James Williams <jamesleighwilliams@gmail.com>

---------

Signed-off-by: James Williams <jamesleighwilliams@gmail.com>
Signed-off-by: Jorge Turrado <jorge.turrado@mail.schwarz>
JorTurFer added a commit that referenced this pull request Dec 8, 2025
* fix: Correct parse error ActiveMQ (#7245)

Signed-off-by: Rick Brouwer <rickbrouwer@gmail.com>
Signed-off-by: Jorge Turrado <jorge.turrado@mail.schwarz>

* fix: metricUnavailableValue parameter not working in Datadog scaler (#7241)

* fix: metricUnavailableValue parameter not working in Datadog scaler

The UseFiller flag was not being set correctly when metricUnavailableValue
was configured. This fix distinguishes between 'not configured' and
'explicitly set to 0' by checking TriggerMetadata directly.

Changes:
- Set UseFiller in validateAPIMetadata() when metricUnavailableValue exists
- Set UseFiller in validateClusterAgentMetadata() when metricUnavailableValue exists
- Remove UseFiller logic from Validate() (responsibility moved to validate functions)
- Update tests to verify UseFiller behavior with various values including 0

This allows users to explicitly set metricUnavailableValue to 0 and have
it work as a fallback value, while still erroring when not configured.

Fixes #7238

Signed-off-by: Hiroki Matsui <fenethtool@gmail.com>

* test: cover both API and ClusterAgent modes in UseFiller test

Updated TestDatadogMetadataValidateUseFiller to test both validateAPIMetadata()
and validateClusterAgentMetadata() code paths. This ensures that the UseFiller
flag is correctly set in both integration modes.

Test cases now cover:
- API mode: 5 test cases (not configured, 0, positive, negative, decimal)
- Cluster Agent mode: 5 test cases (same variations)

Signed-off-by: Hiroki Matsui <fenethtool@gmail.com>

* refactor: use pointer type for FillValue to avoid TriggerMetadata access

Changed FillValue from float64 to *float64 to distinguish between
'not configured' (nil) and 'explicitly set to any value including 0'.

This addresses reviewer feedback about avoiding direct TriggerMetadata
access and improves type safety and refactoring resistance.

Changes:
- FillValue type changed from float64 to *float64 with optional tag
- validateAPIMetadata checks nil instead of TriggerMetadata map
- validateClusterAgentMetadata checks nil instead of TriggerMetadata map
- Dereference FillValue when returning fallback value (2 locations)
- Update tests to handle pointer type with proper nil checks

Signed-off-by: Hiroki Matsui <fenethtool@gmail.com>

---------

Signed-off-by: Hiroki Matsui <fenethtool@gmail.com>
Signed-off-by: Jorge Turrado <jorge.turrado@mail.schwarz>

* Fix ScaledObject pause behavior when HPA doesn't exist (#7233)

When a ScaledObject has the paused annotation set before the HPA is
created, the controller would fall through and create the HPA, ignoring
the pause annotation.

The fix writes the paused status to etcd immediately before stopping
the scale loop or deleting the HPA. This prevents race conditions where
concurrent reconciles triggered by HPA deletion would not see the paused
status and perform redundant operations.

The key insight is to establish the paused state in etcd BEFORE any
operations that trigger new reconciles, ensuring subsequent reconciles
see the paused status and exit early.

This solution follows the approach suggested by @rickbrouwer.

Fixes #7231

Signed-off-by: nusmql <nusmql@gmail.com>
Signed-off-by: Jorge Turrado <jorge.turrado@mail.schwarz>

* fix: use TriggerError when all ScaledJob triggers fail (#7205)

Signed-off-by: Rick Brouwer <rickbrouwer@gmail.com>
Signed-off-by: Jorge Turrado <jorge.turrado@mail.schwarz>

* Fix transfer-hpa-ownership panic when hpa name not provided (#7260)

* chore: renormalize line endings

Signed-off-by: James Williams <jamesleighwilliams@gmail.com>

* fix: nil pointer when transfer-hpa-ownership is true but hpa name not specified (#7254)

Signed-off-by: James Williams <jamesleighwilliams@gmail.com>

* update changelog

Signed-off-by: James Williams <jamesleighwilliams@gmail.com>

* revert vendor changes

Signed-off-by: James Williams <jamesleighwilliams@gmail.com>

---------

Signed-off-by: James Williams <jamesleighwilliams@gmail.com>
Signed-off-by: Jorge Turrado <jorge.turrado@mail.schwarz>

* fix: restore HPA behavior when paused-scale-in/out annotation is deleted (#7291)

When paused-scale-in or paused-scale-out annotation is deleted (not set
to "false") and the corresponding selectPolicy (scaleDown.selectPolicy
or scaleUp.selectPolicy) is not explicitly set in the ScaledObject spec,
the HPA's SelectPolicy remains stuck at "Disabled" instead of being
restored.

This occurs even if other behavior fields like policies or
stabilizationWindowSeconds are defined - only an explicit selectPolicy
value triggers the update.

Root cause: DeepDerivative treats nil as "unset" and considers it a
subset of any value, so DeepDerivative(nil, Disabled) returns true,
preventing the HPA update.

Fix: Add explicit DeepEqual check for Behavior field, following the
existing pattern used for Metrics length check.

test: add e2e test for paused-scale-in annotation removal

Signed-off-by: Dima Shevchuk <dshedimon@gmail.com>
Signed-off-by: Jorge Turrado <jorge.turrado@mail.schwarz>

* refactor: remove unused scaledObjectMetricSpecs variable (#7292)

* refactor: remove unused scaledObjectMetricSpecs variable

Signed-off-by: u-kai <76635578+u-kai@users.noreply.github.com>

* update CHANGELOG.md

Signed-off-by: u-kai <76635578+u-kai@users.noreply.github.com>

---------

Signed-off-by: u-kai <76635578+u-kai@users.noreply.github.com>
Signed-off-by: Jorge Turrado <jorge.turrado@mail.schwarz>

* fix: handle requestScaleLoop error in ScaledObject controller (#7273)

* fix: handle requestScaleLoop error in ScaledObject controller

Signed-off-by: u-kai <76635578+u-kai@users.noreply.github.com>

* chore: update CHANGELOG for PR #7273

Signed-off-by: u-kai <76635578+u-kai@users.noreply.github.com>

---------

Signed-off-by: u-kai <76635578+u-kai@users.noreply.github.com>
Signed-off-by: Jorge Turrado Ferrero <Jorge_turrado@hotmail.es>
Co-authored-by: Jorge Turrado Ferrero <Jorge_turrado@hotmail.es>
Signed-off-by: Jorge Turrado <jorge.turrado@mail.schwarz>

* bump actions and go version (#7295)

* bump actions and go version

Signed-off-by: Jorge Turrado <jorge_turrado@hotmail.es>

* bump deps

Signed-off-by: Jorge Turrado <jorge_turrado@hotmail.es>

* update pkgs

Signed-off-by: Jorge Turrado <jorge_turrado@hotmail.es>

* update tools

Signed-off-by: Jorge Turrado <jorge_turrado@hotmail.es>

* .

Signed-off-by: Jorge Turrado <jorge_turrado@hotmail.es>

* fix test

Signed-off-by: Jorge Turrado <jorge_turrado@hotmail.es>

* fix lint

Signed-off-by: Jorge Turrado <jorge_turrado@hotmail.es>

* update setup-go to use go.mod version

Signed-off-by: Jorge Turrado <jorge_turrado@hotmail.es>

* add nolint to exclude pulsar issues

Signed-off-by: Jorge Turrado <jorge_turrado@hotmail.es>

* fix devenv

Signed-off-by: Jorge Turrado <jorge_turrado@hotmail.es>

* fix codeql

Signed-off-by: Jorge Turrado <jorge_turrado@hotmail.es>

* fix splunk test

Signed-off-by: Jorge Turrado <jorge_turrado@hotmail.es>

* include job in links

Signed-off-by: Jorge Turrado <jorge_turrado@hotmail.es>

* update to ubuntu-slim some runners

Signed-off-by: Jorge Turrado <jorge_turrado@hotmail.es>

* Update apis/keda/v1alpha1/scaledobject_webhook_test.go

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Signed-off-by: Jorge Turrado Ferrero <Jorge_turrado@hotmail.es>

* Update .github/workflows/scorecards.yml

Co-authored-by: Jan Wozniak <wozniak.jan@gmail.com>
Signed-off-by: Jorge Turrado Ferrero <Jorge_turrado@hotmail.es>

---------

Signed-off-by: Jorge Turrado <jorge_turrado@hotmail.es>
Signed-off-by: Jorge Turrado Ferrero <Jorge_turrado@hotmail.es>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Jan Wozniak <wozniak.jan@gmail.com>
Signed-off-by: Jorge Turrado <jorge.turrado@mail.schwarz>

* update changelog

Signed-off-by: Jorge Turrado <jorge.turrado@mail.schwarz>

---------

Signed-off-by: Rick Brouwer <rickbrouwer@gmail.com>
Signed-off-by: Jorge Turrado <jorge.turrado@mail.schwarz>
Signed-off-by: Hiroki Matsui <fenethtool@gmail.com>
Signed-off-by: nusmql <nusmql@gmail.com>
Signed-off-by: James Williams <jamesleighwilliams@gmail.com>
Signed-off-by: Dima Shevchuk <dshedimon@gmail.com>
Signed-off-by: u-kai <76635578+u-kai@users.noreply.github.com>
Signed-off-by: Jorge Turrado Ferrero <Jorge_turrado@hotmail.es>
Signed-off-by: Jorge Turrado <jorge_turrado@hotmail.es>
Co-authored-by: Rick Brouwer <rickbrouwer@gmail.com>
Co-authored-by: Matchan <fenethtool@gmail.com>
Co-authored-by: nusmql <nusmql@gmail.com>
Co-authored-by: James Williams <jamesleighwilliams@gmail.com>
Co-authored-by: Dima Shevchuk <dshedimon@gmail.com>
Co-authored-by: Kai Udo <76635578+u-kai@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Jan Wozniak <wozniak.jan@gmail.com>
alt-dima pushed a commit to alt-dima/keda that referenced this pull request Dec 13, 2025
…#7260)

* chore: renormalize line endings

Signed-off-by: James Williams <jamesleighwilliams@gmail.com>

* fix: nil pointer when transfer-hpa-ownership is true but hpa name not specified (kedacore#7254)

Signed-off-by: James Williams <jamesleighwilliams@gmail.com>

* update changelog

Signed-off-by: James Williams <jamesleighwilliams@gmail.com>

* revert vendor changes

Signed-off-by: James Williams <jamesleighwilliams@gmail.com>

---------

Signed-off-by: James Williams <jamesleighwilliams@gmail.com>
Signed-off-by: Dmitriy Altuhov <altuhovd@gmail.com>
tangobango5 pushed a commit to tangobango5/keda that referenced this pull request Dec 22, 2025
…#7260)

* chore: renormalize line endings

Signed-off-by: James Williams <jamesleighwilliams@gmail.com>

* fix: nil pointer when transfer-hpa-ownership is true but hpa name not specified (kedacore#7254)

Signed-off-by: James Williams <jamesleighwilliams@gmail.com>

* update changelog

Signed-off-by: James Williams <jamesleighwilliams@gmail.com>

* revert vendor changes

Signed-off-by: James Williams <jamesleighwilliams@gmail.com>

---------

Signed-off-by: James Williams <jamesleighwilliams@gmail.com>
tangobango5 pushed a commit to tangobango5/keda that referenced this pull request Feb 13, 2026
…#7260)

* chore: renormalize line endings

Signed-off-by: James Williams <jamesleighwilliams@gmail.com>

* fix: nil pointer when transfer-hpa-ownership is true but hpa name not specified (kedacore#7254)

Signed-off-by: James Williams <jamesleighwilliams@gmail.com>

* update changelog

Signed-off-by: James Williams <jamesleighwilliams@gmail.com>

* revert vendor changes

Signed-off-by: James Williams <jamesleighwilliams@gmail.com>

---------

Signed-off-by: James Williams <jamesleighwilliams@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

ScaledObject Webhook panics when using transfer-hpa-ownership without advanced config

3 participants