fix: Support provisioned concurrency in cold start detection#2123
Closed
dcabib wants to merge 4 commits intoaws-powertools:mainfrom
Closed
fix: Support provisioned concurrency in cold start detection#2123dcabib wants to merge 4 commits intoaws-powertools:mainfrom
dcabib wants to merge 4 commits intoaws-powertools:mainfrom
Conversation
…alization - Add CRaC dependency and generate-classesloaded-file profile to both modules - Implement Resource interface in TracingUtils and JsonConfig classes - Add classesloaded.txt files for automatic class preloading - Add comprehensive CRaC tests for both modules - Update documentation with SnapStart priming guidance - Update spotbugs-exclude.xml for beforeCheckpoint methods Addresses issues aws-powertools#2004 and aws-powertools#2003
- Add TracingUtils.prime() method with no side-effects for public API - Move ClassPreLoader.preloadClasses() to top of beforeCheckpoint methods - Remove unnecessary exception catching in CRaC hooks - Update JsonConfig to use direct imports instead of reflection for AWS Lambda events - Fix CRaC tests to not use reflection for accessing private fields - Update documentation examples to use TracingUtils.prime() - Consolidate SpotBugs exclusions into single Or structure All CRaC tests passing (4 tests, 0 failures)
- Add CRaC dependency and generate-classesloaded-file profile to powertools-tracing - Implement Resource interface in TracingUtils class with CRaC hooks - Add classesloaded.txt file for automatic class preloading - Add TracingUtils.prime() method for public API with no side-effects - Add comprehensive CRaC tests for tracing module - Update documentation with SnapStart priming guidance - Update spotbugs-exclude.xml for beforeCheckpoint method Addresses issue aws-powertools#2004
- Add AWS_LAMBDA_INITIALIZATION_TYPE environment variable check - Prevent false cold start reporting when using provisioned concurrency - Fixes issue aws-powertools#2113 across Logging, Metrics, and Tracing utilities Before: cold_start: true (incorrect with provisioned concurrency) After: cold_start: false (correct with provisioned concurrency)
|
Author
|
Closing this PR as it contained unintended CRAC-related changes. Created clean PR #2124 with only the provisioned concurrency fix. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.



Summary
Fixes #2113 - Provisioned concurrency not considered in Logging and Metrics
Problem
When Lambda functions use Provisioned Concurrency, AWS sets
AWS_LAMBDA_INITIALIZATION_TYPE=provisioned-concurrencyto indicate pre-warmed environments. However, Powertools incorrectly reported these as cold starts across all utilities:cold_start: truein JSON logsColdStartmetric with value 1ColdStart: trueannotation in X-Ray segmentsSolution
Updated the centralized cold start detection logic in
LambdaHandlerProcessor.isColdStart()to check for theAWS_LAMBDA_INITIALIZATION_TYPEenvironment variable.Changes
isColdStart()method to detect provisioned concurrencyEvidence
Before Fix (Bug):
{"level":"INFO","message":"Handler Event","cold_start":true,"service":"triage"}ColdStart metric emitted:
"ColdStart":1.0After Fix (Resolved):
{"level":"INFO","message":"Handler Event","cold_start":false,"service":"triage"}No ColdStart metric emitted
Testing
Impact