diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/ContainerId.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/ContainerId.java index 73e8085..c3b1bc9 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/ContainerId.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/ContainerId.java @@ -38,8 +38,16 @@ @Unstable public static ContainerId newInstance(ApplicationAttemptId appAttemptId, int containerId) { + return newInstance(appAttemptId, containerId, 0); + } + + @Private + @Unstable + public static ContainerId newInstance(ApplicationAttemptId appAttemptId, + int containerId, int epoch) { ContainerId id = Records.newRecord(ContainerId.class); id.setId(containerId); + id.setEpoch(epoch); id.setApplicationAttemptId(appAttemptId); id.build(); return id; @@ -80,6 +88,14 @@ public static ContainerId newInstance(ApplicationAttemptId appAttemptId, @Private @Unstable protected abstract void setId(int id); + + @Public + @Stable + public abstract int getEpoch(); + + @Private + @Unstable + public abstract void setEpoch(int id); // TODO: fail the app submission if attempts are more than 10 or something 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 48aac9d..634f844 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 @@ -51,6 +51,7 @@ message ContainerIdProto { optional ApplicationIdProto app_id = 1; optional ApplicationAttemptIdProto app_attempt_id = 2; optional int32 id = 3; + optional int32 epoch = 4; } message ResourceProto { diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/ContainerIdPBImpl.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/ContainerIdPBImpl.java index 9be829f..8f2f928 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/ContainerIdPBImpl.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/ContainerIdPBImpl.java @@ -56,9 +56,20 @@ public int getId() { @Override protected void setId(int id) { Preconditions.checkNotNull(builder); - builder.setId((id)); + builder.setId(id & 0x00ffffff); } + @Override + public int getEpoch() { + Preconditions.checkNotNull(proto); + return proto.getEpoch(); + } + + @Override + public void setEpoch(int epoch) { + Preconditions.checkNotNull(builder); + builder.setEpoch(0xff & epoch); + } @Override public ApplicationAttemptId getApplicationAttemptId() { diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/api/TestContainerId.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/api/TestContainerId.java index f92df8a..18d4aa3 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/api/TestContainerId.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/api/TestContainerId.java @@ -52,10 +52,13 @@ public void testContainerId() { Assert.assertFalse(c1.hashCode() == c5.hashCode()); long ts = System.currentTimeMillis(); - ContainerId c6 = newContainerId(36473, 4365472, ts, 25645811); + int cid = 25645811; + ContainerId c6 = newContainerId(36473, 4365472, ts, cid); Assert.assertEquals("container_10_0001_01_000001", c1.toString()); - Assert.assertEquals("container_" + ts + "_36473_4365472_25645811", - c6.toString()); + Assert.assertEquals("container_" + ts + "_36473_4365472_" + + (cid & 0x00ffffff), c6.toString()); + Assert.assertEquals(c1.getEpoch(), 0); + Assert.assertEquals(c6.getEpoch(), 0); } public static ContainerId newContainerId(int appId, int appAttemptId,