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

Reply via email to