浏览代码

YARN-7124. LogAggregationTFileController deletes/renames while file is open. Contributed by Jason Lowe.

(cherry picked from commit 1fcbe7cf5f2f7c609cd4158912f151848268ca9e)
Junping Du 7 年之前
父节点
当前提交
26da4045aa

+ 7 - 2
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/logaggregation/filecontroller/tfile/LogAggregationTFileController.java

@@ -96,8 +96,10 @@ public class LogAggregationTFileController
 
 
   @Override
   @Override
   public void closeWriter() {
   public void closeWriter() {
-    this.writer.close();
-    this.writer = null;
+    if (this.writer != null) {
+      this.writer.close();
+      this.writer = null;
+    }
   }
   }
 
 
   @Override
   @Override
@@ -117,6 +119,9 @@ public class LogAggregationTFileController
       record.increcleanupOldLogTimes();
       record.increcleanupOldLogTimes();
     }
     }
 
 
+    // close the writer before the file is renamed or deleted
+    closeWriter();
+
     final Path renamedPath = record.getRollingMonitorInterval() <= 0
     final Path renamedPath = record.getRollingMonitorInterval() <= 0
         ? record.getRemoteNodeLogFileForApp() : new Path(
         ? record.getRemoteNodeLogFileForApp() : new Path(
             record.getRemoteNodeLogFileForApp().getParent(),
             record.getRemoteNodeLogFileForApp().getParent(),