Release Notes.
- Fix the
spring-cloud-gateway-4.xplugin propagating another request's context. Since Spring Cloud Gateway 4.1.2 the outbound chain is assembled inNettyRoutingFilter#filterbut subscribed later, so the plugin parked the request'sContextSnapshoton theHttpClientreturned byNettyRoutingFilter#getHttpClient, which is the single shared bean unless a connect timeout is configured. A concurrent request could overwrite it before the chain was subscribed, and the outboundsw8header then carried a context the downstream service joined by mistake. The snapshot is held by a client derived per request now (apache/skywalking#14095). - Fix the
httpclient-5.x-pluginasync client tracing (apache/skywalking#14097):FutureCallbackno longer stops a span. WithHttpAsyncClients.classic(...)the callback runs on the caller thread, where it used to close the caller's own active span.- The HTTP exit span is now created in the caller's context when the request is sent, detached right away, and finished by reference when the response ends. Nothing is left on the I/O reactor thread's span stack any more, so overlapping requests on one reactor thread no longer nest into or close each other's spans.
- The
httpasyncclient/localspan and its cross-thread segment are removed. The HTTP exit span now lives in the caller's own segment. - HttpClient 5.4+ async requests are traced now. Previously the plugin produced no spans for them, because
doExecutereceived anullHttpContextand the request was not yet in the context whenIOSessionImpl#pollran. - A response that fails after its head, while the body is read or when the consumer builds the result at EOF, now ends the span as an error with the exception logged, instead of as a success or an error without a cause.
- The destination is taken from the explicit target or the request authority, as the client routes it, so
routable names that
java.net.URIdoes not parse as a host (e.g.service_name) are traced and propagated. - The
urltag keeps the path encoded as it was sent (e.g.%2Fstays%2F). - The
httpclient-5.x-scenarionow tests one version per minor, 5.0 to 5.6.
- Fix the
NullPointerExceptionthrown by thespring-webflux-5.x-webclientandspring-webflux-6.x-webclientplugins whenDefaultClientRequestBuilder$BodyInserterRequest#writeToruns before any exit span exists. Connectors such asJdkClientHttpConnectorcallwriteToeagerly at assembly time, while the exchange interceptor creates the exit span and itsContextCarrieronly at subscription, so the interception failed and thesw8header was not propagated. The carrier injection is now null-guarded and, if the carrier is still absent, retried when the returnedMonois subscribed (apache/skywalking#13589). - Fix the
spring-ai-1.x-pluginChatModelStreamInterceptorleaking its async span whenChatModel#stream(Prompt)fails synchronously, which silently dropped the wholeTraceSegmentof the request (apache/skywalking#14098). - Fix
jedis-4.x-plugin'sAbstractConnectionInterceptordouble-stopping the span stack on any Redis-level exception (or a null dynamic field on a pooled/recycledConnection), which corrupted the parent trace for the rest of the request (apache/skywalking#14085). - Add Spring LDAP 3.3.x-4.x plugin.
- Exclude macOS metadata files from source and binary release archives (apache/skywalking#14080).
- Fix
NoSuchMethodError: org.apache.skywalking.apm.plugin.spring.webflux.v6.DispatcherHandlerHandleMethodInterceptoron Spring Framework 7 (Spring Boot 4).HttpHeadersno longer implementsMultiValueMap, soList get(Object)was removed; the entry span was never created and the service produced no traces. Affectsspring-webflux-6.xand, through its shaded copy,spring-cloud-gateway-4.x(apache/skywalking#14047). - Extend
spring-webflux-6.x,spring-webflux-6.x-webclient,springmvc-annotation-6.x,spring-resttemplate-6.xandspring-cloud-gateway-4.xplugins to support Spring Framework 7, Spring Boot 4 and Spring Cloud Gateway 5.x. - Add Spring version witnesses to the
spring-webflux-5.xandspring-webflux-6.xplugins, so they no longer both matchDispatcherHandler#handleon Reactor 3.4 (Spring Boot 2.4-2.7). - Breaking: rename
apm-toolkit-webfluxtoapm-toolkit-webflux-5.xand move its package toorg.apache.skywalking.apm.toolkit.webflux.v5; addapm-toolkit-webflux-6.x(org.apache.skywalking.apm.toolkit.webflux.v6) for Reactor 3.5+ / Spring Boot 3.x and 4.x, whereWebFluxSkyWalkingOperators#continueTracingpreviously threwNoSuchMethodErrorbecause Reactor removedSignal#getContext()in 3.5.0. Existingapm-toolkit-webfluxjars (9.7.0 and earlier) remain instrumented by the agent, so upgrading the agent alone does not force a change. - Fix the Log4j2 plugin descriptor (
Log4j2Plugins.dat) missing from theapm-toolkit-log4j-2.xjar since 9.5.0, which broke%traceIdand%sw_ctxresolution in Log4j2PatternLayout(apache/skywalking#14006). - Deploy the root
java-agentPOM to Maven Central again. It is the parent ofapm-application-toolkitand therefore of every published toolkit artifact, but 9.7.0 skipped it, so resolving anyorg.apache.skywalking:apm-toolkit-*:9.7.0failed withNon-resolvable parent POM ... Could not find artifact org.apache.skywalking:java-agent:pom:9.7.0(apache/skywalking#13988). - Stop reporting datasource timeout configuration as metrics. The c3p0
maxIdleTime, DBCPmaxWaitMillisand HikariCPconnectionTimeout,validationTimeout,idleTimeoutandleakDetectionThresholdgauges are no longer reported. - Support logback 1.6.x in
apm-toolkit-logback-1.x(apache/skywalking#14120).TraceIdPatternLogbackLayoutandTraceIdMDCPatternLogbackLayoutfailed withNoSuchFieldError: defaultConverterMap, because logback 1.6.0 removedPatternLayout.defaultConverterMap. The layouts now register their conversion words in the logging context's conversion rule registry when they start, which logback 1.2.x to 1.6.x all read, so the same toolkit artifact keeps working on older logback. Logback 1.5.13 is not supported because of an upstream regression fixed in 1.5.14 (qos-ch/logback#885). The words are no longer registered for the whole JVM, so using%tidor%sw_ctxin other encoders, such as a plain<encoder><pattern>, requires declaring them as<conversionRule>s.
All issues and pull requests are here
Find change logs of all versions here.