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

Thomas Graves commented on MAPREDUCE-2863:
------------------------------------------

Hitesh - thanks for the review!

output format is controlled by the accept header.  If not specified it 
currently defaults to xml - perhaps json would be a better default here since I 
see more people using it - preference?  There is no way to control it via query 
parameter right now - any specific reason you can't use accept header?

I'll run through the code again and remove the extra commented out code. I left 
some of the it in there because I planned on adding it back in in a followup 
jira(s) but will go ahead and remove.

In this case most of the class member variables could be made final - in 
general though most of the time the jaxb classes have both getters and setters 
and wouldn't be final.  I know its a bit quirky having the constructors due all 
the initialization but it was a convenient way to commonize that code between 
the html and ws without adding yet more classes.   I don't see it being 
necessary as there is no harm if someone did want to set one after the 
constructor but will if you prefer?  
I'm hoping we can do more commonizing of things between the html and ws but 
thought this would be a decent first step.

{quote}
NMWebServices#getNodeApps
    Is the null check required? Likewise for other cases where an info object 
is initialized via its constructor.
{quote}
No, not required just me being paranoid when I first wrote that.  Will remove 
and in other classes where isn't needed.

{quote}
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.
{quote}
Left the code there for follow up jira to add more unit tests. Will remove.
Great idea on the converter!  unless objections I would like to do that in a 
follow on jira.

{quote}
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.
{quote}
Ok will change.

{quote}
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.
{quote}
The remoteUser could be null if not going through a filter - although hadoop 
defaults to a user (Dr.Who or webuser via StaticUserWebFilter) so I don't think 
its really possible.  The only case might be if someone creates there own 
filter and somehow doesn't set it - not really sure if that is possible.  That 
code was copied directly from the html code but I see its even inconsistent 
between RM/AM so will look into this code some more.

{quote}
RMWebServices#getNodeInfo

    with reference to 'nodeId.split(":")' , you may need to confirm that all 
query params get url decoded automatically.
{quote}
Jersey handles decoded the query parameters for you. For instance if you pass 
in nodeid like: host%3A45454 - it works fine. Will make sure to add tests for 
this.  Did you have any specific examples in mind for the nodeId?  Note I also 
switched to use the ConverterUtils for this which I somehow missed the first 
time around when I looked for it.

{quote}
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.
{quote}

I don't follow the optimization of the starttime - that is a continue statement 
and hence the ||. if I switch it then it will skip it if it is what you asked 
for?

The inconsistent handling was intentional.  It mirrors the html right now.  I 
had thought about it returning subset of data in both cases - is that what you 
prefer?  In my opinion that entire thing is a bit weird how that works. Wish 
there was a better way of letting user know - any ideas?

{quote}
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.
{quote}

The difference in the qstate is the Undefined gets mapped to Unknown. I don't 
have strong preference one way or another it was again copied from html.  We 
can probably just have it print out the undefined - let me know if you want me 
to change it.
Sure, will rename it.

{quote}
JobHistoryParser

    Not sure about legacy tools but would something like changing default val 
of errorInfo in jobhistory from "None" to "" affect things?
{quote}
I didn't see it used anywhere in 20 security branch. The job history UI on that 
has "Failure Info" field but it is blank if job succeeded.  In the 20 JobStatus 
is actually sets the failureInfo to "NA" by default so I guess if your job 
failed and the failure info wasn't provided it would print NA. I figured 
showing "None" vs empty field was the same but I guess if it failed and no 
other info is available None might be more user friendly then empty field?

{quote}
(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.
{quote}
The path was intentional since there is a jira out there to make job history 
more generic and handle things other then MR.  Everything mapreduce related is 
under history/mapreduce/.  If you see better way let me know.   
The checks for security seem to be a level up in the CompletedJob and similar 
code but as stated above security in AM and history is broken and jira is filed 
for that so will handle fixing any issues with that since I have no way to test 
right now.

{quote}
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 ?
{quote}
returning null returns a - HTTP/1.1 204 No Content.  Will change it to be 
consistent with the rest.


Everything else I didn't comment on is fixed as requested. 

                
> 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