Hean-Chhinling commented on code in PR #8227:
URL: https://github.com/apache/hadoop/pull/8227#discussion_r2784193353


##########
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/webapp/jsonprovider/NMJsonProvider.java:
##########
@@ -0,0 +1,67 @@
+package org.apache.hadoop.yarn.server.nodemanager.webapp.jsonprovider;
+
+import 
org.apache.hadoop.yarn.server.nodemanager.webapp.dao.NMDeviceResourceInfo;
+import 
org.apache.hadoop.yarn.server.nodemanager.webapp.dao.gpu.NMGpuResourceInfo;
+import org.apache.hadoop.yarn.server.webapp.dao.ContainerLogsInfoes;
+import org.eclipse.persistence.jaxb.MarshallerProperties;
+import org.eclipse.persistence.jaxb.rs.MOXyJsonProvider;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.MultivaluedMap;
+import javax.ws.rs.ext.Provider;
+import javax.xml.bind.JAXBException;
+import javax.xml.bind.Marshaller;
+import javax.xml.bind.Unmarshaller;
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Type;
+
+/**
+ * MOXy JSON provider for NodeManager WebService.
+ *
+ * <p>This class configures a MOXy JSON provider for the NodeManager REST API 
endpoints.
+ * The endpoints should be able to provide two types of JSON responses:</p>
+ * <ul>
+ *   <li>
+ *     <b>Wrapped classes</b> – classes whose JSON representation includes a 
root wrapper element.
+ *   </li>
+ *   <li>
+ *     <b>Unwrapped classes</b> – classes whose JSON representation omits a 
root wrapper element.
+ *   </li>
+ * </ul>
+ *
+ * <p>This behaviour can be configured by the 
MarshallerProperties.JSON_INCLUDE_ROOT property.
+ *
+ * By default NodeManager REST API endpoints should include the root wrapper 
element in the
+ * responses, however there are some exceptions (e.g. ContainerLogsInfoes 
class) which
+ * was introduced to provide backward-compatibility with the Jersey 1 response 
format.</p>
+ */
+@Provider
+@Produces(MediaType.APPLICATION_JSON)
+@Consumes(MediaType.APPLICATION_JSON)
+public class NMJsonProvider extends MOXyJsonProvider {
+
+  private boolean isRootElementNeeded (Class<?> type) {
+    return !type.equals(ContainerLogsInfoes.class)
+        && !type.equals(NMGpuResourceInfo.class)
+        && !type.equals(NMDeviceResourceInfo.class);
+  }
+
+  @Override
+  protected void preReadFrom(Class<Object> type, Type genericType,
+                             Annotation[] annotations, MediaType mediaType,
+                             MultivaluedMap<String, String> httpHeaders,
+                             Unmarshaller unmarshaller) throws JAXBException {
+    unmarshaller.setProperty(MarshallerProperties.JSON_INCLUDE_ROOT, 
isRootElementNeeded(type));
+  }
+
+  @Override
+  protected void preWriteTo(Object object, Class<?> type, Type genericType,
+                            Annotation[] annotations, MediaType mediaType,
+                            MultivaluedMap<String, Object> httpHeaders, 
Marshaller marshaller)
+      throws JAXBException {
+    
marshaller.setProperty(MarshallerProperties.JSON_MARSHAL_EMPTY_COLLECTIONS, 
false);
+    marshaller.setProperty(MarshallerProperties.JSON_INCLUDE_ROOT, 
isRootElementNeeded(type));

Review Comment:
   True, the running logs is not available on the RM UI2 because of the 
JobHistory Server.
   
   Error when I get accessing container logs on RM UI2
   
   http://test_cluster/ws/v1/history/containers/container_17706481733 
   503 (Service Unavailable)
   
   But the JSON structure for the container logs is the same now.
   
   



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


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

Reply via email to