@@ -911,7 +911,7 @@ index 1ef8abf5..328e63dd 100644
911911 }
912912 }
913913diff --git a/aws-xray/src/main/java/io/opentelemetry/contrib/awsxray/XrayRulesSampler.java b/aws-xray/src/main/java/io/opentelemetry/contrib/awsxray/XrayRulesSampler.java
914- index 75977dc0..cb4a09b9 100644
914+ index 75977dc0..406941ba 100644
915915--- a/aws-xray/src/main/java/io/opentelemetry/contrib/awsxray/XrayRulesSampler.java
916916+++ b/aws-xray/src/main/java/io/opentelemetry/contrib/awsxray/XrayRulesSampler.java
917917@@ -5,42 +5,79 @@
@@ -995,7 +995,7 @@ index 75977dc0..cb4a09b9 100644
995995 this(
996996 clientId,
997997 resource,
998- @@ -49,8 +86,17 @@ final class XrayRulesSampler implements Sampler {
998+ @@ -49,8 +86,22 @@ final class XrayRulesSampler implements Sampler {
999999 rules.stream()
10001000 // Lower priority value takes precedence so normal ascending sort.
10011001 .sorted(Comparator.comparingInt(GetSamplingRulesResponse.SamplingRule::getPriority))
@@ -1011,19 +1011,25 @@ index 75977dc0..cb4a09b9 100644
10111011+ .toArray(SamplingRuleApplier[]::new),
10121012+ createRuleHashMaps(rules),
10131013+ rules.stream().anyMatch(r -> r.getSamplingRateBoost() != null),
1014- + adaptiveSamplingConfig);
1014+ + adaptiveSamplingConfig,
1015+ + Caffeine.newBuilder()
1016+ + .maximumSize(100_000)
1017+ + .ticker(clock::nanoTime)
1018+ + .expireAfterWrite(Duration.ofMinutes(10))
1019+ + .build());
10151020 }
10161021
10171022 private XrayRulesSampler(
1018- @@ -58,12 +104,40 @@ final class XrayRulesSampler implements Sampler {
1023+ @@ -58,12 +109,36 @@ final class XrayRulesSampler implements Sampler {
10191024 Resource resource,
10201025 Clock clock,
10211026 Sampler fallbackSampler,
10221027- SamplingRuleApplier[] ruleAppliers) {
10231028+ SamplingRuleApplier[] ruleAppliers,
10241029+ Map<String, String> ruleToHashMap,
10251030+ boolean adaptiveSamplingRuleExists,
1026- + @Nullable AwsXrayAdaptiveSamplingConfig adaptiveSamplingConfig) {
1031+ + @Nullable AwsXrayAdaptiveSamplingConfig adaptiveSamplingConfig,
1032+ + Cache<String, AwsXrayAdaptiveSamplingConfig.UsageType> traceUsageCache) {
10271033 this.clientId = clientId;
10281034 this.resource = resource;
10291035 this.clock = clock;
@@ -1036,12 +1042,7 @@ index 75977dc0..cb4a09b9 100644
10361042+ }
10371043+ this.adaptiveSamplingRuleExists = adaptiveSamplingRuleExists;
10381044+ this.adaptiveSamplingConfig = adaptiveSamplingConfig;
1039- + this.traceUsageCache =
1040- + Caffeine.newBuilder()
1041- + .maximumSize(100_000)
1042- + .ticker(clock::nanoTime)
1043- + .expireAfterWrite(Duration.ofMinutes(10))
1044- + .build();
1045+ + this.traceUsageCache = traceUsageCache;
10451046+
10461047+ // Initialize anomaly capture rate limiter
10471048+ if (this.adaptiveSamplingConfig != null
@@ -1057,7 +1058,7 @@ index 75977dc0..cb4a09b9 100644
10571058 }
10581059
10591060 @Override
1060- @@ -74,10 +148 ,36 @@ final class XrayRulesSampler implements Sampler {
1061+ @@ -74,10 +149 ,36 @@ final class XrayRulesSampler implements Sampler {
10611062 SpanKind spanKind,
10621063 Attributes attributes,
10631064 List<LinkData> parentLinks) {
@@ -1096,7 +1097,7 @@ index 75977dc0..cb4a09b9 100644
10961097 }
10971098 }
10981099
1099- @@ -96,7 +196 ,185 @@ final class XrayRulesSampler implements Sampler {
1100+ @@ -96,7 +197 ,185 @@ final class XrayRulesSampler implements Sampler {
11001101 return "XrayRulesSampler{" + Arrays.toString(ruleAppliers) + "}";
11011102 }
11021103
@@ -1283,7 +1284,7 @@ index 75977dc0..cb4a09b9 100644
12831284 return Arrays.stream(ruleAppliers)
12841285 .map(rule -> rule.snapshot(now))
12851286 .filter(Objects::nonNull)
1286- @@ -115,15 +393 ,16 @@ final class XrayRulesSampler implements Sampler {
1287+ @@ -115,15 +394 ,16 @@ final class XrayRulesSampler implements Sampler {
12871288 Map<String, SamplingTargetDocument> ruleTargets,
12881289 Set<String> requestedTargetRuleNames,
12891290 Date now) {
@@ -1302,7 +1303,7 @@ index 75977dc0..cb4a09b9 100644
13021303 }
13031304 if (requestedTargetRuleNames.contains(rule.getRuleName())) {
13041305 // In practice X-Ray should return a target for any rule we requested but
1305- @@ -135,6 +414,91 @@ final class XrayRulesSampler implements Sampler {
1306+ @@ -135,6 +415,92 @@ final class XrayRulesSampler implements Sampler {
13061307 return rule;
13071308 })
13081309 .toArray(SamplingRuleApplier[]::new);
@@ -1315,7 +1316,8 @@ index 75977dc0..cb4a09b9 100644
13151316+ newAppliers,
13161317+ ruleToHashMap,
13171318+ adaptiveSamplingRuleExists,
1318- + adaptiveSamplingConfig);
1319+ + adaptiveSamplingConfig,
1320+ + traceUsageCache);
13191321+ }
13201322+
13211323+ static boolean isKeyPresent(SpanData span, AttributeKey<?> key) {
0 commit comments