[ 
https://issues.apache.org/jira/browse/HADOOP-19999?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Jose Luis López updated HADOOP-19999:
-------------------------------------
    Summary: Upgrade Guice from 5.1.0 to 6.0.0, which accepts both javax.inject 
and jakarta.inject  (was: Upgrade Guice 5.1.0 → 6.x)

> Upgrade Guice from 5.1.0 to 6.0.0, which accepts both javax.inject and 
> jakarta.inject
> -------------------------------------------------------------------------------------
>
>                 Key: HADOOP-19999
>                 URL: https://issues.apache.org/jira/browse/HADOOP-19999
>             Project: Hadoop Common
>          Issue Type: Sub-task
>            Reporter: Jose Luis López
>            Priority: Minor
>
> Sub-task of HADOOP-19912 (preparation on trunk; no namespace change).
> h3. Why
> Guice is the dependency-injection framework behind the YARN and MapReduce web 
> applications. Hadoop uses {{guice}} and {{guice-servlet}} 5.1.0.
> Guice 7 is jakarta-only: {{guice}} 7 depends on {{jakarta.inject}} alone, and 
> {{guice-servlet}} 7 on {{jakarta.servlet}}. Guice 6 sits in between:
> * {{guice}} 6.0.0 depends on both {{javax.inject}} and 
> {{jakarta.inject-api}}, and honours both sets of annotations;
> * {{guice-servlet}} 6.0.0 still uses {{javax.servlet}}, so it keeps working 
> on Jetty 12 ee8.
> Moving to Guice 6 now changes no namespace and should need no code change. 
> When HADOOP-19395 switches to jakarta, Guice then only needs a version bump 
> to 7 alongside the {{javax.inject}} → {{jakarta.inject}} imports, instead of 
> a major upgrade on top of the namespace change.
> h3. Where Guice is used
> * The YARN web framework: {{WebApp}} extends {{ServletModule}}, and 
> {{WebApps}} installs {{GuiceFilter}} in {{HttpServer2}}.
> * The web apps built on it, in 14 modules: ResourceManager, NodeManager, 
> ApplicationHistoryService, timeline service, Router, GlobalPolicyGenerator, 
> SharedCacheManager, yarn-server-common, yarn-common, the MapReduce AM and 
> JobHistoryServer, yarn-services-api, MaWo and resourceestimator.
> * About 104 main source files import {{com.google.inject}} or 
> {{javax.inject}}.
> * The main imports: {{com.google.inject.Inject}} 75, {{Injector}} 24, 
> {{javax.inject.Singleton}} 24, {{javax.inject.Inject}} 15, 
> {{com.google.inject.servlet.RequestScoped}} 7, {{javax.inject.Named}} 5.
> h3. Change
> * Set {{guice.version}} in {{hadoop-project}} from 5.1.0 to 6.0.0; it covers 
> both {{guice}} and {{guice-servlet}}.
> * {{guice}} 6 adds {{jakarta.inject:jakarta.inject-api}} as a transitive 
> dependency. Add it to LICENSE-binary, and check the shaded clients: 
> {{hadoop-client-minicluster}} bundles Guice, so its relocations and the 
> duplicate-class checks must accept the new {{jakarta.inject}} classes.
> * Keep the existing {{javax.inject}} dependency and imports. Converting them 
> belongs to the switch in HADOOP-19395.
> h3. Testing
> * The web service and web app tests of the modules above, among them 
> {{TestRMWebServices*}}, {{TestNMWebServices*}}, {{TestAHSWebServices}}, 
> {{TestAMWebServices*}}, {{TestHsWebServices*}} and the Router web tests.
> * The shaded client build with its {{BanDuplicateClasses}} and jar-content 
> checks, and {{ITUseMiniCluster}}.
> * A quick check on a running cluster: the RM, NM and JobHistoryServer UIs and 
> REST endpoints.
> h3. Out of scope
> * Guice 7, {{jakarta.inject}} imports and {{jakarta.servlet}}: HADOOP-19395.
> * Replacing {{com.google.inject.Inject}} with the standard annotations.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

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

Reply via email to