YARN-3123. Made YARN CLI show a single completed container even if the app is running. Contributed by Naganarasimha G R.
This commit is contained in:
parent
5f4ef2d13f
commit
30510cff75
@ -242,6 +242,9 @@ Release 2.7.0 - UNRELEASED
|
|||||||
YARN-1723. AMRMClientAsync missing blacklist addition and removal
|
YARN-1723. AMRMClientAsync missing blacklist addition and removal
|
||||||
functionality. (Bartosz Ługowski via sseth)
|
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
|
OPTIMIZATIONS
|
||||||
|
|
||||||
BUG FIXES
|
BUG FIXES
|
||||||
|
@ -100,6 +100,7 @@
|
|||||||
import org.apache.hadoop.yarn.conf.YarnConfiguration;
|
import org.apache.hadoop.yarn.conf.YarnConfiguration;
|
||||||
import org.apache.hadoop.yarn.exceptions.ApplicationIdNotProvidedException;
|
import org.apache.hadoop.yarn.exceptions.ApplicationIdNotProvidedException;
|
||||||
import org.apache.hadoop.yarn.exceptions.ApplicationNotFoundException;
|
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.YarnException;
|
||||||
import org.apache.hadoop.yarn.exceptions.YarnRuntimeException;
|
import org.apache.hadoop.yarn.exceptions.YarnRuntimeException;
|
||||||
import org.apache.hadoop.yarn.security.AMRMTokenIdentifier;
|
import org.apache.hadoop.yarn.security.AMRMTokenIdentifier;
|
||||||
@ -638,7 +639,8 @@ public ContainerReport getContainerReport(ContainerId containerId)
|
|||||||
}
|
}
|
||||||
// Even if history-service is enabled, treat all exceptions still the same
|
// Even if history-service is enabled, treat all exceptions still the same
|
||||||
// except the following
|
// except the following
|
||||||
if (e.getClass() != ApplicationNotFoundException.class) {
|
if (e.getClass() != ApplicationNotFoundException.class
|
||||||
|
&& e.getClass() != ContainerNotFoundException.class) {
|
||||||
throw e;
|
throw e;
|
||||||
}
|
}
|
||||||
return historyClient.getContainerReport(containerId);
|
return historyClient.getContainerReport(containerId);
|
||||||
|
@ -35,6 +35,7 @@
|
|||||||
import java.util.EnumSet;
|
import java.util.EnumSet;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
@ -97,6 +98,8 @@
|
|||||||
import org.apache.hadoop.yarn.client.api.YarnClientApplication;
|
import org.apache.hadoop.yarn.client.api.YarnClientApplication;
|
||||||
import org.apache.hadoop.yarn.conf.YarnConfiguration;
|
import org.apache.hadoop.yarn.conf.YarnConfiguration;
|
||||||
import org.apache.hadoop.yarn.exceptions.ApplicationIdNotProvidedException;
|
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.YarnException;
|
||||||
import org.apache.hadoop.yarn.security.client.TimelineDelegationTokenIdentifier;
|
import org.apache.hadoop.yarn.security.client.TimelineDelegationTokenIdentifier;
|
||||||
import org.apache.hadoop.yarn.server.MiniYARNCluster;
|
import org.apache.hadoop.yarn.server.MiniYARNCluster;
|
||||||
@ -372,6 +375,8 @@ public void testGetContainers() throws YarnException, IOException {
|
|||||||
@Test(timeout = 10000)
|
@Test(timeout = 10000)
|
||||||
public void testGetContainerReport() throws YarnException, IOException {
|
public void testGetContainerReport() throws YarnException, IOException {
|
||||||
Configuration conf = new Configuration();
|
Configuration conf = new Configuration();
|
||||||
|
conf.setBoolean(YarnConfiguration.APPLICATION_HISTORY_ENABLED,
|
||||||
|
true);
|
||||||
final YarnClient client = new MockYarnClient();
|
final YarnClient client = new MockYarnClient();
|
||||||
client.init(conf);
|
client.init(conf);
|
||||||
client.start();
|
client.start();
|
||||||
@ -388,6 +393,12 @@ public void testGetContainerReport() throws YarnException, IOException {
|
|||||||
Assert.assertEquals(report.getContainerId().toString(),
|
Assert.assertEquals(report.getContainerId().toString(),
|
||||||
(ContainerId.newContainerId(expectedReports.get(0)
|
(ContainerId.newContainerId(expectedReports.get(0)
|
||||||
.getCurrentApplicationAttemptId(), 1)).toString());
|
.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();
|
client.stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -642,8 +653,23 @@ private List<ContainerReport> getContainersFromAHS(
|
|||||||
@Override
|
@Override
|
||||||
public ContainerReport getContainerReport(ContainerId containerId)
|
public ContainerReport getContainerReport(ContainerId containerId)
|
||||||
throws YarnException, IOException {
|
throws YarnException, IOException {
|
||||||
when(mockContainerResponse.getContainerReport()).thenReturn(
|
try {
|
||||||
getContainer(containerId));
|
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);
|
return super.getContainerReport(containerId);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -661,8 +687,25 @@ public List<ContainerReport> getContainersReport(
|
|||||||
return containers.get(appAttemptId);
|
return containers.get(appAttemptId);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ContainerReport getContainer(ContainerId containerId) {
|
private ContainerReport getContainer(
|
||||||
return containers.get(containerId.getApplicationAttemptId()).get(0);
|
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 ");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user