Github user tillrohrmann commented on a diff in the pull request:
https://github.com/apache/flink/pull/5675#discussion_r174834515
--- Diff:
flink-yarn/src/main/java/org/apache/flink/yarn/YarnResourceManager.java ---
@@ -325,67 +328,74 @@ public float getProgress() {
@Override
public void onContainersCompleted(List<ContainerStatus> list) {
- for (ContainerStatus container : list) {
- if (container.getExitStatus() < 0) {
- closeTaskManagerConnection(new ResourceID(
- container.getContainerId().toString()),
new Exception(container.getDiagnostics()));
+ runAsync(() -> {
+ for (ContainerStatus container : list) {
+ if (container.getExitStatus() < 0) {
+ closeTaskManagerConnection(new
ResourceID(
+
container.getContainerId().toString()), new
Exception(container.getDiagnostics()));
+ }
+ workerNodeMap.remove(new
ResourceID(container.getContainerId().toString()));
+ }
}
- workerNodeMap.remove(new
ResourceID(container.getContainerId().toString()));
- }
+ );
}
@Override
public void onContainersAllocated(List<Container> containers) {
- for (Container container : containers) {
- log.info(
- "Received new container: {} - Remaining pending
container requests: {}",
- container.getId(),
- numPendingContainerRequests);
-
- if (numPendingContainerRequests > 0) {
- numPendingContainerRequests--;
-
- final String containerIdStr =
container.getId().toString();
-
- workerNodeMap.put(new
ResourceID(containerIdStr), new YarnWorkerNode(container));
-
- try {
- // Context information used to start a
TaskExecutor Java process
- ContainerLaunchContext
taskExecutorLaunchContext = createTaskExecutorLaunchContext(
- container.getResource(),
- containerIdStr,
-
container.getNodeId().getHost());
-
-
nodeManagerClient.startContainer(container, taskExecutorLaunchContext);
- } catch (Throwable t) {
- log.error("Could not start TaskManager
in container {}.", container.getId(), t);
-
- // release the failed container
+ runAsync(() -> {
+ for (Container container : containers) {
+ log.info(
+ "Received new container: {} - Remaining
pending container requests: {}",
+ container.getId(),
+ numPendingContainerRequests);
+
+ if (numPendingContainerRequests > 0) {
+ numPendingContainerRequests--;
+
+ final String containerIdStr =
container.getId().toString();
+
+ workerNodeMap.put(new
ResourceID(containerIdStr), new YarnWorkerNode(container));
+
+ try {
+ // Context information used to
start a TaskExecutor Java process
+ ContainerLaunchContext
taskExecutorLaunchContext = createTaskExecutorLaunchContext(
+ container.getResource(),
+ containerIdStr,
+
container.getNodeId().getHost());
+
+
nodeManagerClient.startContainer(container, taskExecutorLaunchContext);
+ } catch (Throwable t) {
+ log.error("Could not start
TaskManager in container {}.", container.getId(), t);
+
+ // release the failed container
+
resourceManagerClient.releaseAssignedContainer(container.getId());
+ // and ask for a new one
+
requestYarnContainer(container.getResource(), container.getPriority());
+ }
+ } else {
+ // return the excessive containers
+ log.info("Returning excess container
{}.", container.getId());
resourceManagerClient.releaseAssignedContainer(container.getId());
- // and ask for a new one
-
requestYarnContainer(container.getResource(), container.getPriority());
}
- } else {
- // return the excessive containers
- log.info("Returning excess container {}.",
container.getId());
-
resourceManagerClient.releaseAssignedContainer(container.getId());
}
- }
- // if we are waiting for no further containers, we can go to the
- // regular heartbeat interval
- if (numPendingContainerRequests <= 0) {
-
resourceManagerClient.setHeartbeatInterval(yarnHeartbeatIntervalMillis);
- }
+ // if we are waiting for no further containers, we can
go to the
+ // regular heartbeat interval
+ if (numPendingContainerRequests <= 0) {
+
resourceManagerClient.setHeartbeatInterval(yarnHeartbeatIntervalMillis);
+ }
+ });
}
@Override
public void onShutdownRequest() {
- try {
- shutDown();
- } catch (Exception e) {
- log.warn("Fail to shutdown the YARN resource manager.",
e);
- }
+ runAsync(() -> {
+ try {
+ shutDown();
--- End diff --
`shutDown` can be directly called
---