fix: bump Hadoop to 3.4.3 — COPY INTO Parquet/Delta/remote work on JDK 23+ (closes #183) - #189
Merged
Conversation
…K 23+
Hadoop 3.4.2's `UserGroupInformation.getCurrentUser()` called
`javax.security.auth.Subject.getSubject(AccessControlContext)`, which JDK 23
re-specified to throw by default and JEP 486 (JDK 24) made throw
unconditionally. That broke every Hadoop-bound `COPY INTO` source — local
PARQUET, local DELTA_LAKE and all remote schemes — on JDK 23+.
HADOOP-19212 fixed it upstream in 3.4.3 (released 2026-02-24):
`UserGroupInformation` now goes through `SubjectUtil.current()`, which binds
`Subject.current()` on JDK 18+ and falls back to the old API below that, so the
JDK 8 floor is preserved. hadoop-common 3.4.3 is still Java 8 bytecode.
One-line change: `Versions.hadoop` 3.4.2 -> 3.4.3. hadoop-client, hadoop-aws and
hadoop-azure all read that constant.
Verified:
- FileSourceSpec forked onto Zulu 25.0.4: 26 passed / 0 failed (was 19/7; the 7
failures were exactly the Parquet + Delta tests, all now green)
- core suite on the default JDK 11: 716 passed / 0 failed
- `+ core/compile` clean (2.12 + 2.13)
- JavaClientCopyIntoS3Spec (MinIO, Docker): 3 passed — 3.4.3's cloud-connector
reorganisation did not break S3A wiring
- Remote scheme on JDK 25: `UserGroupInformation.getCurrentUser()` OK and
`FileSystem.get("s3a://...")` returns S3AFileSystem — no `getSubject`
Docs: the COPY INTO JVM-compatibility matrix collapses to all-✔; the older-release
guidance (incl. the DBeaver -vm workaround) is kept under a dedicated subsection,
and the now-empty "Runtime / JVM limitations" section is removed from
known_limitations.md.
Story R1FIX.4 follow-up. Closes #183
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
fupelaqu
marked this pull request as ready for review
August 3, 2026 07:05
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.
Closes #183.
What
One line:
project/Versions.scala:64,Versions.hadoop3.4.2 → 3.4.3.hadoop-client,hadoop-awsandhadoop-azureall read that constant, so they move together.Plus the documentation that constant made false.
Why
R1FIX.4 (#188) fixed local
JSON/JSON_ARRAYby routing them off Hadoop entirely, and weconcluded the rest — local
PARQUET, localDELTA_LAKE, every remote scheme — was blockedindefinitely on upstream Hadoop. It wasn't: the upstream fix shipped five months ago and we were
one patch release behind.
HADOOP-19212 "[JDK25] UserGroupInformation use
of Subject needs to move to replacement APIs" was resolved 2025-11-07, fix versions 3.4.3 and
3.5.0. Hadoop 3.4.3 was released 2026-02-24.
Verified against the actual jars rather than the changelog:
UserGroupInformation.getCurrentUser()now callsSubjectUtil.current(). TheAccessController.getContext()→Subject.getSubject(...)chain that COPY INTO with PARQUET / DELTA_LAKE / remote schemes fails on JDK 23+ ('getSubject') — local JSON fixed in 0.20.3 #183 died in is gone.SubjectUtil.current()invokes aMethodHandlebuilt bylookupCurrent(), whichfindStaticsSubject.current()(JDK 18+) and onNoSuchMethodExceptionfalls back tofilterReturnValue(getContext, getSubject). So it works on JDK 24/25 and still on our JDK 8/11floor.
hadoop-common-3.4.3is still major version 52 (Java 8) bytecode —-target:jvm-1.8intact.Evidence
core/testOnly *FileSourceSpecforked onto Zulu 25.0.4main: 19 passed, 7 failed)core/testOnly *LocalPathSpec *FileSourceSpecon default JDK 11core/teston default JDK 11+ core/compile(2.12 + 2.13)es8java/testOnly *CopyIntoS3*(MinIO, Docker, JDK 17)headerCheck scalafmtSbtCheck scalafmtCheck test:scalafmtCheckThe 7 previously-failing tests were exactly
read Parquet file,read Parquet file with nested structures,get Parquet file metadata,read Delta Lake table,read Delta table with time travel,get Delta table info,read Delta table with partitions. All green on JDK 25 now.Remote schemes on JDK 25 are not covered by any suite, so they were probed directly against the
real
core/Testclasspath (which carrieshadoop-aws-3.4.3, it being% Provided):On that same JVM with 3.4.2, #188's
Probe183control printedUnsupportedOperationException: getSubject is not supported. The probe used static credentials andfs.s3a.bucket.probe=0so the default AWS credential chain (and its IMDS probe) was never consulted.The MinIO run is the meaningful regression check here: 3.4.3 carries a cloud-connector
reorganisation that could have moved S3A wiring. It didn't.
Docs
The
COPY INTOJVM-compatibility matrix indocumentation/sql/dml_statements.mdcollapses to all-✔.The older-release guidance is kept, under a new "If you are on an older release" subsection —
including the DBeaver
-vmrecipe and the-Djava.security.manager=allownote for JDK 23 — becauseusers on ≤ 0.20.3 still need it. The heading text is unchanged so the existing anchor keeps working.
known_limitations.md's "Runtime / JVM limitations" section existed solely for this bullet and isremoved — a resolved item on a known-limitations page misleads anyone skimming for current
constraints. No inbound links to that anchor (checked).
Notes for review
build.sbt:23still reads0.20.3-SNAPSHOT; per the epicrelease protocol the first PR to merge owns it and R1FIX.3 already claimed it. But 0.20.3 has
just been released, so the line may well need to move to
0.20.4-SNAPSHOT— that is your call,not something this PR should decide. The docs deliberately do not name the version that carries
this fix; they say "up to and including 0.20.3" for the broken releases, which is true either way.
abfs*:///gs://on JDK 25. SameUserGroupInformationroot cause, nowfixed, and
hadoop-azuremoves with the same constant — but there is no test for either, and theGCS connector is pinned separately (
Versions.scala:66,hadoop3-2.2.24) and was not touched.Parquet/Delta failures on any JDK ≥ 23 run of
FileSourceSpec, do not call it a regression". With3.4.3 the expected count is zero, and
FileSourceSpecstops being self-controlling on JDK 25.SOFTNETWORK-APP/softclient4es-web#31
(
feedback_dual_docs_sync). Merge the two together, web after this one.🤖 Generated with Claude Code