You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by zh...@apache.org on 2015/02/06 22:46:47 UTC
[15/50] [abbrv] hadoop git commit: YARN-3123. Made YARN CLI show a
single completed container even if the app is running. Contributed by
Naganarasimha G R.
YARN-3123. Made YARN CLI show a single completed container even if the app is running. Contributed by Naganarasimha G R.
Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo
Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/d31af040
Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/d31af040
Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/d31af040
Branch: refs/heads/HDFS-EC
Commit: d31af04044862581c75622ff169c93619176377c
Parents: 300a6f9
Author: Zhijie Shen <zj...@apache.org>
Authored: Wed Feb 4 16:02:52 2015 -0800
Committer: Zhe Zhang <zh...@apache.org>
Committed: Fri Feb 6 13:45:48 2015 -0800
----------------------------------------------------------------------
hadoop-yarn-project/CHANGES.txt | 3 ++
.../yarn/client/api/impl/YarnClientImpl.java | 4 +-
.../yarn/client/api/impl/TestYarnClient.java | 51 ++++++++++++++++++--
3 files changed, 53 insertions(+), 5 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hadoop/blob/d31af040/hadoop-yarn-project/CHANGES.txt
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/CHANGES.txt b/hadoop-yarn-project/CHANGES.txt
index 1d6f2b4..592ea54 100644
--- a/hadoop-yarn-project/CHANGES.txt
+++ b/hadoop-yarn-project/CHANGES.txt
@@ -242,6 +242,9 @@ Release 2.7.0 - UNRELEASED
YARN-1723. AMRMClientAsync missing blacklist addition and removal
functionality. (Bartosz Ćugowski via sseth)
+ YARN-3123. Made YARN CLI show a single completed container even if the app
+ is running. (Naganarasimha G R via zjshen)
+
OPTIMIZATIONS
BUG FIXES
http://git-wip-us.apache.org/repos/asf/hadoop/blob/d31af040/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/api/impl/YarnClientImpl.java
----------------------------------------------------------------------
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 99c0f02..975c267 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
@@ -100,6 +100,7 @@ import org.apache.hadoop.yarn.client.api.YarnClientApplication;
import org.apache.hadoop.yarn.conf.YarnConfiguration;
import org.apache.hadoop.yarn.exceptions.ApplicationIdNotProvidedException;
import org.apache.hadoop.yarn.exceptions.ApplicationNotFoundException;
+import org.apache.hadoop.yarn.exceptions.ContainerNotFoundException;
import org.apache.hadoop.yarn.exceptions.YarnException;
import org.apache.hadoop.yarn.exceptions.YarnRuntimeException;
import org.apache.hadoop.yarn.security.AMRMTokenIdentifier;
@@ -638,7 +639,8 @@ public class YarnClientImpl extends YarnClient {
}
// Even if history-service is enabled, treat all exceptions still the same
// except the following
- if (e.getClass() != ApplicationNotFoundException.class) {
+ if (e.getClass() != ApplicationNotFoundException.class
+ && e.getClass() != ContainerNotFoundException.class) {
throw e;
}
return historyClient.getContainerReport(containerId);
http://git-wip-us.apache.org/repos/asf/hadoop/blob/d31af040/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/api/impl/TestYarnClient.java
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/api/impl/TestYarnClient.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/api/impl/TestYarnClient.java
index 7859688..eb8ca48 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/api/impl/TestYarnClient.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/api/impl/TestYarnClient.java
@@ -35,6 +35,7 @@ import java.util.Collections;
import java.util.EnumSet;
import java.util.HashMap;
import java.util.HashSet;
+import java.util.Iterator;
import java.util.List;
import java.util.Set;
@@ -97,6 +98,8 @@ import org.apache.hadoop.yarn.client.api.YarnClient;
import org.apache.hadoop.yarn.client.api.YarnClientApplication;
import org.apache.hadoop.yarn.conf.YarnConfiguration;
import org.apache.hadoop.yarn.exceptions.ApplicationIdNotProvidedException;
+import org.apache.hadoop.yarn.exceptions.ApplicationNotFoundException;
+import org.apache.hadoop.yarn.exceptions.ContainerNotFoundException;
import org.apache.hadoop.yarn.exceptions.YarnException;
import org.apache.hadoop.yarn.security.client.TimelineDelegationTokenIdentifier;
import org.apache.hadoop.yarn.server.MiniYARNCluster;
@@ -372,6 +375,8 @@ public class TestYarnClient {
@Test(timeout = 10000)
public void testGetContainerReport() throws YarnException, IOException {
Configuration conf = new Configuration();
+ conf.setBoolean(YarnConfiguration.APPLICATION_HISTORY_ENABLED,
+ true);
final YarnClient client = new MockYarnClient();
client.init(conf);
client.start();
@@ -388,6 +393,12 @@ public class TestYarnClient {
Assert.assertEquals(report.getContainerId().toString(),
(ContainerId.newContainerId(expectedReports.get(0)
.getCurrentApplicationAttemptId(), 1)).toString());
+ containerId = ContainerId.newContainerId(appAttemptId, 3);
+ report = client.getContainerReport(containerId);
+ Assert.assertNotNull(report);
+ Assert.assertEquals(report.getContainerId().toString(),
+ (ContainerId.newContainerId(expectedReports.get(0)
+ .getCurrentApplicationAttemptId(), 3)).toString());
client.stop();
}
@@ -642,8 +653,23 @@ public class TestYarnClient {
@Override
public ContainerReport getContainerReport(ContainerId containerId)
throws YarnException, IOException {
- when(mockContainerResponse.getContainerReport()).thenReturn(
- getContainer(containerId));
+ try {
+ ContainerReport container = getContainer(containerId, containers);
+ when(mockContainerResponse.getContainerReport()).thenReturn(container);
+ } catch (YarnException e) {
+ when(rmClient.getContainerReport(any(GetContainerReportRequest.class)))
+ .thenThrow(e).thenReturn(mockContainerResponse);
+ }
+ try {
+ ContainerReport container =
+ getContainer(containerId, containersFromAHS);
+ when(historyClient.getContainerReport(any(ContainerId.class)))
+ .thenReturn(container);
+ } catch (YarnException e) {
+ when(historyClient.getContainerReport(any(ContainerId.class)))
+ .thenThrow(e);
+ }
+
return super.getContainerReport(containerId);
}
@@ -661,8 +687,25 @@ public class TestYarnClient {
return containers.get(appAttemptId);
}
- public ContainerReport getContainer(ContainerId containerId) {
- return containers.get(containerId.getApplicationAttemptId()).get(0);
+ private ContainerReport getContainer(
+ ContainerId containerId,
+ HashMap<ApplicationAttemptId, List<ContainerReport>> containersToAppAttemptMapping)
+ throws YarnException, IOException {
+ List<ContainerReport> containersForAppAttempt =
+ containersToAppAttemptMapping.get(containerId
+ .getApplicationAttemptId());
+ if (containersForAppAttempt == null) {
+ throw new ApplicationNotFoundException(containerId
+ .getApplicationAttemptId().getApplicationId() + " is not found ");
+ }
+ Iterator<ContainerReport> iterator = containersForAppAttempt.iterator();
+ while (iterator.hasNext()) {
+ ContainerReport next = iterator.next();
+ if (next.getContainerId().equals(containerId)) {
+ return next;
+ }
+ }
+ throw new ContainerNotFoundException(containerId + " is not found ");
}
}