diff --git a/hadoop-yarn-project/CHANGES.txt b/hadoop-yarn-project/CHANGES.txt index 9bb96d1cc6e..10b2a932737 100644 --- a/hadoop-yarn-project/CHANGES.txt +++ b/hadoop-yarn-project/CHANGES.txt @@ -71,6 +71,9 @@ Release 2.7.1 - UNRELEASED YARN-3554. Default value for maximum nodemanager connect wait time is too high (Naganarasimha G R via jlowe) + YARN-3476. Nodemanager can fail to delete local logs if log aggregation + fails (Rohith via jlowe) + Release 2.7.0 - 2015-04-20 INCOMPATIBLE CHANGES diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/logaggregation/AppLogAggregatorImpl.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/logaggregation/AppLogAggregatorImpl.java index ff70a681047..e3d0819da10 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/logaggregation/AppLogAggregatorImpl.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/logaggregation/AppLogAggregatorImpl.java @@ -385,6 +385,11 @@ public class AppLogAggregatorImpl implements AppLogAggregator { public void run() { try { doAppLogAggregation(); + } catch (Exception e) { + // do post clean up of log directories on any exception + LOG.error("Error occured while aggregating the log for the application " + + appId, e); + doAppLogAggregationPostCleanUp(); } finally { if (!this.appAggregationFinished.get()) { LOG.warn("Aggregation did not complete for application " + appId); @@ -422,6 +427,15 @@ public class AppLogAggregatorImpl implements AppLogAggregator { // App is finished, upload the container logs. uploadLogsForContainers(true); + doAppLogAggregationPostCleanUp(); + + this.dispatcher.getEventHandler().handle( + new ApplicationEvent(this.appId, + ApplicationEventType.APPLICATION_LOG_HANDLING_FINISHED)); + this.appAggregationFinished.set(true); + } + + private void doAppLogAggregationPostCleanUp() { // Remove the local app-log-dirs List localAppLogDirs = new ArrayList(); for (String rootLogDir : dirsHandler.getLogDirsForCleanup()) { @@ -442,11 +456,6 @@ public class AppLogAggregatorImpl implements AppLogAggregator { this.delService.delete(this.userUgi.getShortUserName(), null, localAppLogDirs.toArray(new Path[localAppLogDirs.size()])); } - - this.dispatcher.getEventHandler().handle( - new ApplicationEvent(this.appId, - ApplicationEventType.APPLICATION_LOG_HANDLING_FINISHED)); - this.appAggregationFinished.set(true); } private Path getRemoteNodeTmpLogFileForApp() {