[ 
https://issues.apache.org/jira/browse/HADOOP-19971?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18134029#comment-18134029
 ] 

ASF GitHub Bot commented on HADOOP-19971:
-----------------------------------------

joseluisll commented on PR #8703:
URL: https://github.com/apache/hadoop/pull/8703#issuecomment-6490374289

   Thanks @pjfanning. I left the `jetty-util` declaration in 
hadoop-yarn-services-api as it is.




> Remove servlet and Jetty types from classes that do not need them
> -----------------------------------------------------------------
>
>                 Key: HADOOP-19971
>                 URL: https://issues.apache.org/jira/browse/HADOOP-19971
>             Project: Hadoop Common
>          Issue Type: Sub-task
>          Components: auth, common
>            Reporter: Jose Luis López
>            Assignee: Jose Luis López
>            Priority: Minor
>              Labels: pull-request-available
>
> h3. Why
> Hadoop will eventually move from the javax.servlet namespace to 
> jakarta.servlet. When it does, every class that mentions a servlet type has 
> to be revisited, and every class that mentions a Jetty type has to be 
> revisited again when the Jetty API changes underneath it.
> Several of those classes have no real connection to either. A component that 
> generates signing secrets was handed the web server's context even though it 
> only wanted somewhere to store an object. A certificate parser reported a bad 
> certificate as a web server error. A Netty-based shuffle handler borrowed two 
> header names from Jetty, and the YARN services client borrowed Jetty's URL 
> encoder.
> This change removes those references, so those classes drop out of the later 
> migration entirely.
> h3. What changes for anyone using Hadoop
> Nothing is removed, no signature changes shape, and no dependency, version or 
> setting changes. Code built against today's release keeps compiling and 
> running without being rebuilt.
> * Two entry points get a servlet-free alternative. The old ones stay, marked 
> deprecated, until the namespace change:
> ** {{SignerSecretProvider.init(Properties, ServletContext, long)}} -> 
> {{initialize(Properties, SecretProviderContext, long)}}
> ** {{CertificateUtil.parseRSAPublicKey(String)}} -> {{toRSAPublicKey(String)}}
> * Providers that override {{init}} are still called directly. A provider that 
> extends Hadoop's rolling secret provider and calls {{super.init}} still gets 
> its rollover scheduler started. {{TestSignerSecretProviderCompatibility}} 
> pins this contract.
> * Exceptions are unchanged: same type, message and cause chain from 
> {{parseRSAPublicKey}} and from {{JWTRedirectAuthenticationHandler}} when the 
> PEM is corrupt.
> * The shuffle response is unchanged, byte for byte: the same {{Connection}} 
> and {{Keep-Alive}} header names, capitalised as before.
> * The YARN services client now encodes {{user.name}} with 
> {{java.net.URLEncoder}}. That differs from Jetty's encoder for two characters 
> only: {{*}} is now sent as is where it used to be escaped, and {{~}} is now 
> escaped where it used to be sent as is. Every code point decodes to the same 
> value either way (checked across all of Unicode against Jetty 9.4.58), so the 
> server reads the same user name.
> Things a downstream project could notice:
> * Deprecation warnings where code overrides {{init}} or calls 
> {{parseRSAPublicKey}}.
> * {{getDeclaredMethod("init", ...)}} on the shipped providers now throws 
> {{NoSuchMethodException}}, because they declare {{initialize}} instead. 
> {{getMethod}} still finds {{init}}.
> * {{ZKSignerSecretProvider}} given a null ServletContext used to throw a 
> NullPointerException. It now keeps its ZooKeeper client in a store private to 
> itself and logs a WARN. Every caller in Hadoop passes a real context, and 
> there the client is still stored as the ServletContext attribute of the same 
> name.
> h3. What changes inside
> || || before || after ||
> | modules using Jetty in main sources | 12 | 11 |
> | main-source files using Jetty | 26 | 24 |
> | hadoop-auth main classes naming a servlet | 14 | 11 |
> Counted on trunk at a7c2bea723d.
> The MapReduce shuffle module no longer uses Jetty at all. In hadoop-auth, the 
> secret providers and the authentication token no longer mention the servlet 
> API. They are initialised against a small two-method store, 
> {{SecretProviderContext}}, which holds whatever needs sharing; that is all 
> the one provider that used the servlet context ever did with it. One new 
> package-private class mentions the servlet API, and it exists only to keep 
> the old path working.
> h3. What this does not do
> No namespace change, no Jetty upgrade, no Jersey change, no EE environments. 
> The tree stays on Jetty 9.4, Jersey 2 and javax.servlet.
> The authentication handler classes still mention the servlet API, 
> deliberately. They are the extension point that HBase, Hive, Spark, Ozone and 
> Knox build against, and changing it is exactly the kind of break this issue 
> is meant to avoid. That belongs with the namespace change, where downstream 
> projects will expect it.
> h3. Ordering
> This is preparation for the jakarta move. It depends on nothing, is based on 
> trunk, and nothing in HADOOP-19972 depends on it. The plan is to land it with 
> or just before the namespace change in HADOOP-19395, in the next major 
> release.
> When rebasing onto a later trunk:
> * If HADOOP-19970 has landed, it declares jetty-http in the shuffle module's 
> pom only because of the import this change removes. Drop that declaration 
> here.
> * If HADOOP-19972 has landed, re-check the shuffle headers and the 
> {{user.name}} encoding against whatever Jetty classes it left in those two 
> places.
> 16 files changed. Works on Jetty 9.4 and on the Jetty 12 ee8 environment of 
> HADOOP-19912, and commits the namespace change in HADOOP-19395 to neither 
> ee10 nor ee11.
> Contains content generated by Claude.



--
This message was sent by Atlassian Jira
(v10.3.26#10030026)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to