You are viewing a plain text version of this content. The canonical link for it is here.
Posted to mapreduce-commits@hadoop.apache.org by vi...@apache.org on 2011/09/09 11:51:56 UTC
svn commit: r1167063 - in
/hadoop/common/branches/branch-0.23/hadoop-mapreduce-project: ./
hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/
hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/impl/p...
Author: vinodkv
Date: Fri Sep 9 09:51:55 2011
New Revision: 1167063
URL: http://svn.apache.org/viewvc?rev=1167063&view=rev
Log:
MAPREDUCE-2954. svn merge -c r1167061 --ignore-ancestry ../../trunk/
Added:
hadoop/common/branches/branch-0.23/hadoop-mapreduce-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/api/
- copied from r1167061, hadoop/common/trunk/hadoop-mapreduce-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/api/
hadoop/common/branches/branch-0.23/hadoop-mapreduce-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/api/TestApplicationAttemptId.java
- copied unchanged from r1167061, hadoop/common/trunk/hadoop-mapreduce-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/api/TestApplicationAttemptId.java
hadoop/common/branches/branch-0.23/hadoop-mapreduce-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/api/TestApplicationId.java
- copied unchanged from r1167061, hadoop/common/trunk/hadoop-mapreduce-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/api/TestApplicationId.java
hadoop/common/branches/branch-0.23/hadoop-mapreduce-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/api/TestContainerId.java
- copied unchanged from r1167061, hadoop/common/trunk/hadoop-mapreduce-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/api/TestContainerId.java
Modified:
hadoop/common/branches/branch-0.23/hadoop-mapreduce-project/CHANGES.txt
hadoop/common/branches/branch-0.23/hadoop-mapreduce-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/ApplicationAttemptId.java
hadoop/common/branches/branch-0.23/hadoop-mapreduce-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/ApplicationId.java
hadoop/common/branches/branch-0.23/hadoop-mapreduce-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/ContainerId.java
hadoop/common/branches/branch-0.23/hadoop-mapreduce-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/ApplicationAttemptIdPBImpl.java
hadoop/common/branches/branch-0.23/hadoop-mapreduce-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/ApplicationIdPBImpl.java
hadoop/common/branches/branch-0.23/hadoop-mapreduce-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/ContainerIdPBImpl.java
Modified: hadoop/common/branches/branch-0.23/hadoop-mapreduce-project/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-0.23/hadoop-mapreduce-project/CHANGES.txt?rev=1167063&r1=1167062&r2=1167063&view=diff
==============================================================================
--- hadoop/common/branches/branch-0.23/hadoop-mapreduce-project/CHANGES.txt (original)
+++ hadoop/common/branches/branch-0.23/hadoop-mapreduce-project/CHANGES.txt Fri Sep 9 09:51:55 2011
@@ -1243,6 +1243,9 @@ Release 0.23.0 - Unreleased
MAPREDUCE-2963. Fix hang in TestMRJobs. (Siddharth Seth via acmurthy)
+ MAPREDUCE-2954. Fixed a deadlock in NM caused due to wrong synchronization
+ in protocol buffer records. (Siddharth Seth via vinodkv)
+
Release 0.22.0 - Unreleased
INCOMPATIBLE CHANGES
Modified: hadoop/common/branches/branch-0.23/hadoop-mapreduce-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/ApplicationAttemptId.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-0.23/hadoop-mapreduce-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/ApplicationAttemptId.java?rev=1167063&r1=1167062&r2=1167063&view=diff
==============================================================================
--- hadoop/common/branches/branch-0.23/hadoop-mapreduce-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/ApplicationAttemptId.java (original)
+++ hadoop/common/branches/branch-0.23/hadoop-mapreduce-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/ApplicationAttemptId.java Fri Sep 9 09:51:55 2011
@@ -18,11 +18,73 @@
package org.apache.hadoop.yarn.api.records;
-public interface ApplicationAttemptId extends Comparable<ApplicationAttemptId>{
+import java.text.NumberFormat;
+
+public abstract class ApplicationAttemptId implements
+ Comparable<ApplicationAttemptId> {
public abstract ApplicationId getApplicationId();
public abstract int getAttemptId();
public abstract void setApplicationId(ApplicationId appID);
public abstract void setAttemptId(int attemptId);
+
+
+
+ protected static final NumberFormat idFormat = NumberFormat.getInstance();
+ static {
+ idFormat.setGroupingUsed(false);
+ idFormat.setMinimumIntegerDigits(4);
+ }
+
+ protected static final NumberFormat counterFormat = NumberFormat
+ .getInstance();
+ static {
+ counterFormat.setGroupingUsed(false);
+ counterFormat.setMinimumIntegerDigits(6);
+ }
+
+ @Override
+ public int hashCode() {
+ // Generated by eclipse.
+ final int prime = 31;
+ int result = 1;
+ ApplicationId appId = getApplicationId();
+ result = prime * result + ((appId == null) ? 0 : appId.hashCode());
+ result = prime * result + getAttemptId();
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object other) {
+ if (other == null)
+ return false;
+ if (other.getClass().isAssignableFrom(this.getClass())) {
+ ApplicationAttemptId otherAttemptId = (ApplicationAttemptId) other;
+ if (this.getApplicationId().equals(otherAttemptId.getApplicationId())) {
+ return this.getAttemptId() == otherAttemptId.getAttemptId();
+ }
+ }
+ return false;
+ }
+
+ @Override
+ public int compareTo(ApplicationAttemptId other) {
+ int compareAppIds = this.getApplicationId().compareTo(
+ other.getApplicationId());
+ if (compareAppIds == 0) {
+ return this.getAttemptId() - other.getAttemptId();
+ } else {
+ return compareAppIds;
+ }
+ }
+ @Override
+ public String toString() {
+ String id =
+ (this.getApplicationId() != null) ? this.getApplicationId()
+ .getClusterTimestamp()
+ + "_"
+ + idFormat.format(this.getApplicationId().getId()) : "none";
+ return "appattempt_" + id + "_" + counterFormat.format(getAttemptId());
+ }
}
Modified: hadoop/common/branches/branch-0.23/hadoop-mapreduce-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/ApplicationId.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-0.23/hadoop-mapreduce-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/ApplicationId.java?rev=1167063&r1=1167062&r2=1167063&view=diff
==============================================================================
--- hadoop/common/branches/branch-0.23/hadoop-mapreduce-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/ApplicationId.java (original)
+++ hadoop/common/branches/branch-0.23/hadoop-mapreduce-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/ApplicationId.java Fri Sep 9 09:51:55 2011
@@ -18,13 +18,51 @@
package org.apache.hadoop.yarn.api.records;
-
-
-public interface ApplicationId extends Comparable<ApplicationId> {
+public abstract class ApplicationId implements Comparable<ApplicationId> {
public abstract int getId();
public abstract long getClusterTimestamp();
public abstract void setId(int id);
public abstract void setClusterTimestamp(long clusterTimestamp);
+
+ @Override
+ public int compareTo(ApplicationId other) {
+ if (this.getClusterTimestamp() - other.getClusterTimestamp() == 0) {
+ return this.getId() - other.getId();
+ } else {
+ return this.getClusterTimestamp() > other.getClusterTimestamp() ? 1 :
+ this.getClusterTimestamp() < other.getClusterTimestamp() ? -1 : 0;
+ }
+ }
+
+ @Override
+ public String toString() {
+ return "application_" + this.getClusterTimestamp() + "_" + this.getId();
+ }
+
+ @Override
+ public int hashCode() {
+ // Generated by eclipse.
+ final int prime = 31;
+ int result = 1;
+ long clusterTimestamp = getClusterTimestamp();
+ result = prime * result
+ + (int) (clusterTimestamp ^ (clusterTimestamp >>> 32));
+ result = prime * result + getId();
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object other) {
+ if (other == null) return false;
+ if (other.getClass().isAssignableFrom(this.getClass())) {
+ ApplicationId otherAppId = (ApplicationId)other;
+ if (this.getClusterTimestamp() == otherAppId.getClusterTimestamp() &&
+ this.getId() == otherAppId.getId()) {
+ return true;
+ }
+ }
+ return false;
+ }
}
Modified: hadoop/common/branches/branch-0.23/hadoop-mapreduce-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/ContainerId.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-0.23/hadoop-mapreduce-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/ContainerId.java?rev=1167063&r1=1167062&r2=1167063&view=diff
==============================================================================
--- hadoop/common/branches/branch-0.23/hadoop-mapreduce-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/ContainerId.java (original)
+++ hadoop/common/branches/branch-0.23/hadoop-mapreduce-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/ContainerId.java Fri Sep 9 09:51:55 2011
@@ -18,7 +18,9 @@
package org.apache.hadoop.yarn.api.records;
-public interface ContainerId extends Comparable<ContainerId>{
+import java.text.NumberFormat;
+
+public abstract class ContainerId implements Comparable<ContainerId>{
public abstract ApplicationAttemptId getAppAttemptId();
public abstract ApplicationId getAppId();
public abstract int getId();
@@ -26,5 +28,89 @@ public interface ContainerId extends Com
public abstract void setAppAttemptId(ApplicationAttemptId atId);
public abstract void setAppId(ApplicationId appID);
public abstract void setId(int id);
+
+
+ // TODO: Why thread local?
+ // ^ NumberFormat instances are not threadsafe
+ private static final ThreadLocal<NumberFormat> appIdFormat =
+ new ThreadLocal<NumberFormat>() {
+ @Override
+ public NumberFormat initialValue() {
+ NumberFormat fmt = NumberFormat.getInstance();
+ fmt.setGroupingUsed(false);
+ fmt.setMinimumIntegerDigits(4);
+ return fmt;
+ }
+ };
+
+ // TODO: fail the app submission if attempts are more than 10 or something
+ private static final ThreadLocal<NumberFormat> appAttemptIdFormat =
+ new ThreadLocal<NumberFormat>() {
+ @Override
+ public NumberFormat initialValue() {
+ NumberFormat fmt = NumberFormat.getInstance();
+ fmt.setGroupingUsed(false);
+ fmt.setMinimumIntegerDigits(2);
+ return fmt;
+ }
+ };
+ // TODO: Why thread local?
+ // ^ NumberFormat instances are not threadsafe
+ private static final ThreadLocal<NumberFormat> containerIdFormat =
+ new ThreadLocal<NumberFormat>() {
+ @Override
+ public NumberFormat initialValue() {
+ NumberFormat fmt = NumberFormat.getInstance();
+ fmt.setGroupingUsed(false);
+ fmt.setMinimumIntegerDigits(6);
+ return fmt;
+ }
+ };
+
+ @Override
+ public int hashCode() {
+ // Generated by eclipse.
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + getId();
+ result = prime * result
+ + ((getAppAttemptId() == null) ? 0 : getAppAttemptId().hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object other) {
+ if (other == null) {
+ return false;
+ }
+ if (other.getClass().isAssignableFrom(this.getClass())) {
+ ContainerId otherCId = (ContainerId)other;
+ if (this.getAppAttemptId().equals(otherCId.getAppAttemptId())) {
+ return this.getId() == otherCId.getId();
+ }
+ }
+ return false;
+ }
+
+ @Override
+ public int compareTo(ContainerId other) {
+ if (this.getAppAttemptId().compareTo(other.getAppAttemptId()) == 0) {
+ return this.getId() - other.getId();
+ } else {
+ return this.getAppAttemptId().compareTo(other.getAppAttemptId());
+ }
+
+ }
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ ApplicationId appId = getAppId();
+ sb.append("container_").append(appId.getClusterTimestamp()).append("_");
+ sb.append(appIdFormat.get().format(appId.getId())).append("_");
+ sb.append(appAttemptIdFormat.get().format(getAppAttemptId().
+ getAttemptId())).append("_");
+ sb.append(containerIdFormat.get().format(getId()));
+ return sb.toString();
+ }
}
Modified: hadoop/common/branches/branch-0.23/hadoop-mapreduce-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/ApplicationAttemptIdPBImpl.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-0.23/hadoop-mapreduce-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/ApplicationAttemptIdPBImpl.java?rev=1167063&r1=1167062&r2=1167063&view=diff
==============================================================================
--- hadoop/common/branches/branch-0.23/hadoop-mapreduce-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/ApplicationAttemptIdPBImpl.java (original)
+++ hadoop/common/branches/branch-0.23/hadoop-mapreduce-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/ApplicationAttemptIdPBImpl.java Fri Sep 9 09:51:55 2011
@@ -18,35 +18,19 @@
package org.apache.hadoop.yarn.api.records.impl.pb;
-
-import java.text.NumberFormat;
-
import org.apache.hadoop.yarn.api.records.ApplicationAttemptId;
import org.apache.hadoop.yarn.api.records.ApplicationId;
-import org.apache.hadoop.yarn.api.records.ProtoBase;
import org.apache.hadoop.yarn.proto.YarnProtos.ApplicationAttemptIdProto;
import org.apache.hadoop.yarn.proto.YarnProtos.ApplicationAttemptIdProtoOrBuilder;
import org.apache.hadoop.yarn.proto.YarnProtos.ApplicationIdProto;
-public class ApplicationAttemptIdPBImpl extends ProtoBase<ApplicationAttemptIdProto> implements ApplicationAttemptId {
+public class ApplicationAttemptIdPBImpl extends ApplicationAttemptId {
ApplicationAttemptIdProto proto = ApplicationAttemptIdProto.getDefaultInstance();
ApplicationAttemptIdProto.Builder builder = null;
boolean viaProto = false;
private ApplicationId applicationId = null;
- protected static final NumberFormat idFormat = NumberFormat.getInstance();
- static {
- idFormat.setGroupingUsed(false);
- idFormat.setMinimumIntegerDigits(4);
- }
-
- protected static final NumberFormat counterFormat = NumberFormat.getInstance();
- static {
- counterFormat.setGroupingUsed(false);
- counterFormat.setMinimumIntegerDigits(6);
- }
-
-
+
public ApplicationAttemptIdPBImpl() {
builder = ApplicationAttemptIdProto.newBuilder();
}
@@ -117,44 +101,11 @@ public class ApplicationAttemptIdPBImpl
this.applicationId = appId;
}
- private synchronized ApplicationIdPBImpl convertFromProtoFormat(ApplicationIdProto p) {
+ private ApplicationIdPBImpl convertFromProtoFormat(ApplicationIdProto p) {
return new ApplicationIdPBImpl(p);
}
- private synchronized ApplicationIdProto convertToProtoFormat(ApplicationId t) {
+ private ApplicationIdProto convertToProtoFormat(ApplicationId t) {
return ((ApplicationIdPBImpl)t).getProto();
}
-
- @Override
- public synchronized int hashCode() {
- return getProto().hashCode();
- }
-
- @Override
- public synchronized 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;
- }
-
- @Override
- public synchronized int compareTo(ApplicationAttemptId other) {
- int compareAppIds = this.getApplicationId().compareTo(
- other.getApplicationId());
- if (compareAppIds == 0) {
- return this.getAttemptId() - other.getAttemptId();
- } else {
- return compareAppIds;
- }
-
- }
-
- @Override
- public synchronized String toString() {
- String id = (this.getApplicationId() != null) ? this.getApplicationId().getClusterTimestamp() + "_" +
- idFormat.format(this.getApplicationId().getId()): "none";
- return "appattempt_" + id + "_" + counterFormat.format(getAttemptId());
- }
}
Modified: hadoop/common/branches/branch-0.23/hadoop-mapreduce-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/ApplicationIdPBImpl.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-0.23/hadoop-mapreduce-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/ApplicationIdPBImpl.java?rev=1167063&r1=1167062&r2=1167063&view=diff
==============================================================================
--- hadoop/common/branches/branch-0.23/hadoop-mapreduce-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/ApplicationIdPBImpl.java (original)
+++ hadoop/common/branches/branch-0.23/hadoop-mapreduce-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/ApplicationIdPBImpl.java Fri Sep 9 09:51:55 2011
@@ -20,13 +20,12 @@ package org.apache.hadoop.yarn.api.recor
import org.apache.hadoop.yarn.api.records.ApplicationId;
-import org.apache.hadoop.yarn.api.records.ProtoBase;
import org.apache.hadoop.yarn.proto.YarnProtos.ApplicationIdProto;
import org.apache.hadoop.yarn.proto.YarnProtos.ApplicationIdProtoOrBuilder;
-public class ApplicationIdPBImpl extends ProtoBase<ApplicationIdProto> implements ApplicationId {
+public class ApplicationIdPBImpl extends ApplicationId {
ApplicationIdProto proto = ApplicationIdProto.getDefaultInstance();
ApplicationIdProto.Builder builder = null;
boolean viaProto = false;
@@ -40,13 +39,13 @@ public class ApplicationIdPBImpl extends
viaProto = true;
}
- public ApplicationIdProto getProto() {
+ public synchronized ApplicationIdProto getProto() {
proto = viaProto ? proto : builder.build();
viaProto = true;
return proto;
}
- private void maybeInitBuilder() {
+ private synchronized void maybeInitBuilder() {
if (viaProto || builder == null) {
builder = ApplicationIdProto.newBuilder(proto);
}
@@ -55,40 +54,25 @@ public class ApplicationIdPBImpl extends
@Override
- public int getId() {
+ public synchronized int getId() {
ApplicationIdProtoOrBuilder p = viaProto ? proto : builder;
return (p.getId());
}
@Override
- public void setId(int id) {
+ public synchronized void setId(int id) {
maybeInitBuilder();
builder.setId((id));
}
@Override
- public long getClusterTimestamp() {
+ public synchronized long getClusterTimestamp() {
ApplicationIdProtoOrBuilder p = viaProto ? proto : builder;
return (p.getClusterTimestamp());
}
@Override
- public void setClusterTimestamp(long clusterTimestamp) {
+ public synchronized void setClusterTimestamp(long clusterTimestamp) {
maybeInitBuilder();
builder.setClusterTimestamp((clusterTimestamp));
}
-
- @Override
- public int compareTo(ApplicationId other) {
- if (this.getId() - other.getId() == 0) {
- return this.getClusterTimestamp() > other.getClusterTimestamp() ? 1 :
- this.getClusterTimestamp() < other.getClusterTimestamp() ? -1 : 0;
- } else {
- return this.getId() - other.getId();
- }
- }
-
- @Override
- public String toString() {
- return "application_" + this.getClusterTimestamp() + "_" + this.getId();
- }
-}
+}
\ No newline at end of file
Modified: hadoop/common/branches/branch-0.23/hadoop-mapreduce-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/ContainerIdPBImpl.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-0.23/hadoop-mapreduce-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/ContainerIdPBImpl.java?rev=1167063&r1=1167062&r2=1167063&view=diff
==============================================================================
--- hadoop/common/branches/branch-0.23/hadoop-mapreduce-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/ContainerIdPBImpl.java (original)
+++ hadoop/common/branches/branch-0.23/hadoop-mapreduce-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/ContainerIdPBImpl.java Fri Sep 9 09:51:55 2011
@@ -18,72 +18,23 @@
package org.apache.hadoop.yarn.api.records.impl.pb;
-
-import java.text.NumberFormat;
-
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.ProtoBase;
import org.apache.hadoop.yarn.proto.YarnProtos.ApplicationAttemptIdProto;
import org.apache.hadoop.yarn.proto.YarnProtos.ApplicationIdProto;
import org.apache.hadoop.yarn.proto.YarnProtos.ContainerIdProto;
import org.apache.hadoop.yarn.proto.YarnProtos.ContainerIdProtoOrBuilder;
-public class ContainerIdPBImpl extends ProtoBase<ContainerIdProto> implements ContainerId {
+public class ContainerIdPBImpl extends ContainerId {
ContainerIdProto proto = ContainerIdProto.getDefaultInstance();
ContainerIdProto.Builder builder = null;
boolean viaProto = false;
private ApplicationId applicationId = null;
private ApplicationAttemptId appAttemptId = null;
- protected static final NumberFormat idFormat = NumberFormat.getInstance();
- static {
- idFormat.setGroupingUsed(false);
- idFormat.setMinimumIntegerDigits(4);
- }
-
- protected static final NumberFormat counterFormat = NumberFormat.getInstance();
- static {
- counterFormat.setGroupingUsed(false);
- counterFormat.setMinimumIntegerDigits(6);
- }
-
- // TODO: Why thread local?
- // ^ NumberFormat instances are not threadsafe
- private static final ThreadLocal<NumberFormat> appIdFormat = new ThreadLocal<NumberFormat>() {
- @Override
- public NumberFormat initialValue() {
- NumberFormat fmt = NumberFormat.getInstance();
- fmt.setGroupingUsed(false);
- fmt.setMinimumIntegerDigits(4);
- return fmt;
- }
- };
-
- // TODO: fail the app submission if attempts are more than 10 or something
- private static final ThreadLocal<NumberFormat> appAttemptIdFormat = new ThreadLocal<NumberFormat>() {
- @Override
- public NumberFormat initialValue() {
- NumberFormat fmt = NumberFormat.getInstance();
- fmt.setGroupingUsed(false);
- fmt.setMinimumIntegerDigits(2);
- return fmt;
- }
- };
- // TODO: Why thread local?
- // ^ NumberFormat instances are not threadsafe
- private static final ThreadLocal<NumberFormat> containerIdFormat = new ThreadLocal<NumberFormat>() {
- @Override
- public NumberFormat initialValue() {
- NumberFormat fmt = NumberFormat.getInstance();
- fmt.setGroupingUsed(false);
- fmt.setMinimumIntegerDigits(6);
- return fmt;
- }
- };
-
+
public ContainerIdPBImpl() {
builder = ContainerIdProto.newBuilder();
}
@@ -93,14 +44,14 @@ public class ContainerIdPBImpl extends P
viaProto = true;
}
- public ContainerIdProto getProto() {
+ public synchronized ContainerIdProto getProto() {
mergeLocalToProto();
proto = viaProto ? proto : builder.build();
viaProto = true;
return proto;
}
- private void mergeLocalToBuilder() {
+ private synchronized void mergeLocalToBuilder() {
if (this.applicationId != null && !((ApplicationIdPBImpl)applicationId).getProto().equals(builder.getAppId())) {
builder.setAppId(convertToProtoFormat(this.applicationId));
}
@@ -109,7 +60,7 @@ public class ContainerIdPBImpl extends P
}
}
- private void mergeLocalToProto() {
+ private synchronized void mergeLocalToProto() {
if (viaProto)
maybeInitBuilder();
mergeLocalToBuilder();
@@ -117,7 +68,7 @@ public class ContainerIdPBImpl extends P
viaProto = true;
}
- private void maybeInitBuilder() {
+ private synchronized void maybeInitBuilder() {
if (viaProto || builder == null) {
builder = ContainerIdProto.newBuilder(proto);
}
@@ -126,18 +77,18 @@ public class ContainerIdPBImpl extends P
@Override
- public int getId() {
+ public synchronized int getId() {
ContainerIdProtoOrBuilder p = viaProto ? proto : builder;
return (p.getId());
}
@Override
- public void setId(int id) {
+ public synchronized void setId(int id) {
maybeInitBuilder();
builder.setId((id));
}
@Override
- public ApplicationId getAppId() {
+ public synchronized ApplicationId getAppId() {
ContainerIdProtoOrBuilder p = viaProto ? proto : builder;
if (this.applicationId != null) {
return this.applicationId;
@@ -150,7 +101,7 @@ public class ContainerIdPBImpl extends P
}
@Override
- public ApplicationAttemptId getAppAttemptId() {
+ public synchronized ApplicationAttemptId getAppAttemptId() {
ContainerIdProtoOrBuilder p = viaProto ? proto : builder;
if (this.appAttemptId != null) {
return this.appAttemptId;
@@ -163,7 +114,7 @@ public class ContainerIdPBImpl extends P
}
@Override
- public void setAppId(ApplicationId appId) {
+ public synchronized void setAppId(ApplicationId appId) {
maybeInitBuilder();
if (appId == null)
builder.clearAppId();
@@ -171,7 +122,7 @@ public class ContainerIdPBImpl extends P
}
@Override
- public void setAppAttemptId(ApplicationAttemptId atId) {
+ public synchronized void setAppAttemptId(ApplicationAttemptId atId) {
maybeInitBuilder();
if (atId == null)
builder.clearAppAttemptId();
@@ -193,42 +144,4 @@ public class ContainerIdPBImpl extends P
private ApplicationIdProto convertToProtoFormat(ApplicationId t) {
return ((ApplicationIdPBImpl)t).getProto();
}
-
- @Override
- public int hashCode() {
- return 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;
- }
-
- @Override
- public int compareTo(ContainerId other) {
- if (this.getAppAttemptId().compareTo(other.getAppAttemptId()) == 0) {
- return this.getId() - other.getId();
- } else {
- return this.getAppAttemptId().compareTo(other.getAppAttemptId());
- }
-
- }
-
- @Override
- public String toString() {
- StringBuilder sb = new StringBuilder();
- ApplicationId appId = getAppId();
- sb.append("container_").append(appId.getClusterTimestamp()).append("_");
- sb.append(appIdFormat.get().format(appId.getId())).append("_");
- sb.append(appAttemptIdFormat.get().format(getAppAttemptId().
- getAttemptId())).append("_");
- sb.append(containerIdFormat.get().format(getId()));
- return sb.toString();
- }
}