From 56ef5279c1db93d03b2f1e04badbfe804f548918 Mon Sep 17 00:00:00 2001 From: Arun Suresh Date: Mon, 18 Sep 2017 15:49:31 -0700 Subject: [PATCH] YARN-7203. Add container ExecutionType into ContainerReport. (Botong Huang via asuresh) --- .../yarn/api/records/ContainerReport.java | 26 +++++++++++++++++++ .../src/main/proto/yarn_protos.proto | 1 + .../yarn/client/api/impl/TestYarnClient.java | 1 + .../impl/pb/ContainerReportPBImpl.java | 20 ++++++++++++++ .../rmcontainer/RMContainerImpl.java | 2 +- 5 files changed, 49 insertions(+), 1 deletion(-) diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/ContainerReport.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/ContainerReport.java index 11d7bca6803..31d28129781 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/ContainerReport.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/ContainerReport.java @@ -52,6 +52,18 @@ public abstract class ContainerReport { long creationTime, long finishTime, String diagnosticInfo, String logUrl, int containerExitStatus, ContainerState containerState, String nodeHttpAddress) { + return newInstance(containerId, allocatedResource, assignedNode, priority, + creationTime, finishTime, diagnosticInfo, logUrl, containerExitStatus, + containerState, nodeHttpAddress, ExecutionType.GUARANTEED); + } + + @Private + @Unstable + public static ContainerReport newInstance(ContainerId containerId, + Resource allocatedResource, NodeId assignedNode, Priority priority, + long creationTime, long finishTime, String diagnosticInfo, String logUrl, + int containerExitStatus, ContainerState containerState, + String nodeHttpAddress, ExecutionType executionType) { ContainerReport report = Records.newRecord(ContainerReport.class); report.setContainerId(containerId); report.setAllocatedResource(allocatedResource); @@ -64,6 +76,7 @@ public abstract class ContainerReport { report.setContainerExitStatus(containerExitStatus); report.setContainerState(containerState); report.setNodeHttpAddress(nodeHttpAddress); + report.setExecutionType(executionType); return report; } @@ -209,4 +222,17 @@ public abstract class ContainerReport { @Private @Unstable public abstract void setNodeHttpAddress(String nodeHttpAddress); + + /** + * Get the execution type of the container. + * + * @return the execution type of the container + */ + @Public + @Unstable + public abstract ExecutionType getExecutionType(); + + @Private + @Unstable + public abstract void setExecutionType(ExecutionType executionType); } diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/proto/yarn_protos.proto b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/proto/yarn_protos.proto index 066441cc3b7..fb340d15fdb 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/proto/yarn_protos.proto +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/proto/yarn_protos.proto @@ -137,6 +137,7 @@ message ContainerReportProto { optional int32 container_exit_status = 9; optional ContainerStateProto container_state = 10; optional string node_http_address = 11; + optional ExecutionTypeProto executionType = 12 [default = GUARANTEED]; } enum YarnApplicationStateProto { 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 cd0e4728421..4e5d8cd187d 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 @@ -601,6 +601,7 @@ public class TestYarnClient { Assert.assertEquals(report.getContainerId().toString(), (ContainerId.newContainerId(expectedReports.get(0) .getCurrentApplicationAttemptId(), 3)).toString()); + Assert.assertNotNull(report.getExecutionType()); client.stop(); } diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/ContainerReportPBImpl.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/ContainerReportPBImpl.java index 5d435da9827..2b58c707c7b 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/ContainerReportPBImpl.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/ContainerReportPBImpl.java @@ -21,6 +21,7 @@ package org.apache.hadoop.yarn.api.records.impl.pb; import org.apache.hadoop.yarn.api.records.ContainerId; import org.apache.hadoop.yarn.api.records.ContainerReport; import org.apache.hadoop.yarn.api.records.ContainerState; +import org.apache.hadoop.yarn.api.records.ExecutionType; import org.apache.hadoop.yarn.api.records.NodeId; import org.apache.hadoop.yarn.api.records.Priority; import org.apache.hadoop.yarn.api.records.Resource; @@ -355,4 +356,23 @@ public class ContainerReportPBImpl extends ContainerReport { } builder.setNodeHttpAddress(nodeHttpAddress); } + + @Override + public ExecutionType getExecutionType() { + ContainerReportProtoOrBuilder p = viaProto ? proto : builder; + if (!p.hasExecutionType()) { + return ExecutionType.GUARANTEED; // default value + } + return ProtoUtils.convertFromProtoFormat(p.getExecutionType()); + } + + @Override + public void setExecutionType(ExecutionType executionType) { + maybeInitBuilder(); + if (executionType == null) { + builder.clearExecutionType(); + return; + } + builder.setExecutionType(ProtoUtils.convertToProtoFormat(executionType)); + } } diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmcontainer/RMContainerImpl.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmcontainer/RMContainerImpl.java index 8c165ded8b3..a43459cfbb5 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmcontainer/RMContainerImpl.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmcontainer/RMContainerImpl.java @@ -756,7 +756,7 @@ public class RMContainerImpl implements RMContainer { this.getAllocatedSchedulerKey().getPriority(), this.getCreationTime(), this.getFinishTime(), this.getDiagnosticsInfo(), this.getLogURL(), this.getContainerExitStatus(), this.getContainerState(), - this.getNodeHttpAddress()); + this.getNodeHttpAddress(), this.getExecutionType()); } finally { this.readLock.unlock(); }