[Adaptive Sampling] Capture all spans in anomaly traces + more #1165
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.
Request
Changes
Main changes
anomalyTracesSetwithtraceUsageCache: This cache represents the last operation that was done on a given trace within the last 10 minutes relating to adaptive sampling features. It is implemented using Caffeine, a high-performance cache with built-in entry expiration features. This allows traces to drop out of the cache automatically after time passes while also maintaining a maximum cache size like a HashMaptraceID->NEITHERto signify the trace has been seen but no anomaly hastraceID->SAMPLING_BOOSTto signify the trace has been counted towards anomaly statisticsMisc other changes
!adaptiveSamplingRuleExiststo!adaptiveSamplingRuleExists && this.adaptiveSamplingConfig == nullto ensure local configuration alone can still function without server side logic for anomaly capturingerrortoanomalyandspantotracewhere necessaryAwsXrayAdaptiveSampling.UsageTypeto quickly tell whether a usage is for boost or for anomaly trace capturingTesting
Example of relevant test cases explored during testing:
sampling-boostcondition on^500$error code RegEx andanomaly-trace-captureon^501$B calls C 5 times and receives the following responses:
a. 500
b. 501
c. 500
d. 200
e. 200
Results:
[SamplingBoostStatisticsDocument{ruleName=RuleA, serviceName=ServiceB, timestamp=Wed Aug 27 21:14:21 UTC 2025, anomalyCount=1, totalCount=1, sampledAnomalyCount=0}][SamplingBoostStatisticsDocument{ruleName=RuleA, serviceName=ServiceC, timestamp=Wed Aug 27 21:23:00 UTC 2025, anomalyCount=1, totalCount=1, sampledAnomalyCount=0}]By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.