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
{{ message }}
Repository navigation
Treat JVM platform frames (java.*, kotlin.*, ...) as non-user code in error stacking #2679
ErrorSignature decides which stack frame is "user code" by namespace. With no User Namespaces configured, every namespace except System and Microsoft counts as user code:
So everyNumberFormatException from Integer.parseInt in a project lands in one stack, no matter which application method called it. The same happens for Objects.requireNonNull, collections, I/O and so on. The new Java client's end-to-end tests reproduce this against 8.10.0 (StackingSignatureE2ETest). Two unrelated call sites get the same stack_id.
Proposal
Add the JVM platform namespaces to the default non-user list:
java, javax, jdk, sun, com.sun, jakarta, kotlin, kotlinx, scala
Also match on a namespace boundary (ns == prefix || ns.StartsWith(prefix + ".")) instead of a bare StartsWith. Otherwise sun would also match a user namespace like sunrise.billing; today System already matches SystemsIntegration.*.
To discuss: whether common frameworks (org.springframework, org.apache, org.hibernate, io.netty, reactor, com.fasterxml) should also be non-user by default. .NET already treats all of Microsoft.*, including ASP.NET Core and EF Core, as non-user, so including them would be consistent.
Notes
If no user frame is found, the existing fallback still uses the innermost error's top frame, so pure-JDK traces keep a signature.
Signature hashes change for existing Java/Kotlin stacks, so their next occurrence creates a new stack. The old Java client (0.1) couldn't send stack traces in the format the server reads anyway, so few existing stacks are affected.
Activity