diff --git a/CHANGES.md b/CHANGES.md index bf8c6b794..c8d1cc66d 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -19,6 +19,7 @@ Release Notes. * Fix NPE in the nutz plugin. * Provide Apache Commons DBCP 2.x plugin. * Add the plugin for mssql-jtds 1.x plugin. +* Fix the default ignore mechanism isn't accurate enough bug. #### OAP-Backend * Add the `@SuperDataset` annotation for BrowserErrorLog. diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/ContextManagerExtendService.java b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/ContextManagerExtendService.java index 9bbfe7a11..8f0bef058 100644 --- a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/ContextManagerExtendService.java +++ b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/ContextManagerExtendService.java @@ -27,8 +27,13 @@ import org.apache.skywalking.apm.agent.core.remote.GRPCChannelManager; import org.apache.skywalking.apm.agent.core.remote.GRPCChannelStatus; import org.apache.skywalking.apm.agent.core.sampling.SamplingService; +import java.util.Arrays; + @DefaultImplementor public class ContextManagerExtendService implements BootService, GRPCChannelListener { + + private String[] ignoreSuffixArray = new String[0]; + private volatile GRPCChannelStatus status = GRPCChannelStatus.DISCONNECT; @Override @@ -38,7 +43,7 @@ public class ContextManagerExtendService implements BootService, GRPCChannelList @Override public void boot() { - + ignoreSuffixArray = Config.Agent.IGNORE_SUFFIX.split(","); } @Override @@ -61,7 +66,7 @@ public class ContextManagerExtendService implements BootService, GRPCChannelList } int suffixIdx = operationName.lastIndexOf("."); - if (suffixIdx > -1 && Config.Agent.IGNORE_SUFFIX.contains(operationName.substring(suffixIdx))) { + if (suffixIdx > -1 && Arrays.stream(ignoreSuffixArray).anyMatch(a -> a.equals(operationName.substring(suffixIdx)))) { context = new IgnoredTracerContext(); } else { SamplingService samplingService = ServiceManager.INSTANCE.findService(SamplingService.class); diff --git a/apm-sniffer/apm-agent-core/src/test/java/org/apache/skywalking/apm/agent/core/context/ContextManagerExtendServiceTest.java b/apm-sniffer/apm-agent-core/src/test/java/org/apache/skywalking/apm/agent/core/context/ContextManagerExtendServiceTest.java new file mode 100644 index 000000000..295b27a6b --- /dev/null +++ b/apm-sniffer/apm-agent-core/src/test/java/org/apache/skywalking/apm/agent/core/context/ContextManagerExtendServiceTest.java @@ -0,0 +1,59 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.apache.skywalking.apm.agent.core.context; + +import org.apache.skywalking.apm.agent.core.boot.ServiceManager; +import org.apache.skywalking.apm.agent.core.conf.Config; +import org.apache.skywalking.apm.agent.core.test.tools.AgentServiceRule; +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.Rule; +import org.junit.Test; +import org.junit.Assert; + +public class ContextManagerExtendServiceTest { + + @Rule + public AgentServiceRule serviceRule = new AgentServiceRule(); + + @BeforeClass + public static void beforeClass() { + Config.Agent.KEEP_TRACING = true; + } + + @AfterClass + public static void afterClass() { + Config.Agent.KEEP_TRACING = false; + ServiceManager.INSTANCE.shutdown(); + } + + @Test + public void testRequestUrlCreateTraceContext() { + ContextManagerExtendService extendService = ServiceManager.INSTANCE.findService(ContextManagerExtendService.class); + + AbstractTracerContext tracerContext = extendService.createTraceContext("/app/demo/index.html", false); + String traceId = tracerContext.getReadablePrimaryTraceId(); + Assert.assertEquals("Ignored_Trace", traceId); + + tracerContext = extendService.createTraceContext("/app/demo/index.htm", false); + traceId = tracerContext.getReadablePrimaryTraceId(); + Assert.assertNotEquals("Ignored_Trace", traceId); + } + +}