diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/ContainerReport.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/ContainerReport.java new file mode 100644 index 0000000..4e31c18 --- /dev/null +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/ContainerReport.java @@ -0,0 +1,185 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.hadoop.yarn.api.records; + +import org.apache.hadoop.classification.InterfaceAudience.Private; +import org.apache.hadoop.classification.InterfaceAudience.Public; +import org.apache.hadoop.classification.InterfaceStability.Unstable; +import org.apache.hadoop.yarn.util.Records; + +/** + *
+ * ContainerReport is a report of an container.
+ *
+ * It includes details such as: + *
ContainerId of the container.
+ *
+ * @return ContainerId of the container.
+ */
+ @Public
+ @Unstable
+ public abstract ContainerId getContainerId();
+
+ @Public
+ @Unstable
+ public abstract void setContainerId(ContainerId containerId);
+
+ /**
+ * Get the allocated Resource of the container.
+ *
+ * @return allocated Resource of the container.
+ */
+ @Public
+ @Unstable
+ public abstract Resource getAllocatedResource();
+
+ @Public
+ @Unstable
+ public abstract void setAllocatedResource(Resource resource);
+
+ /**
+ * Get the allocated NodeId where container is running.
+ *
+ * @return allocated NodeId where container is running.
+ */
+ @Public
+ @Unstable
+ public abstract NodeId getAssignedNode();
+
+ @Public
+ @Unstable
+ public abstract void setAssignedNode(NodeId nodeId);
+
+ /**
+ * Get the allocated Priority of the container.
+ *
+ * @return allocated Priority of the container.
+ */
+ @Public
+ @Unstable
+ public abstract Priority getPriority();
+
+ @Public
+ @Unstable
+ public abstract void setPriority(Priority priority);
+
+ /**
+ * Get the Start time of the container.
+ *
+ * @return Start time of the container
+ */
+ @Public
+ @Unstable
+ public abstract long getStartTime();
+
+ @Public
+ @Unstable
+ public abstract void setStartTime(long startTime);
+
+ /**
+ * Get the Finish time of the container.
+ *
+ * @return Finish time of the container
+ */
+ @Public
+ @Unstable
+ public abstract long getFinishTime();
+
+ @Public
+ @Unstable
+ public abstract void setFinishTime(long finishTime);
+
+ /**
+ * Get the DiagnosticsInfo of the container.
+ *
+ * @return DiagnosticsInfo of the container
+ */
+ @Public
+ @Unstable
+ public abstract String getDiagnosticsInfo();
+
+ @Public
+ @Unstable
+ public abstract void setDiagnosticsInfo(String diagnosticsInfo);
+
+ /**
+ * Get the LogURL of the container.
+ *
+ * @return LogURL of the container
+ */
+ @Public
+ @Unstable
+ public abstract String getLogURL();
+
+ @Public
+ @Unstable
+ public abstract void setLogURL(String logURL);
+
+ /**
+ * Get the final ContainerStatus of the container.
+ *
+ * @return final ContainerStatus of the container.
+ */
+ @Public
+ @Unstable
+ public abstract ContainerStatus getContainerStatus();
+
+ @Public
+ @Unstable
+ public abstract void setContainerStatus(ContainerStatus ContainerStatus);
+
+}
diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/proto/yarn_protos.proto hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/proto/yarn_protos.proto
index a27cbb7..3c0e28a 100644
--- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/proto/yarn_protos.proto
+++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/proto/yarn_protos.proto
@@ -76,6 +76,18 @@ message ContainerProto {
optional hadoop.common.TokenProto container_token = 6;
}
+message ContainerReportProto {
+ optional ContainerIdProto containerId = 1;
+ optional ResourceProto resource = 2;
+ optional NodeIdProto nodeId = 3;
+ optional PriorityProto priority = 4;
+ optional int64 startTime = 5;
+ optional int64 finishTime = 6;
+ optional string diagnosticsInfo = 7;
+ optional string logURL = 8;
+ optional ContainerStatusProto containerStatus = 9;
+}
+
enum YarnApplicationStateProto {
NEW = 1;
NEW_SAVING = 2;
diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/ContainerReportPBImpl.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/ContainerReportPBImpl.java
new file mode 100644
index 0000000..dca6245
--- /dev/null
+++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/ContainerReportPBImpl.java
@@ -0,0 +1,335 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.hadoop.yarn.api.records.impl.pb;
+
+import org.apache.hadoop.security.proto.SecurityProtos.TokenProto;
+import org.apache.hadoop.yarn.api.records.ApplicationAttemptId;
+import org.apache.hadoop.yarn.api.records.ApplicationId;
+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.ContainerStatus;
+import org.apache.hadoop.yarn.api.records.NodeId;
+import org.apache.hadoop.yarn.api.records.Priority;
+import org.apache.hadoop.yarn.api.records.Resource;
+
+import org.apache.hadoop.yarn.proto.YarnProtos.ContainerIdProto;
+import org.apache.hadoop.yarn.proto.YarnProtos.ContainerReportProto;
+import org.apache.hadoop.yarn.proto.YarnProtos.ContainerReportProtoOrBuilder;
+import org.apache.hadoop.yarn.proto.YarnProtos.NodeIdProto;
+import org.apache.hadoop.yarn.proto.YarnProtos.PriorityProto;
+import org.apache.hadoop.yarn.proto.YarnProtos.ResourceProto;
+import org.apache.hadoop.yarn.proto.YarnProtos.ContainerStatusProto;
+
+public class ContainerReportPBImpl extends ContainerReport {
+
+ ContainerReportProto proto = ContainerReportProto.getDefaultInstance();
+ ContainerReportProto.Builder builder = null;
+ boolean viaProto = false;
+
+ private ContainerId containerId = null;
+ private Resource resource = null;
+ private NodeId nodeId = null;
+ private Priority priority = null;
+ private ContainerStatus containerStatus = null;
+
+ public ContainerReportPBImpl() {
+ builder = ContainerReportProto.newBuilder();
+ }
+
+ public ContainerReportPBImpl(ContainerReportProto proto) {
+ this.proto = proto;
+ viaProto = true;
+ }
+
+ @Override
+ public Resource getAllocatedResource() {
+ ContainerReportProtoOrBuilder p = viaProto ? proto : builder;
+ if (this != null) {
+ return this.resource;
+ }
+ if (!p.hasResource()) {
+ return null;
+ }
+ this.resource = convertFromProtoFormat(p.getResource());
+ return this.resource;
+ }
+
+ @Override
+ public NodeId getAssignedNode() {
+ ContainerReportProtoOrBuilder p = viaProto ? proto : builder;
+ if (this.nodeId != null) {
+ return this.nodeId;
+ }
+ if (!p.hasNodeId()) {
+ return null;
+ }
+ this.nodeId = convertFromProtoFormat(p.getNodeId());
+ return this.nodeId;
+ }
+
+ @Override
+ public ContainerId getContainerId() {
+ ContainerReportProtoOrBuilder p = viaProto ? proto : builder;
+ if (this.containerId != null) {
+ return this.containerId;
+ }
+ if (!p.hasContainerId()) {
+ return null;
+ }
+ this.containerId = convertFromProtoFormat(p.getContainerId());
+ return this.containerId;
+ }
+
+ @Override
+ public String getDiagnosticsInfo() {
+ ContainerReportProtoOrBuilder p = viaProto ? proto : builder;
+ if (!p.hasDiagnosticsInfo()) {
+ return null;
+ }
+ return (p.getDiagnosticsInfo());
+ }
+
+ @Override
+ public ContainerStatus getContainerStatus() {
+ ContainerReportProtoOrBuilder p = viaProto ? proto : builder;
+ if (this.containerStatus != null) {
+ return this.containerStatus;
+ }
+ if (!p.hasContainerStatus()) {
+ return null;
+ }
+ this.containerStatus = convertFromProtoFormat(p.getContainerStatus());
+ return this.containerStatus;
+ }
+
+ @Override
+ public long getFinishTime() {
+ ContainerReportProtoOrBuilder p = viaProto ? proto : builder;
+ return p.getFinishTime();
+ }
+
+ @Override
+ public String getLogURL() {
+ ContainerReportProtoOrBuilder p = viaProto ? proto : builder;
+ if (!p.hasLogURL()) {
+ return null;
+ }
+ return (p.getLogURL());
+ }
+
+ @Override
+ public Priority getPriority() {
+ ContainerReportProtoOrBuilder p = viaProto ? proto : builder;
+ if (this.priority != null) {
+ return this.priority;
+ }
+ if (!p.hasPriority()) {
+ return null;
+ }
+ this.priority = convertFromProtoFormat(p.getPriority());
+ return this.priority;
+ }
+
+ @Override
+ public long getStartTime() {
+ ContainerReportProtoOrBuilder p = viaProto ? proto : builder;
+ return p.getStartTime();
+ }
+
+ @Override
+ public void setAllocatedResource(Resource resource) {
+ maybeInitBuilder();
+ if (resource == null)
+ builder.clearResource();
+ this.resource = resource;
+ }
+
+ @Override
+ public void setAssignedNode(NodeId nodeId) {
+ maybeInitBuilder();
+ if (nodeId == null)
+ builder.clearNodeId();
+ this.nodeId = nodeId;
+ }
+
+ @Override
+ public void setContainerId(ContainerId containerId) {
+ maybeInitBuilder();
+ if (containerId == null)
+ builder.clearContainerId();
+ this.containerId = containerId;
+ }
+
+ @Override
+ public void setDiagnosticsInfo(String diagnosticsInfo) {
+ maybeInitBuilder();
+ if (diagnosticsInfo == null) {
+ builder.clearDiagnosticsInfo();
+ return;
+ }
+ builder.setDiagnosticsInfo(diagnosticsInfo);
+ }
+
+ @Override
+ public void setContainerStatus(ContainerStatus containerStatus) {
+ maybeInitBuilder();
+ if (containerStatus == null) {
+ builder.clearContainerStatus();
+ }
+ this.containerStatus = containerStatus;
+ }
+
+ @Override
+ public void setFinishTime(long finishTime) {
+ maybeInitBuilder();
+ builder.setFinishTime(finishTime);
+ }
+
+ @Override
+ public void setLogURL(String logURL) {
+ maybeInitBuilder();
+ if (logURL == null) {
+ builder.clearLogURL();
+ return;
+ }
+ builder.setLogURL(logURL);
+ }
+
+ @Override
+ public void setPriority(Priority priority) {
+ maybeInitBuilder();
+ if (priority == null) {
+ builder.clearPriority();
+ }
+ this.priority = priority;
+ }
+
+ @Override
+ public void setStartTime(long startTime) {
+ maybeInitBuilder();
+ builder.setStartTime(startTime);
+ }
+
+ public ContainerReportProto getProto() {
+
+ mergeLocalToProto();
+ proto = viaProto ? proto : builder.build();
+ viaProto = true;
+ return proto;
+ }
+
+ @Override
+ public int hashCode() {
+ return this.getProto().hashCode();
+ }
+
+ @Override
+ public boolean equals(Object other) {
+ if (other == null)
+ return false;
+ if (other.getClass().isAssignableFrom(this.getClass())) {
+ return this.getProto().equals(this.getClass().cast(other).getProto());
+ }
+ return false;
+ }
+
+ private void mergeLocalToBuilder() {
+ if (this.containerId != null
+ && !((ContainerIdPBImpl) containerId).getProto().equals(
+ builder.getContainerId())) {
+ builder.setContainerId(convertToProtoFormat(this.containerId));
+ }
+ if (this.nodeId != null
+ && !((NodeIdPBImpl) nodeId).getProto()
+ .equals(builder.getNodeId())) {
+ builder.setNodeId(convertToProtoFormat(this.nodeId));
+ }
+ if (this.resource != null
+ && !((ResourcePBImpl) this.resource).getProto().equals(
+ builder.getResource())) {
+ builder.setResource(convertToProtoFormat(this.resource));
+ }
+ if (this.priority != null
+ && !((PriorityPBImpl) this.priority).getProto().equals(
+ builder.getPriority())) {
+ builder.setPriority(convertToProtoFormat(this.priority));
+ }
+ if (this.containerStatus != null
+ && !((ContainerStatusPBImpl) this.containerStatus).getProto().equals(
+ builder.getContainerStatus())) {
+ builder.setContainerStatus(convertToProtoFormat(this.containerStatus));
+ }
+ }
+
+ private void mergeLocalToProto() {
+ if (viaProto)
+ maybeInitBuilder();
+ mergeLocalToBuilder();
+ proto = builder.build();
+ viaProto = true;
+ }
+
+ private void maybeInitBuilder() {
+ if (viaProto || builder == null) {
+ builder = ContainerReportProto.newBuilder(proto);
+ }
+ viaProto = false;
+ }
+
+ private ContainerIdPBImpl convertFromProtoFormat(ContainerIdProto p) {
+ return new ContainerIdPBImpl(p);
+ }
+
+ private NodeIdPBImpl convertFromProtoFormat(NodeIdProto p) {
+ return new NodeIdPBImpl(p);
+ }
+
+ private ContainerIdProto convertToProtoFormat(ContainerId t) {
+ return ((ContainerIdPBImpl) t).getProto();
+ }
+
+ private NodeIdProto convertToProtoFormat(NodeId t) {
+ return ((NodeIdPBImpl) t).getProto();
+ }
+
+ private ResourcePBImpl convertFromProtoFormat(ResourceProto p) {
+ return new ResourcePBImpl(p);
+ }
+
+ private ResourceProto convertToProtoFormat(Resource t) {
+ return ((ResourcePBImpl) t).getProto();
+ }
+
+ private PriorityPBImpl convertFromProtoFormat(PriorityProto p) {
+ return new PriorityPBImpl(p);
+ }
+
+ private PriorityProto convertToProtoFormat(Priority p) {
+ return ((PriorityPBImpl) p).getProto();
+ }
+
+ private ContainerStatusPBImpl convertFromProtoFormat(ContainerStatusProto p) {
+ return new ContainerStatusPBImpl(p);
+ }
+
+ private ContainerStatusProto convertToProtoFormat(ContainerStatus p) {
+ return ((ContainerStatusPBImpl) p).getProto();
+ }
+}