From 0113676b804bd7351675ec159651f1380f3e5ed2 Mon Sep 17 00:00:00 2001 From: avinash Date: Thu, 18 Nov 2021 17:14:25 +0530 Subject: [PATCH] Fixed the span drop criteria parsing logic - Splitting tag key/value match condition based on the first colon --- .../spannormalizer/jaeger/SpanFilter.java | 6 +-- .../jaeger/JaegerSpanPreProcessorTest.java | 49 +++++++++++++++---- 2 files changed, 41 insertions(+), 14 deletions(-) diff --git a/span-normalizer/span-normalizer/src/main/java/org/hypertrace/core/spannormalizer/jaeger/SpanFilter.java b/span-normalizer/span-normalizer/src/main/java/org/hypertrace/core/spannormalizer/jaeger/SpanFilter.java index b5511b44f..0a04aadec 100644 --- a/span-normalizer/span-normalizer/src/main/java/org/hypertrace/core/spannormalizer/jaeger/SpanFilter.java +++ b/span-normalizer/span-normalizer/src/main/java/org/hypertrace/core/spannormalizer/jaeger/SpanFilter.java @@ -115,10 +115,8 @@ public boolean shouldDropSpan( @Nullable private Pair convertToPair(String s) { if (s != null && s.contains(COLON)) { - String[] parts = s.split(COLON); - if (parts.length == 2) { - return Pair.of(parts[0], parts[1]); - } + int colonIndex = s.indexOf(COLON); + return Pair.of(s.substring(0, colonIndex), s.substring(colonIndex + 1)); } return null; } diff --git a/span-normalizer/span-normalizer/src/test/java/org/hypertrace/core/spannormalizer/jaeger/JaegerSpanPreProcessorTest.java b/span-normalizer/span-normalizer/src/test/java/org/hypertrace/core/spannormalizer/jaeger/JaegerSpanPreProcessorTest.java index ce3657b8d..f7d471236 100644 --- a/span-normalizer/span-normalizer/src/test/java/org/hypertrace/core/spannormalizer/jaeger/JaegerSpanPreProcessorTest.java +++ b/span-normalizer/span-normalizer/src/test/java/org/hypertrace/core/spannormalizer/jaeger/JaegerSpanPreProcessorTest.java @@ -153,20 +153,49 @@ public void testDropSpanWithMultipleCriterion() { "tenantIdTagKey", "tenant-key", "spanDropCriterion", - List.of("foo:bar,k1:v1", "k2:v2")))); + List.of("foo:bar,k1:v1", "k2:v2", "http.url:https://foo.bar")))); JaegerSpanPreProcessor jaegerSpanPreProcessor = new JaegerSpanPreProcessor(ConfigFactory.parseMap(configs)); Process process = Process.newBuilder().setServiceName("testService").build(); - Span span = - Span.newBuilder() - .setProcess(process) - .addTags(KeyValue.newBuilder().setKey("tenant-key").setVStr(tenantId).build()) - .addTags(KeyValue.newBuilder().setKey("foo").setVStr("bar").build()) - .addTags(KeyValue.newBuilder().setKey("k2").setVStr("v2").build()) - .build(); - PreProcessedSpan preProcessedSpan = jaegerSpanPreProcessor.preProcessSpan(span); - Assertions.assertNull(preProcessedSpan); + { + Span span = + Span.newBuilder() + .setProcess(process) + .addTags(KeyValue.newBuilder().setKey("tenant-key").setVStr(tenantId).build()) + .addTags(KeyValue.newBuilder().setKey("foo").setVStr("bar").build()) + .addTags(KeyValue.newBuilder().setKey("k2").setVStr("v2").build()) + .build(); + PreProcessedSpan preProcessedSpan = jaegerSpanPreProcessor.preProcessSpan(span); + // Span dropped due to matching condition: k2:v2 + Assertions.assertNull(preProcessedSpan); + } + + { + Span span = + Span.newBuilder() + .setProcess(process) + .addTags(KeyValue.newBuilder().setKey("tenant-key").setVStr(tenantId).build()) + .addTags(KeyValue.newBuilder().setKey("foo").setVStr("bar").build()) + .addTags(KeyValue.newBuilder().setKey("http.url").setVStr("https://foo.bar").build()) + .build(); + PreProcessedSpan preProcessedSpan = jaegerSpanPreProcessor.preProcessSpan(span); + // Span dropped due to matching condition: http.url:https://foo.bar + Assertions.assertNull(preProcessedSpan); + } + + { + Span span = + Span.newBuilder() + .setProcess(process) + .addTags(KeyValue.newBuilder().setKey("tenant-key").setVStr(tenantId).build()) + .addTags(KeyValue.newBuilder().setKey("foo").setVStr("bar").build()) + .addTags(KeyValue.newBuilder().setKey("http.url").setVStr("https://valid").build()) + .build(); + PreProcessedSpan preProcessedSpan = jaegerSpanPreProcessor.preProcessSpan(span); + // Span not dropped since there is no matching condition + Assertions.assertNotNull(preProcessedSpan); + } } @Test