Junegunn Choi created HBASE-30338:
-------------------------------------

             Summary: 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
            Reporter: Junegunn Choi


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)

Reply via email to