diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/api/impl/YarnClientImpl.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/api/impl/YarnClientImpl.java index 2a2af8b9cca..1d920fcaa64 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/api/impl/YarnClientImpl.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/api/impl/YarnClientImpl.java @@ -362,9 +362,13 @@ private void addTimelineDelegationToken( if (timelineClient == null) { synchronized (this) { if (timelineClient == null) { - timelineClient = createTimelineClient(); - timelineClient.init(getConfig()); - timelineClient.start(); + TimelineClient tlClient = createTimelineClient(); + tlClient.init(getConfig()); + tlClient.start(); + // Assign value to timeline client variable only + // when it is fully initiated. In order to avoid + // other threads to see partially initialized object. + this.timelineClient = tlClient; } } } diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/cli/LogsCLI.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/cli/LogsCLI.java index 661a9703ba2..c5e03083f5b 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/cli/LogsCLI.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/cli/LogsCLI.java @@ -964,48 +964,38 @@ private int fetchContainerLogs(ContainerLogsRequest request, request.setNodeId(nodeId); request.setContainerState(report.getContainerState()); } catch (IOException | YarnException ex) { - if (isAppFinished) { - return printContainerLogsForFinishedApplicationWithoutNodeId( - request, logCliHelper, useRegex); + nodeHttpAddress = getNodeHttpAddressFromRMWebString(request); + if (nodeHttpAddress != null && !nodeHttpAddress.isEmpty()) { + request.setNodeHttpAddress(nodeHttpAddress); } else { - nodeHttpAddress = getNodeHttpAddressFromRMWebString(request); - if (nodeHttpAddress != null && !nodeHttpAddress.isEmpty()) { - request.setNodeHttpAddress(nodeHttpAddress); + // for the case, we have already uploaded partial logs in HDFS + int result = -1; + if (nodeAddress != null && !nodeAddress.isEmpty()) { + result = printAggregatedContainerLogs(request, + logCliHelper, useRegex); } else { - // for the case, we have already uploaded partial logs in HDFS - int result = -1; - if (nodeAddress != null && !nodeAddress.isEmpty()) { - result = printAggregatedContainerLogs( - request, logCliHelper, useRegex); - } else { - result = printAggregatedContainerLogsWithoutNodeId( - request, logCliHelper, useRegex); - } - if (result == -1) { - System.err.println("Unable to get logs for this container:" - + containerIdStr + " for the application:" + appIdStr - + " with the appOwner: " + appOwner); - System.err.println("The application: " + appIdStr - + " is still running, and we can not get Container report " - + "for the container: " + containerIdStr +". Please try later " - + "or after the application finishes."); - } - return result; + result = printAggregatedContainerLogsWithoutNodeId(request, + logCliHelper, + useRegex); } + if (result == -1) { + System.err.println( + "Unable to get logs for this container:" + + containerIdStr + " for the application:" + + appIdStr + " with the appOwner: " + appOwner); + System.err.println("The application: " + appIdStr + + " is still running, and we can not get Container report " + + "for the container: " + containerIdStr + ". Please try later " + + "or after the application finishes."); + } + return result; } } // If the application is not in the final state, // we will provide the NodeHttpAddress and get the container logs // by calling NodeManager webservice. - if (!isAppFinished) { - resultCode = printContainerLogsFromRunningApplication(getConf(), request, - logCliHelper, useRegex); - } else { - // If the application is in the final state, we will directly - // get the container logs from HDFS. - resultCode = printContainerLogsForFinishedApplication( - request, logCliHelper, useRegex); - } + resultCode = printContainerLogsFromRunningApplication(getConf(), request, + logCliHelper, useRegex); return resultCode; }