6
6
import datadog .trace .api .sampling .SamplingMechanism ;
7
7
import datadog .trace .common .writer .RemoteResponseListener ;
8
8
import datadog .trace .core .CoreSpan ;
9
- import java .util .HashMap ;
9
+ import java .util .Collections ;
10
10
import java .util .Map ;
11
+ import java .util .TreeMap ;
11
12
import java .util .function .Function ;
12
13
import org .slf4j .Logger ;
13
14
import org .slf4j .LoggerFactory ;
@@ -71,8 +72,8 @@ public void onResponse(
71
72
}
72
73
73
74
log .debug ("Update service sampler rates: {} -> {}" , endpoint , responseJson );
74
- final Map <String , Map <String , RateSampler >> updatedEnvServiceRates =
75
- new HashMap <>(newServiceRates . size () * 2 );
75
+ final TreeMap <String , TreeMap <String , RateSampler >> updatedEnvServiceRates =
76
+ new TreeMap <>(String :: compareToIgnoreCase );
76
77
77
78
RateSampler fallbackSampler = RateSamplersByEnvAndService .DEFAULT_SAMPLER ;
78
79
for (final Map .Entry <String , Number > entry : newServiceRates .entrySet ()) {
@@ -87,7 +88,7 @@ public void onResponse(
87
88
} else {
88
89
Map <String , RateSampler > serviceRates =
89
90
updatedEnvServiceRates .computeIfAbsent (
90
- envAndService .lowerEnv , env -> new HashMap <>(newServiceRates . size () * 2 ));
91
+ envAndService .lowerEnv , env -> new TreeMap <>(String :: compareToIgnoreCase ));
91
92
92
93
serviceRates .computeIfAbsent (
93
94
envAndService .lowerService ,
@@ -114,38 +115,34 @@ private static RateSampler createRateSampler(final double sampleRate) {
114
115
private static final class RateSamplersByEnvAndService {
115
116
private static final RateSampler DEFAULT_SAMPLER = createRateSampler (DEFAULT_RATE );
116
117
117
- private final Map <String , Map <String , RateSampler >> envServiceRates ;
118
+ private final Map <String , TreeMap <String , RateSampler >> envServiceRates ;
118
119
private final RateSampler fallbackSampler ;
119
120
120
121
RateSamplersByEnvAndService () {
121
- this (new HashMap <>( 0 ), DEFAULT_SAMPLER );
122
+ this (Collections . emptyMap ( ), DEFAULT_SAMPLER );
122
123
}
123
124
124
125
RateSamplersByEnvAndService (
125
- Map <String , Map <String , RateSampler >> envServiceRates , RateSampler fallbackSampler ) {
126
+ Map <String , TreeMap <String , RateSampler >> envServiceRates , RateSampler fallbackSampler ) {
126
127
this .envServiceRates = envServiceRates ;
127
128
this .fallbackSampler = fallbackSampler ;
128
129
}
129
130
130
131
// used in tests only
131
132
RateSampler getSampler (EnvAndService envAndService ) {
132
- return getSamplerImpl (envAndService .lowerEnv , envAndService .lowerService );
133
+ return getSampler (envAndService .lowerEnv , envAndService .lowerService );
133
134
}
134
135
135
136
public RateSampler getSampler (String env , String service ) {
136
- return getSamplerImpl (env .toLowerCase (), service .toLowerCase ());
137
- }
138
-
139
- private RateSampler getSamplerImpl (String lowerEnv , String lowerService ) {
140
- if (EnvAndService .isFallback (lowerEnv , lowerService )) {
137
+ if (EnvAndService .isFallback (env , service )) {
141
138
return fallbackSampler ;
142
139
}
143
140
144
- Map <String , RateSampler > serviceRates = envServiceRates .get (lowerEnv );
141
+ Map <String , RateSampler > serviceRates = envServiceRates .get (env );
145
142
if (serviceRates == null ) {
146
143
return fallbackSampler ;
147
144
}
148
- RateSampler sampler = serviceRates .get (lowerService );
145
+ RateSampler sampler = serviceRates .get (service );
149
146
return null == sampler ? fallbackSampler : sampler ;
150
147
}
151
148
}
0 commit comments