Repository navigation
fix(idempotency): warn when a persistence layer is reused with a different config - #8664
Conversation
|
Hi @soujasK, I saw you closed this one. No problem, I just want to understand what you'd prefer. The bug is real and triaged for 3.40.0, and I already worked on it on my side. Do you want to reopen so I review your PR, or should I open a new one myself? Either way is fine, just let me know. |
|
Reopening this. I closed it by mistake. I need a bit more time to test and validate it properly, so I'll update here once that's done. |
leandrodamascena
left a comment
There was a problem hiding this comment.
Thanks @soujasK, and sorry this sat for two weeks, 3.40.0 shipped without it. I reviewed it today on top of develop and it's exactly option 1 from the issue: compare the applied settings, warn on a different config, first one still wins. Goes out in 3.41.0 instead, no need to rebase, you'll be in the release notes.
|
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## develop #8664 +/- ##
========================================
Coverage 97.17% 97.17%
========================================
Files 323 323
Lines 16606 16612 +6
Branches 1504 1505 +1
========================================
+ Hits 16137 16143 +6
Misses 328 328
Partials 141 141 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
|
Yeah happy to contribute and thanks for the mention in release notes.if anything you can ping me. |



Issue number: closes #8659
Summary
Changes
As agreed in #8659 (option 1):
BasePersistenceLayer.configure()only applies the config on its first call, so functions sharing a persistence layer instance silently use the first function'sIdempotencyConfig. It now remembers the settings it applied and emits aPowertoolsUserWarningwhen it's configured again with a config whose settings differ, pointing to one persistence layer per config.event_key_jmespath,payload_validation_jmespath,jmespath_options,raise_on_no_idempotency_key,expires_after_seconds,use_local_cache,local_cache_max_items,hash_function), not on object identity, so@idempotentwithout aconfig(which creates a newIdempotencyConfig()per invocation) doesn't warn.lambda_contextandresponse_hookaren't part of it since they're read per call.IdempotencyConfigoptions table.Tests: one for the differing-config case (warns, first config's settings kept; fails without the change) and one checking that a new config with the same settings doesn't warn.
tests/unit,tests/functional/idempotencyandtests/functional/batchpass on Linux (Python 3.12), plus ruff, mypy, ty, bandit and xenon. The existing idempotency tests also pass with this warning turned into an error, so none of them reconfigure a layer with a different config.User experience
Before: two idempotent functions sharing a persistence layer with different configs silently use the first function's settings, and can return another request's stored response.
After: the same setup emits a
PowertoolsUserWarningtelling you to use a separate persistence layer instance for eachIdempotencyConfig.By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.