You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by br...@apache.org on 2021/02/18 08:59:32 UTC
[hadoop] branch branch-3.3 updated: YARN-10361. Make custom DAO
classes configurable into RMWebApp#JAXBContextResolver.
This is an automated email from the ASF dual-hosted git repository.
brahma pushed a commit to branch branch-3.3
in repository https://gitbox.apache.org/repos/asf/hadoop.git
The following commit(s) were added to refs/heads/branch-3.3 by this push:
new 72904c0 YARN-10361. Make custom DAO classes configurable into RMWebApp#JAXBContextResolver.
72904c0 is described below
commit 72904c014d9139322d8f2920fe7747fb45242e0b
Author: Prabhu Joseph <pr...@apache.org>
AuthorDate: Wed Aug 5 20:51:04 2020 +0530
YARN-10361. Make custom DAO classes configurable into RMWebApp#JAXBContextResolver.
Contributed by Bilwa ST.
(cherry picked from commit c7e71a6c0beb2748988b339a851a129b5e57f8c4)
---
.../apache/hadoop/yarn/conf/YarnConfiguration.java | 8 ++-
.../src/main/resources/yarn-default.xml | 18 ++++++-
.../webapp/JAXBContextResolver.java | 58 ++++++++++++++++++++--
3 files changed, 78 insertions(+), 6 deletions(-)
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/conf/YarnConfiguration.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/conf/YarnConfiguration.java
index b725222..14aa00a 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/conf/YarnConfiguration.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/conf/YarnConfiguration.java
@@ -2454,7 +2454,13 @@ public class YarnConfiguration extends Configuration {
"yarn.http.rmwebapp.external.classes";
public static final String YARN_HTTP_WEBAPP_SCHEDULER_PAGE =
- "hadoop.http.rmwebapp.scheduler.page.class";
+ "yarn.http.rmwebapp.scheduler.page.class";
+
+ public static final String YARN_HTTP_WEBAPP_CUSTOM_DAO_CLASSES =
+ "yarn.http.rmwebapp.custom.dao.classes";
+
+ public static final String YARN_HTTP_WEBAPP_CUSTOM_UNWRAPPED_DAO_CLASSES =
+ "yarn.http.rmwebapp.custom.unwrapped.dao.classes";
/**
* Whether or not users are allowed to request that Docker containers honor
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/resources/yarn-default.xml b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/resources/yarn-default.xml
index 4c0aca9..8f0de6b 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/resources/yarn-default.xml
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/resources/yarn-default.xml
@@ -3444,10 +3444,26 @@
<description>
Used to specify custom scheduler page
</description>
- <name>hadoop.http.rmwebapp.scheduler.page.class</name>
+ <name>yarn.http.rmwebapp.scheduler.page.class</name>
<value></value>
</property>
+ <property>
+ <description>
+ Used to specify custom DAO classes used by custom web services.
+ </description>
+ <name>yarn.http.rmwebapp.custom.dao.classes</name>
+ <value></value>
+ </property>
+
+ <property>
+ <description>
+ Used to specify custom DAO classes used by custom web services which requires
+ root unwrapping.
+ </description>
+ <name>yarn.http.rmwebapp.custom.unwrapped.dao.classes</name>
+ <value></value>
+ </property>
<property>
<description>The Node Label script to run. Script output Line starting with
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/JAXBContextResolver.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/JAXBContextResolver.java
index f6eb2ad..a31434b 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/JAXBContextResolver.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/JAXBContextResolver.java
@@ -18,6 +18,7 @@
package org.apache.hadoop.yarn.server.resourcemanager.webapp;
+import com.google.inject.Inject;
import com.google.inject.Singleton;
import com.sun.jersey.api.json.JSONConfiguration;
import com.sun.jersey.api.json.JSONJAXBContext;
@@ -28,6 +29,10 @@ import javax.ws.rs.ext.ContextResolver;
import javax.ws.rs.ext.Provider;
import javax.xml.bind.JAXBContext;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.yarn.conf.YarnConfiguration;
import org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.UserInfo;
import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.*;
import org.apache.hadoop.yarn.webapp.RemoteExceptionData;
@@ -36,9 +41,17 @@ import org.apache.hadoop.yarn.webapp.RemoteExceptionData;
@Provider
public class JAXBContextResolver implements ContextResolver<JAXBContext> {
+ private static final Log LOG =
+ LogFactory.getLog(JAXBContextResolver.class.getName());
+
private final Map<Class, JAXBContext> typesContextMap;
public JAXBContextResolver() throws Exception {
+ this(new Configuration());
+ }
+
+ @Inject
+ public JAXBContextResolver(Configuration conf) throws Exception {
JAXBContext context;
JAXBContext unWrappedRootContext;
@@ -65,17 +78,54 @@ public class JAXBContextResolver implements ContextResolver<JAXBContext> {
DelegationToken.class, AppQueue.class, AppPriority.class,
ResourceOptionInfo.class };
+ ArrayList<Class> finalcTypesList = new ArrayList<>();
+ ArrayList<Class> finalRootUnwrappedTypesList = new ArrayList<>();
+
+ Collections.addAll(finalcTypesList, cTypes);
+ Collections.addAll(finalRootUnwrappedTypesList, rootUnwrappedTypes);
+
+ // Add Custom DAO Classes
+ Class[] daoClasses = null;
+ Class[] unwrappedDaoClasses = null;
+ boolean loadCustom = true;
+ try {
+ daoClasses = conf
+ .getClasses(YarnConfiguration.YARN_HTTP_WEBAPP_CUSTOM_DAO_CLASSES);
+ unwrappedDaoClasses = conf.getClasses(
+ YarnConfiguration.YARN_HTTP_WEBAPP_CUSTOM_UNWRAPPED_DAO_CLASSES);
+ } catch (Exception e) {
+ LOG.warn("Failed to load custom dao class: " + e);
+ loadCustom = false;
+ }
+
+ if (loadCustom) {
+ if (daoClasses != null) {
+ Collections.addAll(finalcTypesList, daoClasses);
+ LOG.debug("Added custom dao classes: " + Arrays.toString(daoClasses));
+ }
+ if (unwrappedDaoClasses != null) {
+ Collections.addAll(finalRootUnwrappedTypesList, unwrappedDaoClasses);
+ LOG.debug("Added custom Unwrapped dao classes: "
+ + Arrays.toString(unwrappedDaoClasses));
+ }
+ }
+
+ final Class[] finalcTypes = finalcTypesList
+ .toArray(new Class[finalcTypesList.size()]);
+ final Class[] finalRootUnwrappedTypes = finalRootUnwrappedTypesList
+ .toArray(new Class[finalRootUnwrappedTypesList.size()]);
+
this.typesContextMap = new HashMap<Class, JAXBContext>();
context =
new JSONJAXBContext(JSONConfiguration.natural().rootUnwrapping(false)
- .build(), cTypes);
+ .build(), finalcTypes);
unWrappedRootContext =
new JSONJAXBContext(JSONConfiguration.natural().rootUnwrapping(true)
- .build(), rootUnwrappedTypes);
- for (Class type : cTypes) {
+ .build(), finalRootUnwrappedTypes);
+ for (Class type : finalcTypes) {
typesContextMap.put(type, context);
}
- for (Class type : rootUnwrappedTypes) {
+ for (Class type : finalRootUnwrappedTypes) {
typesContextMap.put(type, unWrappedRootContext);
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: common-commits-unsubscribe@hadoop.apache.org
For additional commands, e-mail: common-commits-help@hadoop.apache.org