Fix server crash when File-Based Debug Logger is enabled#602
Open
Fix server crash when File-Based Debug Logger is enabled#602
Conversation
When the debug logger is enabled, LoggerConfigManager sets root JUL level to FINEST which makes Grizzly's DefaultFilterChain.executeFilter() check isLoggable(FINEST)=true and log the FilterChainContext object. In Grizzly 3.0.1, FilterChainContext.toString() has a bytecode bug where it does a checkcast to char[] on the message field. When the message is a LdapResponseMessage, the cast fails with ClassCastException that propagates through the RxJava pipeline causing a server crash. Fix: Limit org.glassfish.grizzly JUL logging to FINE level so that isLoggable(FINEST) returns false, preventing the broken code path. Also add toString() to LdapResponseMessage for better diagnostics. Agent-Logs-Url: https://github.com/OpenIdentityPlatform/OpenDJ/sessions/73a4bf17-653a-4ea6-b379-6a220c9059db Co-authored-by: vharseko <6818498+vharseko@users.noreply.github.com>
Copilot
AI
changed the title
[WIP] Fix server crash when file-based debug logger is enabled
Fix server crash when File-Based Debug Logger is enabled
Mar 30, 2026
maximthomas
approved these changes
Mar 30, 2026
Contributor
maximthomas
left a comment
There was a problem hiding this comment.
Tested locally, works fine with File-Based Debug Logger enabled
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Enabling the File-Based Debug Logger causes an immediate server crash via
ClassCastExceptionin Grizzly'sFilterChainContext.toString(), which propagates through the RxJava pipeline asOnErrorNotImplementedException.Root Cause
LoggerConfigManagersets the root JUL level toFINESTwhen the debug logger is enabled. This causes Grizzly'sDefaultFilterChain.executeFilter()to enter its logging branch (isLoggable(FINEST) == true) and log theFilterChainContextviaSLF4JBridgeHandler→MessageFormat→FilterChainContext.toString().In Grizzly 3.0.1,
FilterChainContext.toString()has a bytecode-level bug — decompiling the JAR reveals it emits acheckcast [C(char array cast) on the contextmessagefield:During LDAP write operations,
messageis aLdapResponseMessage, not achar[]— the cast fails.Changes
LoggerConfigManager.changeJulLogLevel(): Appendorg.glassfish.grizzly.level=FINEto the JUL config string. This caps Grizzly's effective JUL level atFINE, makingisLoggable(FINEST)returnfalsefor all Grizzly loggers and bypassing the brokentoString()path. GrizzlyFINE/WARNING/SEVEREmessages continue to flow normally.LdapMessages.LdapResponseMessage: AddtoString()override for meaningful diagnostic output when the object appears in log messages.Warning
Firewall rules blocked me from connecting to one or more addresses (expand for details)
I tried to connect to the following addresses, but was blocked by firewall rules:
1.0.17.172.in-addr.arpainclude::./_control-panel-examples.adoc[]
-classpath /home/REDACTED/work/OpenDJ/OpenDJ/opendj-doc-generated-ref/target/opendj/lib/bootstrap.jar:/home/REDACTED/work/OpenDJ/OpenDJ/opendj-doc-generated-ref/target/dependency/freemarker-2.3.34.jar org.opends.guitools.controlpanel.ControlPanelLauncher --help /work/OpenDJ/Ope352:353:355 r --no�� --noprofile jar ndor/bin/git orting-api/3.0/m/usr/lib/jvm/temurin-17-jdk-amd64/lib/jspawnhelper` (dns block)
include::./_setup-examples.adoc[]
-classpath /home/REDACTED/work/OpenDJ/OpenDJ/opendj-doc-generated-ref/target/opendj/lib/bootstrap.jar:/home/REDACTED/work/OpenDJ/OpenDJ/opendj-doc-generated-ref/target/dependency/freemarker-2.3.34.jar org.opends.quicksetup.installer.SetupLauncher --help cal/bin/jar head mpil��` (dns block)
include::./_uninstall-examples.adoc[]
-classpath /home/REDACTED/work/OpenDJ/OpenDJ/opendj-doc-generated-ref/target/opendj/lib/bootstrap.jar:/home/REDACTED/work/OpenDJ/OpenDJ/opendj-doc-generated-ref/target/dependency/freemarker-2.3.34.jar org.opends.guitools.uninstaller.UninstallLauncher --help /usr/bin/jar er e-ma�� --noprofile refirebooter-20260330092139437_359.jar er .0.jar` (dns block)
include::./_control-panel-examples.adoc[]
-classpath /home/REDACTED/work/OpenDJ/OpenDJ/opendj-doc-generated-ref/target/opendj/lib/bootstrap.jar:/home/REDACTED/work/OpenDJ/OpenDJ/opendj-doc-generated-ref/target/dependency/freemarker-2.3.34.jar org.opends.guitools.controlpanel.ControlPanelLauncher --help /work/OpenDJ/Ope352:353:355 r --no�� --noprofile jar ndor/bin/git orting-api/3.0/m/usr/lib/jvm/temurin-17-jdk-amd64/lib/jspawnhelper` (dns block)
include::./_setup-examples.adoc[]
-classpath /home/REDACTED/work/OpenDJ/OpenDJ/opendj-doc-generated-ref/target/opendj/lib/bootstrap.jar:/home/REDACTED/work/OpenDJ/OpenDJ/opendj-doc-generated-ref/target/dependency/freemarker-2.3.34.jar org.opends.quicksetup.installer.SetupLauncher --help cal/bin/jar head mpil��` (dns block)
include::./_uninstall-examples.adoc[]
-classpath /home/REDACTED/work/OpenDJ/OpenDJ/opendj-doc-generated-ref/target/opendj/lib/bootstrap.jar:/home/REDACTED/work/OpenDJ/OpenDJ/opendj-doc-generated-ref/target/dependency/freemarker-2.3.34.jar org.opends.guitools.uninstaller.UninstallLauncher --help /usr/bin/jar er e-ma�� --noprofile refirebooter-20260330092139437_359.jar er .0.jar` (dns block)
💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.