Преглед изворни кода

[core] Timeout issue when accessing the job history

Need to optimize getJobCounters in ThriftJobTrackerPlugin to avoid
blocking on JobTracker lock.
Zhihai Xu пре 11 година
родитељ
комит
e644964

+ 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) {