YARN-3476. Nodemanager can fail to delete local logs if log aggregation fails. Contributed by Rohith
(cherry picked from commit 25e2b02122
)
This commit is contained in:
parent
f57b1bfbdd
commit
a75f4bed6e
|
@ -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
|
||||
|
|
|
@ -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<Path> localAppLogDirs = new ArrayList<Path>();
|
||||
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() {
|
||||
|
|
Loading…
Reference in New Issue