Uploaded image for project: 'Hadoop YARN'
  1. Hadoop YARN
  2. YARN-2983

NPE possible in ClientRMService#getQueueInfo

    XMLWordPrintableJSON

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: 2.5.1
    • Fix Version/s: 2.7.0
    • Component/s: resourcemanager
    • Labels:
      None
    • Target Version/s:

      Description

      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.

      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));
          }
        }
        ......
      }
      

        Attachments

        1. YARN-2983.patch
          1 kB
          Varun Saxena

          Issue Links

            Activity

              People

              • Assignee:
                varun_saxena Varun Saxena
                Reporter:
                varun_saxena Varun Saxena
              • Votes:
                0 Vote for this issue
                Watchers:
                6 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: