You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: package-name-exceptions-plan.md
+136-4Lines changed: 136 additions & 4 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -8,6 +8,11 @@ Updated again on 2026-05-14 to plan faster batches: up to 20 changed files per P
8
8
Updated again on 2026-05-14 to bump the target to up to 40 changed files per PR and plan all remaining historical package renames.
9
9
Updated on 2026-05-17 after PRs 15-16 merged, and after deciding to handle Akka/Scala forkjoin as a module-name cleanup instead of a package-only cleanup.
10
10
Updated on 2026-05-18 after PRs 13, 18, 20, and 21 merged and their historical package exceptions were removed from the checker.
11
+
Updated again on 2026-05-18 after deciding that leading `java` is meaningful for JDK instrumentation packages.
12
+
Updated again on 2026-05-18 after applying #16090's `*-common` module naming convention and planning PRs 23-26.
13
+
Updated on 2026-05-19 after PRs 23-24 merged and their unversioned common-module allowances were removed from the checker.
14
+
Updated again on 2026-05-19 after deciding app-server/framework module names for Payara, Quarkus RESTEasy Reactive, and Tomcat JDBC.
15
+
Updated on 2026-05-22 after documenting how patch-level base versions map to module names.
11
16
12
17
## Goal
13
18
@@ -19,7 +24,7 @@ The remaining exceptions fall into four buckets:
19
24
20
25
| Bucket | Current signal | Recommendation |
21
26
| --- | --- | --- |
22
-
| Module-wide skips |`java-*` has 39 files, `jmx-metrics` has 43 files | Do not start here; these need broader naming decisions. |
27
+
| Module-wide skips |`jmx-metrics` has 43 files | Do not start here; this needs a broader naming decision. |
23
28
| Library packages under third-party namespaces |`grpc`, `lettuce`, `nats`, `rxjava` each have 1 file | Leave for later; these are likely compatibility/shim packages. |
24
29
| Javaagent advice under instrumented library namespaces | mostly 1 file each | Leave for later; the script already says these must live in the instrumented library namespace. |
25
30
| Historical javaagent packages | many one-dir modules remain, usually with one source directory | Best place to keep chipping away. |
@@ -44,6 +49,8 @@ These PRs have merged, and their historical javaagent package-name exceptions ha
44
49
- PR 18: `jaxrs-common`.
45
50
- PR 20: `servlet-common` snippet package.
46
51
- PR 21: `servlet-common` root helper package.
52
+
- PR 23: `jetty-common` -> `jetty-common-8.0` and `tomcat-common` -> `tomcat-common-7.0`.
`external-annotations` still remains in the unversioned-module allowlist as `javaagent:external-annotations`; that is a separate module-name exception, not a historical package exception.
87
+
`spring-boot-resources` keeps a narrow deprecated compatibility-package exception for `io.opentelemetry.instrumentation.spring.resources`; the replacement javaagent package is already present under `io.opentelemetry.javaagent.instrumentation.spring.boot.resources`.
75
88
76
89
## PR Creation Notes
77
90
@@ -111,7 +124,18 @@ For common-module package moves, search for downstream versioned modules importi
111
124
112
125
## Open Cleanup PRs
113
126
114
-
PR 14 is open as #18747 and PR 17 is open as #18772. Keep `.github/scripts/check-package-names.sh` and checker exception removals on `next` until cleanup PRs merge.
127
+
PR 14 is open as #18747, PR 17 is open as #18772, PR 22 is open as #18784, and PR 25 is open as #18788. Keep `.github/scripts/check-package-names.sh` and checker exception removals on `next` until cleanup PRs merge.
128
+
129
+
For JDK instrumentation modules, keep the leading `java` token in package paths. For example,
130
+
`java-util-logging` maps to `io.opentelemetry.javaagent.instrumentation.java.util.logging`, while
131
+
embedded `java` tokens in third-party library names are still elided, e.g. `graphql-java-20.0` maps
132
+
to `graphql.v20_0`.
133
+
134
+
When the actual minimum supported library version is a patch release, use the containing minor
135
+
version in the module and package name instead of including the patch. For example,
136
+
`payara-embedded-web:5.2020.2` maps to `payara-5.2020` and package suffix `v5_2020`, not
137
+
`payara-5.2020.2` / `v5_2020_2`. Users should be on the latest patch for a given minor line, and
138
+
patch-level suffixes would create noisy module names without a meaningful compatibility boundary.
115
139
116
140
### PR 14: OpenTelemetry annotation and instrumentation API modules (open #18747)
- This is a #16090 common-module convention cleanup. The common javaagent module compiles against `org.springframework:spring-webmvc:3.1.0.RELEASE` and is shared by `spring-webmvc-3.1` and `spring-webmvc-6.0`.
251
+
- Estimated changed files: about 27 in the PR branch, excluding the later checker update on `next`.
- Keep the `testing` project path with the module rename, but treat testing package changes under `spring.webmvc.boot` and `spring.webmvc.filter` as a separate public testing API decision unless the audit shows they are private-only.
### PR 26: Spring Cloud Gateway common testing package decision
263
+
264
+
Module:
265
+
266
+
-`spring-cloud-gateway-common`
267
+
268
+
Expected package decision:
269
+
270
+
- Keep `spring-cloud-gateway-common` unversioned for the javaagent helper unless a deeper audit finds a direct Spring Cloud Gateway API dependency.
271
+
- Decide whether testing packages should move from `io.opentelemetry.instrumentation.spring.gateway.common` to `io.opentelemetry.instrumentation.spring.cloud.gateway.common`.
272
+
273
+
Notes:
274
+
275
+
- The javaagent helper has no direct Spring Cloud Gateway compile dependency and is shared by WebFlux/WebMVC instrumentations, so #16090 does not obviously require a versioned module name.
276
+
- Estimated changed files: about 7 if this is only the testing package rename; more if the audit expands scope beyond testing packages.
277
+
- The likely cleanup is only the testing package name, and this may be public testing API. Keep it separate from the module-name PRs above.
- These are module-name cleanups, not just package moves. Update `settings.gradle.kts`, instrumentation inventory/docs, FOSSA config, Gradle project references, package declarations, imports, and checker allowlist entries after merge.
303
+
- Keep existing instrumentation names as compatibility aliases. For Quarkus RESTEasy Reactive, keep the muzzle split across `io.quarkus:quarkus-resteasy-reactive:(,3.9.0)` and `io.quarkus:quarkus-rest:[3.9.0,)`; `3.9` is the artifact rename boundary, not the module's minimum supported version.
304
+
- Use `quarkus-resteasy-reactive-1.11` because the artifact starts at `1.11.0` prereleases, the first final is `1.11.0.Final`, the javaagent compiles against `1.11.0.Final`, and the original muzzle range covered all versions of the old artifact.
305
+
- Use `payara-5.2020` because `5.2020.2` is the earliest `5.2020.x` release, the javaagent builds against it, and it contains both `fish.payara.opentracing.OpenTracingService` and `org.apache.catalina.core.StandardWrapper`. Per the patch-floor rule above, use the minor line in the module/package name instead of `payara-5.2020.2`.
306
+
- Use `tomcat-jdbc-8.5` because the javaagent compiles/tests against `org.apache.tomcat:tomcat-jdbc:8.5.0` and docs list support from `[8.5.0,)`.
-`java-*` module skip: the current packages use names like `javahttpclient`, while the checker would expect `http.client` after eliding `java`. This touches 39 files and needs a naming decision.
319
+
-`java-http-client` and `java-http-server`: these have published library/testing packages, so package renames need a dedicated public API decision instead of a package-only javaagent cleanup.
197
320
-`jmx-metrics`: current packages are under `jmx`, while the module says `jmx-metrics`. This touches 43 files and may be user-facing enough to deserve a dedicated PR.
198
321
- Library-specific third-party packages: `io.grpc.override`, `io.lettuce.core.protocol`, `io.nats.client.impl`, and `rx` are likely intentional shims or package-private access points.
199
322
- Advice-native package exceptions: packages under `com.clickhouse`, `com.twitter`, `io.netty`, `reactor.netty`, `org.springframework`, and `io.vertx` should stay until each one is proven not to need native package placement.
200
323
- OpenTelemetry API and Akka/Scala forkjoin package/module renames are planned above; AWS SDK remains deferred.
201
-
- Other unversioned module allowlist entries: these need package/module naming decisions beyond a package-only cleanup.
324
+
- Remaining unversioned module allowlist entries split into policy buckets:
325
+
- JDK/platform modules such as `executors`, `http-url-connection`, `jdbc`, `methods`, `rmi`, and `runtime-telemetry` probably deserve explicit checker allowances instead of version suffixes.
326
+
-`internal-*` modules such as `internal-class-loader`, `internal-lambda`, `internal-reflection`, and `internal-url-class-loader` probably deserve explicit checker allowances; version suffixes would be misleading.
327
+
-`*-common` modules need case-by-case module naming review:
328
+
- Apply #16090's convention: `<library>-common` is for pure utility/abstraction code with no direct library version dependency, `<library>-common-<major.minor>` is for shared code that requires a minimum library version, and `<library>-common-<variant>` is for variants such as `javax`.
329
+
-`spring-webmvc-common` and the `spring-cloud-gateway-common` testing package decision are planned above as PRs 25-26. `jetty-common`, `tomcat-common`, and `opensearch-rest-common` were completed in PRs 23-24.
330
+
-`jaxrs-common`: keep unversioned. The javaagent module has no direct JAX-RS API dependency and acts as cross-generation helper/bootstrap code used by JAX-RS 1.0, 2.0, 3.0, and Quarkus RESTEasy Reactive. Keep it separate from the already version-scoped `jaxrs-2.0-common`, `jaxrs-3.0-common`, `jaxrs-common-2.0`, and `jaxrs-common-3.0` modules.
331
+
-`servlet-common`: keep unversioned. This matches #16090's pure abstraction/variant shape: shared code for both `javax.servlet` and `jakarta.servlet`, with `servlet-common-javax` as the variant-specific module. Because it includes published `library` packages, treat any future package changes as public API policy, not package-only cleanup.
332
+
- App-server/framework module-name cleanups for `payara`, `quarkus-resteasy-reactive`, and `tomcat-jdbc` are planned above as PR 27.
333
+
- Treat this as a checker-policy cleanup first: document legitimate unversioned javaagent module shapes, then only rename leftovers that are true module-name debt.
0 commit comments