فهرست منبع

[core] Timeout issue when accessing the job history

Need to optimize getJobCounters in ThriftJobTrackerPlugin to avoid
blocking on JobTracker lock.
Zhihai Xu 11 سال پیش
والد
کامیت
e644964
1فایلهای تغییر یافته به همراه12 افزوده شده و 1 حذف شده
  1. 12 1
      desktop/libs/hadoop/java/src/main/java/org/apache/hadoop/mapred/ThriftJobTrackerPlugin.java

+ 12 - 1
desktop/libs/hadoop/java/src/main/java/org/apache/hadoop/mapred/ThriftJobTrackerPlugin.java

@@ -1093,7 +1093,18 @@ public class ThriftJobTrackerPlugin extends JobTrackerPlugin implements Configur
             try {
               jcs = assumeUserContextAndExecute(ctx, new PrivilegedExceptionAction<Counters>() {
                 public Counters run() throws java.io.IOException {
-                    return jobTracker.getJobCounters(JTThriftUtils.fromThrift(jobID));
+                    JobInProgress job = jobTracker.getJob(JTThriftUtils.fromThrift(jobID));
+                    if (job != null) {
+                        if (jobTracker.areACLsEnabled()) {
+                            UserGroupInformation ugi = UserGroupInformation.getCurrentUser();
+                            // check the job-access
+                            jobTracker.getACLsManager().checkAccess(job, ugi,
+                                    Operation.VIEW_JOB_COUNTERS);
+                        }
+                        return job.inited() ? job.getCounters() : new Counters();
+                    } else {
+                        return jobTracker.getJobCounters(JTThriftUtils.fromThrift(jobID));
+                    }
                 }
               });
             } catch (IOException e) {