Repository: hadoop Updated Branches: refs/heads/branch-2.6.1 bfc0a19d6 -> 2f0a34b5b
YARN-2905. AggregatedLogsBlock page can infinitely loop if the aggregated log file is corrupted. Contributed by Varun Saxena (cherry picked from commit 0f9528b99addbb0fd9a19d84db22a8c8e934b05f) (cherry picked from commit 38ea1419f60d2b8176dba4931748f1f0e52ca84e) (cherry picked from commit 3877166754956bf66a8b1c81440dba2d279a1e03) Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/2f0a34b5 Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/2f0a34b5 Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/2f0a34b5 Branch: refs/heads/branch-2.6.1 Commit: 2f0a34b5ba654687c4df576cfebda3d38f29f0ca Parents: bfc0a19 Author: Jason Lowe <[email protected]> Authored: Mon Dec 1 22:29:05 2014 +0000 Committer: Vinod Kumar Vavilapalli <[email protected]> Committed: Thu Aug 27 19:27:24 2015 -0700 ---------------------------------------------------------------------- hadoop-yarn-project/CHANGES.txt | 3 +++ .../hadoop/yarn/logaggregation/AggregatedLogFormat.java | 4 ++++ .../hadoop/yarn/webapp/log/AggregatedLogsBlock.java | 10 ++++++++-- 3 files changed, 15 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hadoop/blob/2f0a34b5/hadoop-yarn-project/CHANGES.txt ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/CHANGES.txt b/hadoop-yarn-project/CHANGES.txt index 382383d..388bc1f 100644 --- a/hadoop-yarn-project/CHANGES.txt +++ b/hadoop-yarn-project/CHANGES.txt @@ -27,6 +27,9 @@ Release 2.6.1 - UNRELEASED YARN-2906. CapacitySchedulerPage shows HTML tags for a queue's Active Users. (Jason Lowe via jianhe) + YARN-2905. AggregatedLogsBlock page can infinitely loop if the aggregated + log file is corrupted (Varun Saxena via jlowe) + Release 2.6.0 - 2014-11-18 INCOMPATIBLE CHANGES http://git-wip-us.apache.org/repos/asf/hadoop/blob/2f0a34b5/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/logaggregation/AggregatedLogFormat.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/logaggregation/AggregatedLogFormat.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/logaggregation/AggregatedLogFormat.java index a434ef5..7eebcb3 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/logaggregation/AggregatedLogFormat.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/logaggregation/AggregatedLogFormat.java @@ -801,6 +801,10 @@ public class AggregatedLogFormat { return currentLogData.skip(n); } + public int read() throws IOException { + return currentLogData.read(); + } + public int read(byte[] buf, int off, int len) throws IOException { return currentLogData.read(buf, off, len); } http://git-wip-us.apache.org/repos/asf/hadoop/blob/2f0a34b5/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/webapp/log/AggregatedLogsBlock.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/webapp/log/AggregatedLogsBlock.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/webapp/log/AggregatedLogsBlock.java index 3e9f7a2..620d097 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/webapp/log/AggregatedLogsBlock.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/webapp/log/AggregatedLogsBlock.java @@ -231,8 +231,14 @@ public class AggregatedLogsBlock extends HtmlBlock { long totalSkipped = 0; while (totalSkipped < start) { long ret = logReader.skip(start - totalSkipped); - if (ret < 0) { - throw new IOException( "Premature EOF from container log"); + if (ret == 0) { + //Read one byte + int nextByte = logReader.read(); + // Check if we have reached EOF + if (nextByte == -1) { + throw new IOException( "Premature EOF from container log"); + } + ret = 1; } totalSkipped += ret; }
