Skip to content

Commit

Permalink
Minor refactor based on commits
Browse files Browse the repository at this point in the history
  • Loading branch information
devagarwal1803 committed Sep 21, 2023
1 parent 3fba81b commit ae6783c
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 17 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@

import io.opentelemetry.api.common.AttributeKey;
import io.opentelemetry.api.common.Attributes;
import io.opentelemetry.api.trace.Span;
import io.opentelemetry.api.trace.SpanContext;
import io.opentelemetry.api.trace.SpanKind;
import io.opentelemetry.context.Context;
import io.opentelemetry.sdk.trace.data.LinkData;
Expand Down Expand Up @@ -63,12 +65,12 @@ Sampler getSampler(Attributes attributes) {

final String action = attributes.get(AttributeKey.stringKey(TRANSPORT_ACTION));
if (action != null && telemetrySettings.isActionSamplingOverrideSet(action)) {
if (actionSamplerNeedsUpdate(action)) {
if (isActionSamplerUpdateRequired(action)) {
synchronized (this) {
updateActionSampler(action);
}
return actionBasedSampler.get(action);
}
return actionBasedSampler.get(action);
}

return defaultSampler;
Expand All @@ -78,7 +80,7 @@ private boolean isSamplingRatioChanged(double newSamplingRatio) {
return Double.compare(this.samplingRatio, newSamplingRatio) != 0;
}

private boolean actionSamplerNeedsUpdate(String action) {
private boolean isActionSamplerUpdateRequired(String action) {
return (!actionBasedSampler.containsKey(action)
|| actionBasedSamplingProbability.get(action) != telemetrySettings.getActionSamplingProbability(action));
}
Expand Down Expand Up @@ -109,7 +111,12 @@ public SamplingResult shouldSample(
Attributes attributes,
List<LinkData> parentLinks
) {
return getSampler(attributes).shouldSample(parentContext, traceId, name, spanKind, attributes, parentLinks);
// Use action sampler only if it is root span & override is present for the action
SpanContext parentSpanContext = Span.fromContext(parentContext).getSpanContext();
if (!parentSpanContext.isValid()) {
return getSampler(attributes).shouldSample(parentContext, traceId, name, spanKind, attributes, parentLinks);
}
return defaultSampler.shouldSample(parentContext, traceId, name, spanKind, attributes, parentLinks);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -82,27 +82,30 @@ public void testGetSamplerWithCustomActionSamplingRatio() {

Map<String, Double> filters = new HashMap<>();
// Setting 100% sampling for indexing request
filters.put("indexing", 1.00);
filters.put("internal:cluster/coordination/join", 1.00);
// Setting 50% sampling rate for query request
filters.put("query", 0.5);
filters.put("cluster:monitor/nodes/stats[n]", 0.5);
telemetrySettings.setActionSamplingProbability(filters);

attributes.put(AttributeKey.stringKey("action"), "indexing");
attributes.put(AttributeKey.stringKey("action"), "internal:cluster/coordination/join");
probabilisticSampler.getSampler(attributes);

// Validates sampling probability for general request.
// Validates sampling probability for dummy request.
assertEquals(0.02, probabilisticSampler.getActionSamplingRatio("dummy"), 0.0d);
// Validates sampling probability for indexing request as override is present for it.
assertEquals(1.00, probabilisticSampler.getActionSamplingRatio("indexing"), 0.0d);
// Validates sampling probability for query request as override is present for it.
assertEquals(0.02, probabilisticSampler.getActionSamplingRatio("query"), 0.0d);

filters.put("indexing", 0.30);
// Validates sampling probability for cluster coordination request as override is present for it.
assertEquals(1.00, probabilisticSampler.getActionSamplingRatio("internal:cluster/coordination/join"), 0.0d);
// Validates sampling probability for nodes stats request as override is present for it.
assertEquals(0.02, probabilisticSampler.getActionSamplingRatio("cluster:monitor/nodes/stats[n]"), 0.0d);
// Validates sampling probability for nodes stats second request.
assertEquals(0.30, probabilisticSampler.getActionSamplingRatio("cluster:monitor/nodes/stats[n]"), 0.0d);

filters.put("internal:cluster/coordination/join", 0.30);
telemetrySettings.setActionSamplingProbability(filters);
// Need to call getSampler() to update the value of tracerHeadSamplerSamplingRatio
probabilisticSampler.getSampler(attributes);
// Validates sampling probability for indexing request as override is present for it.
assertEquals(0.30, probabilisticSampler.getActionSamplingRatio("indexing"), 0.0d);

// Validates sampling probability for cluster coordination as override is present for it.
assertEquals(0.30, probabilisticSampler.getActionSamplingRatio("internal:cluster/coordination/join"), 0.0d);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ public class TelemetrySettings {
* Probability of action based sampler
*/
public static final Setting.AffixSetting<Double> TRACER_SAMPLER_ACTION_PROBABILITY = Setting.affixKeySetting(
"telemetry.tracer.sampler.",
"telemetry.tracer.action.sampler.",
"probability",
(ns, key) -> Setting.doubleSetting(key, 0.00d, 0.00d, 1.00d, Setting.Property.Dynamic, Setting.Property.NodeScope)
);
Expand Down

0 comments on commit ae6783c

Please sign in to comment.