[SPARK-XXXXX][CORE] Tolerate missing jdk.internal.ref.Cleaner on JDK 26+#56952
Open
krishnamanchikalapudi wants to merge 1 commit into
Open
Conversation
Platform's static initializer treated any failure to load jdk.internal.ref.Cleaner as fatal, wrapping it in an IllegalStateException that aborted class init. On JDK 26 the class was removed outright (ClassNotFoundException) rather than merely made inaccessible, which wasn't handled the same way as the existing --add-opens-denied case, so SparkContext creation failed with ExceptionInInitializerError. Now ClassNotFoundException/NoSuchMethodException from the Cleaner lookup falls back to CLEANER_CREATE_METHOD = null, same as when reflective access is denied. Direct-buffer allocation already checks for null and simply skips the eager-cleanup optimization, relying on normal GC instead.
Member
|
I don't think it's the right fix direction, we should make the cleaner work on JDK 26 instead |
Member
|
I opened #56954 with a different solution. |
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.
on normal GC instead — the same fallback already
used when
--add-opens java.base/jdk.internal.ref=ALL-UNNAMEDisn't granted.How was this patch tested?
Manually verified the logic change; recommend running the existing
PlatformSuiteincommon/unsafeon both an older JDK and JDK 26 to confirmcleanerCreateMethodIsDefined()returnsfalse(rather than throwing) on JDK 26.Platform's static initializer treated any failure to load
jdk.internal.ref.Cleaner as fatal, wrapping it in an IllegalStateException
that aborted class init. On JDK 26 the class was removed outright
(ClassNotFoundException) rather than merely made inaccessible, which wasn't
handled the same way as the existing --add-opens-denied case, so
SparkContext creation failed with ExceptionInInitializerError.
Now ClassNotFoundException/NoSuchMethodException from the Cleaner lookup
falls back to CLEANER_CREATE_METHOD = null, same as when reflective access
is denied. Direct-buffer allocation already checks for null and simply
skips the eager-cleanup optimization, relying on normal GC instead.
What changes were proposed in this pull request?
Why are the changes needed?
Does this PR introduce any user-facing change?
How was this patch tested?
Was this patch authored or co-authored using generative AI tooling?