rangareddy opened a new issue, #19511:
URL: https://github.com/apache/hudi/issues/19511

   `hudi-presto-bundle` was the first of three bundles that depend on 
`hudi-hadoop-mr-bundle`, a shaded fat jar,
   while shading the same library classes themselves. #19469 / #19490 handled 
that one. Two remain:
   
   - `packaging/hudi-hive-sync-bundle/pom.xml:167`
   - `packaging/hudi-gcp-bundle/pom.xml:157`
   
   Both list `org.apache.hudi:hudi-hadoop-mr` and 
`org.apache.hudi:hudi-hadoop-common` in their own
   `artifactSet`, so they shade those classes directly and have no need for the 
fat jar as a dependency.
   
   ### Why this is not simply the presto change again
   
   In the presto bundle, `hudi-hadoop-mr` was reached *only* through 
`hudi-hadoop-mr-bundle`'s published
   dependency-reduced POM, which is what made #19433's regression possible: 
removing the fat jar emptied the
   includes and shade did not complain. These two bundles are in a better 
position — both reach the library
   modules through `hudi-hive-sync`, a library:
   
   ```
   $ mvn -o dependency:tree -Dincludes=org.apache.hudi -pl 
packaging/hudi-hive-sync-bundle,packaging/hudi-gcp-bundle
   
   hudi-hive-sync-bundle
   +- hudi-common:compile
   +- hudi-hadoop-mr-bundle:compile          <-- the fat jar
   \- hudi-hive-sync:compile
      +- hudi-hadoop-common:compile          <-- reached via the library, not 
the bundle
      +- hudi-hadoop-mr:compile
      \- hudi-sync-common:compile
   
   hudi-gcp-bundle
   +- hudi-common:compile
   +- hudi-hadoop-mr-bundle:compile          <-- the fat jar
   +- hudi-sync-common:compile
   |  \- hudi-hadoop-common:compile
   +- hudi-hive-sync:compile
   |  \- hudi-hadoop-mr:compile
   \- hudi-gcp:compile
   ```
   
   So dropping the fat-jar dependency should not empty either `artifactSet` — 
but "should not" is what the
   presto bundle taught us to measure rather than assume.
   
   ### What needs measuring before either change
   
   Reviewer feedback on #19490 established the recipe, and it is not optional 
here:
   
   1. **Both resolution paths, because they disagree.** A reactor build 
resolves `hudi-hadoop-mr-bundle` from the
      reactor and never reads its reduced POM; a repository build does. The 
presto bundle carried 651
      `org/codehaus/jackson/**` entries on one path and 0 on the other, at the 
same commit. Releases go through
      the reactor path (`scripts/release/deploy_staging_jars.sh` builds the 
full reactor with no `-pl`), so that
      is the one that defines the contract.
   
      ```
      # repository path
      mvn install -DskipTests -Dscala-2.12 -Dspark3.5 -Dflink1.20 -pl 
packaging/<bundle>
      # reactor path
      mvn install -DskipTests -Dscala-2.12 -Dspark3.5 -Dflink1.20 -pl 
packaging/hudi-hadoop-mr-bundle,packaging/<bundle>
      ```
   
   2. **The jar entry listing, diffed and not just counted**, before and after, 
on both paths.
   3. **The published `dependency-reduced-pom.xml`**, parsed to 
`groupId:artifactId:version:scope` and diffed.
      With `promoteTransitiveDependencies` on, removing a dependency changes 
what consumers resolve; on the
      presto bundle this moved the parquet transitives from 1.10.1 back to the 
bundle's own version and dropped
      `it.unimi.dsi:fastutil` and `org.apache.parquet:parquet-format`. Both 
bundles publish a POM that consumers
      read, so that half of the contract needs the same treatment.
   
   ### Also worth checking while in here
   
   Neither bundle has an `org.codehaus.jackson:*` include, so neither carries 
the Jackson 1.x problem that
   #19490 cleaned up. But `hudi-hive-sync-bundle` does include 
`org.apache.parquet:parquet-*` without declaring
   the artifacts, so it is worth confirming which dependency currently supplies 
them, and whether that is the
   fat jar.
   
   ### Context
   
   - #19469 — the presto bundle, question 3 of which asked whether "bundles 
depend on library modules only"
     should be a general rule. Answered yes for one bundle; this issue is the 
remaining two.
   - #19433 — the regression that showed shade silently produces a smaller jar 
when an `artifactSet` include
     matches nothing.
   - #19490 — the presto bundle change, whose review thread contains the 
measurement discipline above.
   - #19491 — `validate_presto_bundle.sh`, the CI gate that now asserts the 
presto bundle's required classes.
     Equivalent coverage for these two bundles does not exist and would be the 
right thing to add alongside
     any change here.
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to