Skip to content

Commit 4a62aff

Browse files
authored
Update changelog for upcoming release (#18105)
1 parent e2190ed commit 4a62aff

5 files changed

Lines changed: 240 additions & 34 deletions

File tree

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
#!/bin/bash -e
2+
3+
# Updates CHANGELOG.md in place for a release by replacing the `## Unreleased`
4+
# heading with a new `## Version X.Y.Z (YYYY-MM-DD)` section followed by the
5+
# standard preamble (SDK version and `-alpha` notice).
6+
#
7+
# Usage:
8+
# update-changelog-for-release.sh <version> <date> [--keep-unreleased-section]
9+
#
10+
# With --keep-unreleased-section, the `## Unreleased` heading is preserved above
11+
# the new version section (used when updating CHANGELOG.md on `main` after
12+
# cutting a release branch).
13+
14+
if [[ $# -lt 2 || $# -gt 3 ]]; then
15+
echo "usage: $0 <version> <date> [--keep-unreleased-section]" >&2
16+
exit 1
17+
fi
18+
19+
version=$1
20+
date=$2
21+
keep_unreleased_section=false
22+
if [[ $# -eq 3 ]]; then
23+
if [[ $3 != "--keep-unreleased-section" ]]; then
24+
echo "unexpected argument: $3" >&2
25+
exit 1
26+
fi
27+
keep_unreleased_section=true
28+
fi
29+
30+
sdk_version=$(sed -En 's/^val otelSdkVersion = "([0-9]+\.[0-9]+\.[0-9]+)".*/\1/p' dependencyManagement/build.gradle.kts)
31+
if [[ -z $sdk_version ]]; then
32+
echo "could not determine otelSdkVersion from dependencyManagement/build.gradle.kts" >&2
33+
exit 1
34+
fi
35+
36+
preamble=$(cat << EOF
37+
This release targets the OpenTelemetry SDK $sdk_version.
38+
39+
Note that many artifacts have the \`-alpha\` suffix attached to their version
40+
number, reflecting that they will continue to have breaking changes. Please see
41+
[VERSIONING.md](https://github.com/open-telemetry/opentelemetry-java-instrumentation/blob/main/VERSIONING.md#opentelemetry-java-instrumentation-versioning)
42+
for more details.
43+
EOF
44+
)
45+
46+
# Escape newlines as the literal two-character sequence \n so the text can be
47+
# interpolated into the replacement side of a `sed -E` command.
48+
preamble_escaped=${preamble//$'\n'/\\n}
49+
50+
if [[ $keep_unreleased_section == true ]]; then
51+
replacement="## Unreleased\n\n## Version $version ($date)\n\n$preamble_escaped"
52+
else
53+
replacement="## Version $version ($date)\n\n$preamble_escaped"
54+
fi
55+
56+
sed -Ei "s|^## Unreleased$|$replacement|" CHANGELOG.md

.github/workflows/prepare-patch-release.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ jobs:
4646
- name: Update the change log with the approximate release date
4747
run: |
4848
date=$(date "+%Y-%m-%d")
49-
sed -Ei "s/^## Unreleased$/## Version $VERSION ($date)/" CHANGELOG.md
49+
.github/scripts/update-changelog-for-release.sh "$VERSION" "$date"
5050
5151
- name: Use CLA approved bot
5252
run: .github/scripts/use-cla-approved-bot.sh

.github/workflows/prepare-release-branch.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ jobs:
6262
- name: Update the change log with the approximate release date
6363
run: |
6464
date=$(date "+%Y-%m-%d")
65-
sed -Ei "s/^## Unreleased$/## Version $VERSION ($date)/" CHANGELOG.md
65+
.github/scripts/update-changelog-for-release.sh "$VERSION" "$date"
6666
6767
- name: Use CLA approved bot
6868
run: .github/scripts/use-cla-approved-bot.sh
@@ -119,7 +119,7 @@ jobs:
119119
run: |
120120
# the actual release date on main will be updated at the end of the release workflow
121121
date=$(date "+%Y-%m-%d")
122-
sed -Ei "s/^## Unreleased$/## Unreleased\n\n## Version $VERSION ($date)/" CHANGELOG.md
122+
.github/scripts/update-changelog-for-release.sh "$VERSION" "$date" --keep-unreleased-section
123123
124124
- name: Use CLA approved bot
125125
run: .github/scripts/use-cla-approved-bot.sh

.github/workflows/release.yml

Lines changed: 1 addition & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -134,23 +134,6 @@ jobs:
134134
env:
135135
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
136136
run: |
137-
sdk_version=$(grep -Po "val otelSdkVersion = \"\K[0-9]+.[0-9]+.[0-9]+" dependencyManagement/build.gradle.kts)
138-
139-
# conditional blocks not indented because of the heredoc
140-
if [[ $VERSION == *.0 ]]; then
141-
cat > /tmp/release-notes.txt << EOF
142-
This release targets the OpenTelemetry SDK $sdk_version.
143-
144-
Note that many artifacts have the \`-alpha\` suffix attached to their version number, reflecting that they are still alpha quality and will continue to have breaking changes. Please see the [VERSIONING.md](https://github.com/open-telemetry/opentelemetry-java-instrumentation/blob/main/VERSIONING.md#opentelemetry-java-instrumentation-versioning) for more details.
145-
146-
EOF
147-
else
148-
cat > /tmp/release-notes.txt << EOF
149-
This is a patch release on the previous $PRIOR_VERSION release, fixing the issue(s) below.
150-
151-
EOF
152-
fi
153-
154137
# CHANGELOG_SECTION.md is also used at the end of the release workflow
155138
# for copying the change log updates to main
156139
sed -n "0,/^## Version $VERSION /d;/^## Version /q;p" CHANGELOG.md \
@@ -159,7 +142,7 @@ jobs:
159142
# the complex perl regex is needed because markdown docs render newlines as soft wraps
160143
# while release notes render them as line breaks
161144
perl -0pe 's/(?<!\n)\n *(?!\n)(?![-*] )(?![1-9]+\. )/ /g' /tmp/CHANGELOG_SECTION.md \
162-
>> /tmp/release-notes.txt
145+
> /tmp/release-notes.txt
163146
164147
# conditional block not indented because of the heredoc
165148
if [[ $VERSION == *.0 ]]; then

CHANGELOG.md

Lines changed: 180 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,27 +2,194 @@
22

33
## Unreleased
44

5+
### ⚠️ Breaking changes to non-stable APIs
6+
7+
- Make `AbstractKtorServerTelemetryBuilder.isOpenTelemetryInitialized()` protected (previously
8+
public).
9+
([#17509](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/17509))
10+
- Replace `ExperimentalInstrumentationModule.injectClasses(ClassInjector)` with
11+
`exposedClassNames()` for exposing helper classes to the application class loader.
12+
([#17765](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/17765))
13+
- Moved `WebApplicationContextInstrumentation` from the `spring-web` instrumentation module to
14+
`spring-webmvc`; users who disabled it via `otel.instrumentation.spring-web.enabled=false` must
15+
now use `otel.instrumentation.spring-webmvc.enabled=false`.
16+
([#17856](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/17856))
17+
518
### 🚫 Deprecations
619

7-
- Deprecated GraphQL builder methods `setSanitizeQuery()` and `setAddOperationNameToSpanName()`,
8-
and deprecated config key `otel.instrumentation.graphql.add-operation-name-to-span-name.enabled`
9-
in favor of `setQuerySanitizationEnabled()`, `setOperationNameInSpanNameEnabled()`, and
10-
`otel.instrumentation.graphql.operation-name-in-span-name.enabled`
20+
- Deprecated `KafkaTelemetryBuilder.setMessagingReceiveInstrumentationEnabled(boolean)` in favor of
21+
`setMessagingReceiveTelemetryEnabled(boolean)`.
22+
([#17092](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/17092))
23+
- Deprecated GraphQL builder methods `setSanitizeQuery()` and `setAddOperationNameToSpanName()`, and
24+
deprecated config key `otel.instrumentation.graphql.add-operation-name-to-span-name.enabled` in
25+
favor of `setQuerySanitizationEnabled()`, `setOperationNameInSpanNameEnabled()`, and
26+
`otel.instrumentation.graphql.operation-name-in-span-name.enabled`.
27+
([#17093](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/17093))
28+
- Deprecate `Experimental.setEnableSqlCommenter()` in JDBC and R2DBC instrumentation in favor of
29+
`Experimental.setSqlCommenterEnabled()`.
30+
([#17094](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/17094))
31+
- Rename `otel.instrumentation.servlet.capture-request-parameters` to
32+
`otel.instrumentation.servlet.experimental.capture-request-parameters` and
33+
`otel.instrumentation.servlet.add-trace-id-request-attribute` to
34+
`otel.instrumentation.servlet.experimental.trace-id-request-attribute.enabled`; old property names
35+
are deprecated.
36+
([#17113](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/17113))
37+
- Deprecated the declarative config name `statement_sanitizer` in favor of `query_sanitization`, and
38+
the declarative config group `common.database` in favor of `common.db`.
39+
([#17116](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/17116))
40+
- Deprecated the GraphQL declarative config name `query_sanitizer` in favor of `query_sanitization`.
41+
([#17455](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/17455))
1142
- Deprecated the DB query sanitization system property names
1243
`otel.instrumentation.common.db-statement-sanitizer.enabled`,
1344
`otel.instrumentation.jdbc.statement-sanitizer.enabled`,
1445
`otel.instrumentation.mongo.statement-sanitizer.enabled`, and
1546
`otel.instrumentation.r2dbc.statement-sanitizer.enabled` in favor of the corresponding
16-
`*.query-sanitization.enabled` names, and deprecated the declarative config name
17-
`statement_sanitizer` in favor of `query_sanitization`
18-
- Deprecated the declarative config group `common.database` in favor of `common.db`
19-
- Deprecated the common DB sqlcommenter system property name
47+
`*.query-sanitization.enabled` names, deprecated
2048
`otel.instrumentation.common.experimental.db-sqlcommenter.enabled` in favor of
21-
`otel.instrumentation.common.db.experimental.sqlcommenter.enabled`
22-
- Deprecated the GraphQL system property name
23-
`otel.instrumentation.graphql.query-sanitizer.enabled` and declarative config name
24-
`query_sanitizer` in favor of `otel.instrumentation.graphql.query-sanitization.enabled` and
25-
`query_sanitization`
49+
`otel.instrumentation.common.db.experimental.sqlcommenter.enabled`, and deprecated
50+
`otel.instrumentation.graphql.query-sanitizer.enabled` in favor of
51+
`otel.instrumentation.graphql.query-sanitization.enabled`.
52+
([#17464](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/17464))
53+
- Deprecate `InstrumentationModule.isIndyModule()`; indy mode is now determined by the agent
54+
distribution configuration instead of per-module overrides.
55+
([#17713](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/17713))
56+
57+
### 📈 Enhancements
58+
59+
- Remove `log4j.map_message.` prefix from MapMessage attributes when
60+
`otel.instrumentation.common.v3-preview` is enabled.
61+
([#13871](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/13871))
62+
- Stop normalizing messaging header names (dash to underscore) when
63+
`otel.instrumentation.common.v3-preview` is enabled, so captured header attribute keys now
64+
preserve the original header name.
65+
([#14554](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/14554))
66+
- Add `db.system.name` attribute to Vertx SQL client instrumentation when stable database semantic
67+
conventions are enabled (`otel.semconv-stability.opt-in=database`).
68+
([#16254](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/16254))
69+
- JDBC instrumentation now supports the `db.system.name` attribute with stable semantic convention
70+
values (e.g., `postgresql`, `oracle.db`, `ibm.db2`, `sap.hana`) when stable database semantic
71+
conventions are enabled (`otel.semconv-stability.opt-in=database`).
72+
([#16277](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/16277))
73+
- Add `otel.instrumentation.common.v3-preview` flag that enables upcoming 3.0 breaking changes
74+
early.
75+
([#16459](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/16459))
76+
- Optimized log event MDC attribute mapping in jboss-logmanager, log4j, and logback appenders by
77+
pre-computing attribute keys at initialization.
78+
([#16765](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/16765))
79+
- Add `messaging.kafka.bootstrap.servers` attribute to Kafka producer spans when
80+
`otel.instrumentation.kafka.experimental-span-attributes` is enabled.
81+
([#17065](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/17065))
82+
- Disable servlet trace-id request attribute by default when
83+
`otel.instrumentation.common.v3-preview` is enabled.
84+
([#17173](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/17173))
85+
- Disable thread details span processor (`otel.javaagent.add-thread-details`) by default when
86+
`otel.instrumentation.common.v3-preview` is enabled.
87+
([#17215](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/17215))
88+
- Improved javaagent startup optimization by decomposing disjunction matchers, allowing more
89+
transformations to be skipped during class loading.
90+
([#17227](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/17227))
91+
- Add stable `messaging.kafka.offset` attribute to Kafka instrumentation, gated behind
92+
`otel.semconv-stability.preview=messaging`.
93+
([#17785](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/17785))
94+
- Preserve original casing of servlet request parameter names in attribute keys when
95+
`otel.instrumentation.common.v3-preview` is enabled.
96+
([#17822](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/17822))
97+
- Replace reflective mutation of Byte Buddy's `AgentBuilder.Default.transformations` with a
98+
`ClassFileTransformer` hook, avoiding a JDK 26 JEP 500 warning about writing to a final field
99+
via reflection.
100+
([#17824](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/17824))
101+
- Add javaagent bridging support for OpenTelemetry API 1.61 stable methods including
102+
`Tracer.isEnabled()`, metric instrument `isEnabled()`, and `Logger.setBody(Body)`.
103+
([#17849](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/17849))
104+
105+
### 🛠️ Bug fixes
106+
107+
- Fix `WebClientBeanPostProcessor` and `RestClientBeanPostProcessor` to avoid replacing
108+
user-customized builder beans when the OpenTelemetry tracing filter/interceptor is already
109+
registered.
110+
([#15546](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/15546))
111+
- Fix memory leak where bridged observable metric callbacks were never closed when the
112+
application-side instrument was garbage collected.
113+
([#16219](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/16219))
114+
- Fix Ktor server instrumentation leaking scope across requests due to `restoreThreadContext` not
115+
always being called by Ktor coroutine machinery.
116+
([#16487](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/16487))
117+
- Add missing `schemaUrl` to servlet response instrumenter.
118+
([#16560](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/16560))
119+
- Fix `OpenTelemetryContextDataProvider` calling `GlobalOpenTelemetry.get()` during class
120+
initialization, which could interfere with SDK setup ordering.
121+
([#16638](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/16638))
122+
- Fix ZIO instrumentation destroying caller thread context on fiber suspend, which caused spans
123+
created after `unsafe.run` to lose their parent.
124+
([#16647](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/16647))
125+
- Fix Spring Boot starter adding a duplicate OpenTelemetry logback appender when the appender is
126+
nested inside another appender.
127+
([#16697](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/16697))
128+
- Fix bridging of `VALUE`-type attributes set via `AttributeKey.valueKey()` on spans and log records
129+
through the javaagent API bridge.
130+
([#16750](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/16750))
131+
- Fix unsafe deserialization in RMI instrumentation that could lead to remote code execution
132+
([CVE-2026-33701](https://github.com/open-telemetry/opentelemetry-java-instrumentation/security/advisories/GHSA-xw7x-h9fj-p2c7),
133+
[#16986](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/16986),
134+
also released in 2.26.1)
135+
- Fix boot loader class injection for `httpurlconnection`, `methods`, and `rmi` instrumentations to
136+
use `MethodHandles.Lookup` instead of unsafe fallback on JDK 23+.
137+
([#17050](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/17050))
138+
- Fix runtime-telemetry to fall back to JMX metrics when `preferJfr` is enabled but JFR is not
139+
available.
140+
([#17058](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/17058))
141+
- Fix `NullPointerException` in servlet instrumentation when response object is null during error
142+
handling.
143+
([#17087](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/17087))
144+
- Limit sanitized Redis command length to 32 KB to prevent excessive memory usage from very large
145+
commands.
146+
([#17139](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/17139))
147+
- Fix Apache Dubbo 2.7 instrumentation SPI resource path so that filters are properly discovered by
148+
Dubbo's extension loader.
149+
([#17210](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/17210))
150+
- Log suppressed failures from Netty HTTP server response customization instead of swallowing
151+
them.
152+
([#17220](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/17220))
153+
- Fix span leak on cancelled requests in Spring WebFlux server library instrumentation.
154+
([#17222](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/17222))
155+
- Fix Kafka wrapped producer to respect `setPropagationEnabled(false)` and not inject trace context
156+
into message headers when propagation is disabled.
157+
([#17231](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/17231))
158+
- Fix deadlock in `IgnoredClassLoadersMatcher` caused by `computeIfAbsent` holding a lock while
159+
calling `loadClass`.
160+
([#17241](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/17241))
161+
- Fix Pulsar consumer instrumentation failing to instrument message listeners in newer Pulsar client
162+
versions where `triggerListener` was refactored into a lambda.
163+
([#17405](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/17405))
164+
- Fix Kafka producer wrapper silently dropping context propagation when `ProducerRecord` headers are
165+
read-only (e.g. when a record is sent a second time).
166+
([#17530](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/17530))
167+
- Fix `NullPointerException` in Undertow instrumentation when the active-handlers context key is
168+
absent.
169+
([#17559](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/17559))
170+
- Fix `HttpServerResponseCustomizer` error isolation so that a failing customizer no longer prevents
171+
subsequent customizers from running.
172+
([#17617](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/17617))
173+
- Fix `rocketmq-client-4.8` instrumentation not recording spans for ONEWAY messages.
174+
([#17656](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/17656))
175+
- Fix internal application logger not activating when `otel.instrumentation.common.default-enabled`
176+
is set to `false`.
177+
([#17657](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/17657))
178+
- Fix floating-point precision issue when converting Micrometer timer histogram bucket boundaries
179+
from nanoseconds to the target time unit.
180+
([#17715](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/17715))
181+
- Fix `ClassNotFoundException` in `MicrometerBridgeAutoConfiguration` when Spring Boot Actuator
182+
metrics module is not on the classpath in Spring Boot 4.
183+
([#17723](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/17723))
184+
- Align RMI context propagation limits with Tomcat defaults, reducing max entries from 1000 to 100
185+
and adding an 8 KB total size limit to prevent excessively large payloads.
186+
([#17870](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/17870))
187+
- Fix runtime-telemetry unconditionally enabling experimental JFR-based metrics when
188+
`otel.instrumentation.runtime-telemetry.emit-experimental-metrics=true`, which could impose
189+
unwanted JFR recording overhead on users who only wanted the JMX-based experimental metrics.
190+
JFR-based experimental metrics are now gated by a separate
191+
`otel.instrumentation.runtime-telemetry.emit-experimental-jfr-metrics` property.
192+
([#18110](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/18110))
26193

27194
## Version 2.26.1 (2026-03-23)
28195

0 commit comments

Comments
 (0)