[
https://issues.apache.org/jira/browse/HBASE-30338?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Junegunn Choi resolved HBASE-30338.
-----------------------------------
Fix Version/s: 4.0.0-alpha-1
3.1.0
3.0.1
Resolution: Fixed
Pushed to master, branch-3 and branch-3.0. Thanks to [~nihaljain.cs] for the
review.
> Shaded jar content check is a no-op
> -----------------------------------
>
> Key: HBASE-30338
> URL: https://issues.apache.org/jira/browse/HBASE-30338
> Project: HBase
> Issue Type: Bug
> Components: build, shading
> Affects Versions: 3.0.0
> Reporter: Junegunn Choi
> Assignee: Junegunn Choi
> Priority: Minor
> Labels: pull-request-available
> Fix For: 4.0.0-alpha-1, 3.1.0, 3.0.1
>
>
> h2. Problem
> {{ensure-jars-have-correct-contents.sh}} has enforced nothing since
> HBASE-29226. That change needed to allow the unrelocated servlet API that
> jetty 12 on ee8 requires, but wrote the allowance as a plain assignment
> wrapped in a group with an empty alternative:
> {code:java}
> # Required by jetty 12 on ee8
> allowed_expr="(|^javax/$)"
> {code}
> Two defects in one line.
> - The assignment discards every rule accumulated above it.
> - The empty alternative makes grep abort with {{{}empty (sub)expression{}}},
> and the {{|| true}} on that grep swallows the failure, so {{bad_contents}}
> comes back empty and the script reports the artifact as correct.
> h2. Fix
> {code:java}
> -allowed_expr="(|^javax/$)"
> +allowed_expr+="|^javax/$|^javax/servlet/"
> {code}
> Restoring the operator alone is not enough. The empty alternative survives,
> grep still aborts, and the script still reports everything as correct.
> Reviving the check then exposes 139 {{javax/servlet}} entries in
> {{{}hbase-shaded-mapreduce{}}}, which jetty 12 on ee8 requires unrelocated.
> {{^javax/$}} matches only the bare directory entry, so the original line
> would not have covered them even with the right operator. The servlet package
> is allowed explicitly.
> h2. Test
> h3. Before fix
> {code:java}
> SCRIPT=hbase-shaded/hbase-shaded-check-invariants/src/test/resources/ensure-jars-have-correct-contents.sh
> bash $SCRIPT
> hbase-shaded/hbase-shaded-client/target/hbase-shaded-client-4.0.0-alpha-1-SNAPSHOT.jar
> # grep: empty (sub)expression
> # [INFO] Artifact looks correct:
> 'hbase-shaded-client-4.0.0-alpha-1-SNAPSHOT.jar'
> bash $SCRIPT --allow-hadoop
> hbase-shaded/hbase-shaded-client/target/hbase-shaded-client-4.0.0-alpha-1-SNAPSHOT.jar
> # grep: empty (sub)expression
> # [INFO] Artifact looks correct:
> 'hbase-shaded-client-4.0.0-alpha-1-SNAPSHOT.jar'
> bash $SCRIPT
> hbase-shaded/hbase-shaded-mapreduce/target/hbase-shaded-mapreduce-4.0.0-alpha-1-SNAPSHOT.jar
> # grep: empty (sub)expression
> # [INFO] Artifact looks correct:
> 'hbase-shaded-mapreduce-4.0.0-alpha-1-SNAPSHOT.jar'
> bash $SCRIPT --allow-hadoop
> hbase-shaded/hbase-shaded-mapreduce/target/hbase-shaded-mapreduce-4.0.0-alpha-1-SNAPSHOT.jar
> # grep: empty (sub)expression
> # [INFO] Artifact looks correct:
> 'hbase-shaded-mapreduce-4.0.0-alpha-1-SNAPSHOT.jar'
> {code}
> h3. After fix
> {code:java}
> SCRIPT=hbase-shaded/hbase-shaded-check-invariants/src/test/resources/ensure-jars-have-correct-contents.sh
> bash $SCRIPT
> hbase-shaded/hbase-shaded-client/target/hbase-shaded-client-4.0.0-alpha-1-SNAPSHOT.jar
> # [ERROR] Found artifact with unexpected contents:
> 'hbase-shaded/hbase-shaded-client/target/hbase-shaded-client-4.0.0-alpha-1-SNAPSHOT.jar'
> # Please check the following and either correct the build or update
> # the allowed list with reasoning.
> #
> # org/apache/hadoop/security/
> # org/apache/hadoop/security/authentication/
> # org/apache/hadoop/security/authentication/server/
> #
> org/apache/hadoop/security/authentication/server/MultiSchemeAuthenticationHandler.class
> #
> org/apache/hadoop/security/authentication/server/AuthenticationFilter.class
> #
> org/apache/hadoop/security/authentication/server/KerberosAuthenticationHandler.class
> # ....
> bash $SCRIPT --allow-hadoop
> hbase-shaded/hbase-shaded-client/target/hbase-shaded-client-4.0.0-alpha-1-SNAPSHOT.jar
> # [INFO] Artifact looks correct:
> 'hbase-shaded-client-4.0.0-alpha-1-SNAPSHOT.jar'
> bash $SCRIPT
> hbase-shaded/hbase-shaded-mapreduce/target/hbase-shaded-mapreduce-4.0.0-alpha-1-SNAPSHOT.jar
> # [INFO] Artifact looks correct:
> 'hbase-shaded-mapreduce-4.0.0-alpha-1-SNAPSHOT.jar'
> bash $SCRIPT --allow-hadoop
> hbase-shaded/hbase-shaded-mapreduce/target/hbase-shaded-mapreduce-4.0.0-alpha-1-SNAPSHOT.jar
> # [INFO] Artifact looks correct:
> 'hbase-shaded-mapreduce-4.0.0-alpha-1-SNAPSHOT.jar'
> {code}
> h2. Notes
> Whether {{hbase-shaded-mapreduce}} should ship the servlet API unrelocated at
> all is a separate question. This issue restores the check and records the
> content that is already shipping as allowed.
> Affects master and branch-3. branch-2 never carried HBASE-29226.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)