You are viewing a plain text version of this content. The canonical link for it is here.
Posted to yarn-issues@hadoop.apache.org by "Hadoop QA (JIRA)" <ji...@apache.org> on 2014/12/21 14:49:13 UTC

[jira] [Commented] (YARN-2983) NPE possible in ClientRMService#getQueueInfo

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

Hadoop QA commented on YARN-2983:
---------------------------------

{color:red}-1 overall{color}.  Here are the results of testing the latest attachment 
  http://issues.apache.org/jira/secure/attachment/12688574/YARN-2983.patch
  against trunk revision 8f5522e.

    {color:green}+1 @author{color}.  The patch does not contain any @author tags.

    {color:red}-1 tests included{color}.  The patch doesn't appear to include any new or modified tests.
                        Please justify why no new tests are needed for this patch.
                        Also please list what manual steps were performed to verify this patch.

    {color:green}+1 javac{color}.  The applied patch does not increase the total number of javac compiler warnings.

    {color:green}+1 javadoc{color}.  There were no new javadoc warning messages.

    {color:green}+1 eclipse:eclipse{color}.  The patch built with eclipse:eclipse.

    {color:red}-1 findbugs{color}.  The patch appears to introduce 15 new Findbugs (version 2.0.3) warnings.

    {color:green}+1 release audit{color}.  The applied patch does not increase the total number of release audit warnings.

    {color:green}+1 core tests{color}.  The patch passed unit tests in hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager.

Test results: https://builds.apache.org/job/PreCommit-YARN-Build/6163//testReport/
Findbugs warnings: https://builds.apache.org/job/PreCommit-YARN-Build/6163//artifact/patchprocess/newPatchFindbugsWarningshadoop-yarn-server-resourcemanager.html
Console output: https://builds.apache.org/job/PreCommit-YARN-Build/6163//console

This message is automatically generated.

> NPE possible in ClientRMService#getQueueInfo
> --------------------------------------------
>
>                 Key: YARN-2983
>                 URL: https://issues.apache.org/jira/browse/YARN-2983
>             Project: Hadoop YARN
>          Issue Type: Bug
>          Components: resourcemanager
>    Affects Versions: 2.5.1
>            Reporter: Varun Saxena
>            Assignee: Varun Saxena
>         Attachments: YARN-2983.patch
>
>
> While going through code for checking YARN-2978 , found one issue. 
> During construction of {{GetQueueInfoResponse}} in {{ClientRMService#getQueueInfo}}, we first collect application attempts from scheduler and then get apps from a {{ConcurrentHashMap}} in {{RMContext}}. Although the operation(get/put/remove,etc) itself on a ConcurrentHashMap is thread-safe, but a series of multiple {{ConcurrentHashMap#get}} (say, in a for loop) are not. 
> For instance, in code below, we are calling rmContext.getRMApps()#get in a loop. Now a ConcurrentHashMap#get can return null if the key doesnt exist. But there is no null check inside this for loop before dereferencing the value returned i.e. rmApp. Although all the applicationattempts  have been fetched for the queue just above the for loop, but as this block of code is not synchronized, there is a possibility that another thread may delete RMApp from the ConcurrentHashMap at the same time. This can happen when an app finishes/completes and number of completed apps exceed the config  {{yarn.resourcemanager.max-completed-applications}}.
> I think there should be a null check inside this for loop, otherwise a NPE can occur.
> {code:title=ClientRMService#getQueueInfo}
> public GetQueueInfoResponse getQueueInfo(GetQueueInfoRequest request)
>       throws YarnException {
>   .....
>   if (request.getIncludeApplications()) {
>     List<ApplicationAttemptId> apps =
>     scheduler.getAppsInQueue(request.getQueueName());
>     appReports = new ArrayList<ApplicationReport>(apps.size());
>     for (ApplicationAttemptId app : apps) {
>       RMApp rmApp = rmContext.getRMApps().get(app.getApplicationId());
>       appReports.add(rmApp.createAndGetApplicationReport(null, true));
>     }
>   }
>   ......
> }
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)