diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/logaggregation/LogAggregationService.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/logaggregation/LogAggregationService.java index 38315fd..29c2622 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/logaggregation/LogAggregationService.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/logaggregation/LogAggregationService.java @@ -108,6 +108,7 @@ private final ConcurrentMap appLogAggregators; private boolean logPermError = true; + private boolean remoteLogDirError = false; @VisibleForTesting ExecutorService threadPool; @@ -173,6 +174,12 @@ protected void serviceStart() throws Exception { // anywhere else. this.nodeId = this.context.getNodeId(); super.serviceStart(); + try { + verifyAndCreateRemoteLogDir(getConfig()); + } catch (YarnRuntimeException e) { + LOG.warn("failed to create remote log directory", e); + remoteLogDirError = true; + } } @Override @@ -376,7 +383,10 @@ private void initApp(final ApplicationId appId, String user, long recoveredLogInitedTime) { ApplicationEvent eventResponse; try { - verifyAndCreateRemoteLogDir(getConfig()); + if (remoteLogDirError) { + verifyAndCreateRemoteLogDir(getConfig()); + remoteLogDirError = false; + } initAppAggregator(appId, user, credentials, appAcls, logAggregationContext, recoveredLogInitedTime); eventResponse = new ApplicationEvent(appId, @@ -548,6 +558,10 @@ public NodeId getNodeId() { return this.nodeId; } + @VisibleForTesting + public boolean getRemoteLogDirError() { + return this.remoteLogDirError; + } private int getAggregatorThreadPoolSize(Configuration conf) { int threadPoolSize; diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/logaggregation/TestLogAggregationService.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/logaggregation/TestLogAggregationService.java index bc1b4b0..88e1ea4 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/logaggregation/TestLogAggregationService.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/logaggregation/TestLogAggregationService.java @@ -554,7 +554,8 @@ public void testVerifyAndCreateRemoteDirsFailure() any(Configuration.class)); logAggregationService.start(); - + Assert.assertTrue(logAggregationService.getRemoteLogDirError()); + // Now try to start an application ApplicationId appId = BuilderUtils.newApplicationId(System.currentTimeMillis(), @@ -598,7 +599,8 @@ public void testVerifyAndCreateRemoteDirsFailure() }; checkEvents(appEventHandler, expectedEvents, false, "getType", "getApplicationID", "getDiagnostic"); - + Assert.assertFalse(logAggregationService.getRemoteLogDirError()); + logAggregationService.stop(); }