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

Hitesh Shah commented on MAPREDUCE-2863:
----------------------------------------

Browsed through the patch. The outputs look good. More consistent between the 2 
formats now. I haven't run a cluster with the patch yet - still need to try 
that. 

Thomas, a quick question on the output format. Is that only controlled by the 
incoming accept header? Is there a default to which the framework defaults to 
if the accept header is set to */*? Is there a way to control the output format 
via a query parameter?  

General comment about the info objects: 
  - does it make sense to declare most of the member variables of the *Info 
classes to be final? 
  - there are a few places where there is commented out code left around.

Comments: 

NMWebServices#getNodeApps
{code}
+      if (appInfo != null) {
+        allApps.add(appInfo);
+      }
{code}
 - Is the null check required? Likewise for other cases where an info object is 
initialized via its constructor. 

TestRMWebServices#verifyClusterInfoXML
 - remove dead code - NodeList nl = docEle.getElementsByTagName("Employee");
 - the test needs to be enhanced to match the json checks. 
   - using any converter api from xml to json or vice versa, a single content 
verification function can be used to verify both outputs as well as check 
consistency in elements across the two formats.

TestRMWebServices 
 - matching the version info - this can potentially also be done by getting the 
version from the environment by having a system property be set. See pom for 
yarn.applications.distributedshell or mapreduce-jobclient. 

RMWebServices 
 - minor comment - s/UriInfo uriinfo/UriInfo uriInfo/;
 - same comment about null checks as above. 

RMWebServices#hasAccess
 - my knowledge on hadoop security is still limited but do we need to worry 
about remoteUser or callerugi being null in a secure setup? If yes, a null 
value should make hasAccess return false in such a setup. 

RMWebServices#getUserMetricsInfo
 - remove commented out code if not needed? 

RMWebServices#getNodeInfo 
 - with reference to 'nodeId.split(":")' , you may need to confirm that all 
query params get url decoded automatically. 

RMWebServices#getNodes
 - for state, should we check for invalid value being passed in? It will work 
correctly as it will not return any objects but a question from the point of 
view of a spec as to whether we should strictly check incoming query params for 
correctness/validity? 

RMWebServices#getApps
 - check for invalid values? count=0/negative time vals/fEnd > fBegin?
 - minor optimization - s/app.getStartTime() < sBegin || app.getStartTime() > 
sEnd/app.getStartTime() >= sBegin && app.getStartTime <= sEnd/
 - remove commented out code. 
 - the user and queue name seems to be compared without case sensitivity. Is 
this correct? 
 - inconsistency in handling of secure access. getApps hides away some 
information if certain apps are not accessible whereas getApp throws an 
exception. 

DefaultSchedulerInfo
 - Could we just do this.qstate = qInfo.getQueueState().name ?  
 - should this be called FifoSchedulerInfo instead of Default? It gives an 
assumption that fifo will always be the default. 

NodeInfo

{code}
+      numContainers = report.getNumContainers();
+      usedMemory = report.getUsedResource().getMemory();
+      availableMemory = report.getAvailableResource().getMemory();
{code} 
  - Not sure why we need local scope vars to copy from report before setting 
the class's member variables. 

RM/Webapp/AppInfo 
  - some unused commented out code in ctor that could be removed. 

JobHistoryParser 
  - Not sure about legacy tools but would something like changing default val 
of errorInfo in jobhistory from "None" to "" affect things? 

(Job)HsWebServices: 
  - @Path("/ws/v1/history")
    - should this be change to be more specific to denote MR job history? 
  - secure access? This does not seem to enforce any checks. Again, just a 
question to bridge my knowledge gap. 

HsWebServices#getJobs
  - similar comments as above regd checks on invalid params, case sensitive 
comparisons

AMWebServices#getJobs
  - Inconsistent data across getJobs and getJob for secure access. 

AMWebServices#getJobTaskAttemptId 
  - This function and a couple of others return a null when data is not found 
as compared to NotFoundExceptions in other cases. Is null handled as a 404 by 
the framework similar to NotFoundException ? 

{code}
+      for (TaskAttempt attempt : attempts.values()) {
+
+        int newAttempts = 0, running = 0, successful = 0, failed = 0, killed = 
0;
{code} 
  - not sure how much of an issue this creates with the java gc but would it be 
better to declare once outside the for loop and reset on each loop? Saw this in 
a couple of other places. 





 






 





                
> Support web-services for RM & NM
> --------------------------------
>
>                 Key: MAPREDUCE-2863
>                 URL: https://issues.apache.org/jira/browse/MAPREDUCE-2863
>             Project: Hadoop Map/Reduce
>          Issue Type: Improvement
>          Components: mrv2, nodemanager, resourcemanager
>    Affects Versions: 0.23.0
>            Reporter: Arun C Murthy
>            Assignee: Thomas Graves
>            Priority: Blocker
>         Attachments: MAPREDUCE-2863.patch, MAPREDUCE-2863.patch, 
> MAPREDUCE-2863.patch, amoutput.txt, appoutput.txt, hsoutput.txt, 
> nmoutput.txt, nmoutput.txt, nmoutput.txt, rmoutput.txt, rmoutput.txt, 
> rmoutput.txt
>
>
> It will be very useful for RM and NM to support web-services to export 
> json/xml.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to