YARN-2562. Changed ContainerId#toString() to be more readable. Contributed by Tsuyoshi OZAWA
(cherry picked from commit eb6ce5e97c
)
This commit is contained in:
parent
ac510c3610
commit
f97252e7e5
|
@ -247,6 +247,9 @@ Release 2.6.0 - UNRELEASED
|
||||||
YARN-2627. Added the info logs of attemptFailuresValidityInterval and number
|
YARN-2627. Added the info logs of attemptFailuresValidityInterval and number
|
||||||
of previous failed attempts. (Xuan Gong via zjshen)
|
of previous failed attempts. (Xuan Gong via zjshen)
|
||||||
|
|
||||||
|
YARN-2562. Changed ContainerId#toString() to be more readable. (Tsuyoshi
|
||||||
|
OZAWA via jianhe)
|
||||||
|
|
||||||
OPTIMIZATIONS
|
OPTIMIZATIONS
|
||||||
|
|
||||||
BUG FIXES
|
BUG FIXES
|
||||||
|
|
|
@ -37,6 +37,7 @@ import org.apache.hadoop.yarn.util.Records;
|
||||||
public abstract class ContainerId implements Comparable<ContainerId>{
|
public abstract class ContainerId implements Comparable<ContainerId>{
|
||||||
private static final Splitter _SPLITTER = Splitter.on('_').trimResults();
|
private static final Splitter _SPLITTER = Splitter.on('_').trimResults();
|
||||||
private static final String CONTAINER_PREFIX = "container";
|
private static final String CONTAINER_PREFIX = "container";
|
||||||
|
private static final String EPOCH_PREFIX = "e";
|
||||||
|
|
||||||
@Private
|
@Private
|
||||||
@Unstable
|
@Unstable
|
||||||
|
@ -158,10 +159,24 @@ public abstract class ContainerId implements Comparable<ContainerId>{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return A string representation of containerId. The format is
|
||||||
|
* container_e*epoch*_*clusterTimestamp*_*appId*_*attemptId*_*containerId*
|
||||||
|
* when epoch is larger than 0
|
||||||
|
* (e.g. container_e17_1410901177871_0001_01_000005).
|
||||||
|
* *epoch* is increased when RM restarts or fails over.
|
||||||
|
* When epoch is 0, epoch is omitted
|
||||||
|
* (e.g. container_1410901177871_0001_01_000005).
|
||||||
|
*/
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
sb.append("container_");
|
sb.append(CONTAINER_PREFIX + "_");
|
||||||
|
long epoch = getContainerId() >> 40;
|
||||||
|
if (epoch > 0) {
|
||||||
|
sb.append(EPOCH_PREFIX)
|
||||||
|
.append(appAttemptIdAndEpochFormat.get().format(epoch)).append("_");;
|
||||||
|
}
|
||||||
ApplicationId appId = getApplicationAttemptId().getApplicationId();
|
ApplicationId appId = getApplicationAttemptId().getApplicationId();
|
||||||
sb.append(appId.getClusterTimestamp()).append("_");
|
sb.append(appId.getClusterTimestamp()).append("_");
|
||||||
sb.append(ApplicationId.appIdFormat.get().format(appId.getId()))
|
sb.append(ApplicationId.appIdFormat.get().format(appId.getId()))
|
||||||
|
@ -170,10 +185,6 @@ public abstract class ContainerId implements Comparable<ContainerId>{
|
||||||
appAttemptIdAndEpochFormat.get().format(
|
appAttemptIdAndEpochFormat.get().format(
|
||||||
getApplicationAttemptId().getAttemptId())).append("_");
|
getApplicationAttemptId().getAttemptId())).append("_");
|
||||||
sb.append(containerIdFormat.get().format(0xffffffffffL & getContainerId()));
|
sb.append(containerIdFormat.get().format(0xffffffffffL & getContainerId()));
|
||||||
long epoch = getContainerId() >> 40;
|
|
||||||
if (epoch > 0) {
|
|
||||||
sb.append("_").append(appAttemptIdAndEpochFormat.get().format(epoch));
|
|
||||||
}
|
|
||||||
return sb.toString();
|
return sb.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -186,12 +197,19 @@ public abstract class ContainerId implements Comparable<ContainerId>{
|
||||||
+ containerIdStr);
|
+ containerIdStr);
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
ApplicationAttemptId appAttemptID = toApplicationAttemptId(it);
|
String epochOrClusterTimestampStr = it.next();
|
||||||
long id = Long.parseLong(it.next());
|
|
||||||
long epoch = 0;
|
long epoch = 0;
|
||||||
if (it.hasNext()) {
|
ApplicationAttemptId appAttemptID = null;
|
||||||
epoch = Integer.parseInt(it.next());
|
if (epochOrClusterTimestampStr.startsWith(EPOCH_PREFIX)) {
|
||||||
|
String epochStr = epochOrClusterTimestampStr;
|
||||||
|
epoch = Integer.parseInt(epochStr.substring(EPOCH_PREFIX.length()));
|
||||||
|
appAttemptID = toApplicationAttemptId(it);
|
||||||
|
} else {
|
||||||
|
String clusterTimestampStr = epochOrClusterTimestampStr;
|
||||||
|
long clusterTimestamp = Long.parseLong(clusterTimestampStr);
|
||||||
|
appAttemptID = toApplicationAttemptId(clusterTimestamp, it);
|
||||||
}
|
}
|
||||||
|
long id = Long.parseLong(it.next());
|
||||||
long cid = (epoch << 40) | id;
|
long cid = (epoch << 40) | id;
|
||||||
ContainerId containerId = ContainerId.newInstance(appAttemptID, cid);
|
ContainerId containerId = ContainerId.newInstance(appAttemptID, cid);
|
||||||
return containerId;
|
return containerId;
|
||||||
|
@ -203,7 +221,12 @@ public abstract class ContainerId implements Comparable<ContainerId>{
|
||||||
|
|
||||||
private static ApplicationAttemptId toApplicationAttemptId(
|
private static ApplicationAttemptId toApplicationAttemptId(
|
||||||
Iterator<String> it) throws NumberFormatException {
|
Iterator<String> it) throws NumberFormatException {
|
||||||
ApplicationId appId = ApplicationId.newInstance(Long.parseLong(it.next()),
|
return toApplicationAttemptId(Long.parseLong(it.next()), it);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static ApplicationAttemptId toApplicationAttemptId(
|
||||||
|
long clusterTimestamp, Iterator<String> it) throws NumberFormatException {
|
||||||
|
ApplicationId appId = ApplicationId.newInstance(clusterTimestamp,
|
||||||
Integer.parseInt(it.next()));
|
Integer.parseInt(it.next()));
|
||||||
ApplicationAttemptId appAttemptId =
|
ApplicationAttemptId appAttemptId =
|
||||||
ApplicationAttemptId.newInstance(appId, Integer.parseInt(it.next()));
|
ApplicationAttemptId.newInstance(appId, Integer.parseInt(it.next()));
|
||||||
|
|
|
@ -63,13 +63,15 @@ public class TestContainerId {
|
||||||
Assert.assertEquals(999799999997L, 0xffffffffffL & c7.getContainerId());
|
Assert.assertEquals(999799999997L, 0xffffffffffL & c7.getContainerId());
|
||||||
Assert.assertEquals(3, c7.getContainerId() >> 40);
|
Assert.assertEquals(3, c7.getContainerId() >> 40);
|
||||||
Assert.assertEquals(
|
Assert.assertEquals(
|
||||||
"container_" + ts + "_36473_4365472_999799999997_03", c7.toString());
|
"container_e03_" + ts + "_36473_4365472_999799999997",
|
||||||
|
c7.toString());
|
||||||
|
|
||||||
ContainerId c8 = newContainerId(36473, 4365472, ts, 844424930131965L);
|
ContainerId c8 = newContainerId(36473, 4365472, ts, 844424930131965L);
|
||||||
Assert.assertEquals(1099511627773L, 0xffffffffffL & c8.getContainerId());
|
Assert.assertEquals(1099511627773L, 0xffffffffffL & c8.getContainerId());
|
||||||
Assert.assertEquals(767, c8.getContainerId() >> 40);
|
Assert.assertEquals(767, c8.getContainerId() >> 40);
|
||||||
Assert.assertEquals(
|
Assert.assertEquals(
|
||||||
"container_" + ts + "_36473_4365472_1099511627773_767", c8.toString());
|
"container_e767_" + ts + "_36473_4365472_1099511627773",
|
||||||
|
c8.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ContainerId newContainerId(int appId, int appAttemptId,
|
public static ContainerId newContainerId(int appId, int appAttemptId,
|
||||||
|
|
|
@ -67,14 +67,16 @@ public class TestConverterUtils {
|
||||||
ContainerId id2 =
|
ContainerId id2 =
|
||||||
TestContainerId.newContainerId(36473, 4365472, ts, 4298334883325L);
|
TestContainerId.newContainerId(36473, 4365472, ts, 4298334883325L);
|
||||||
String cid2 = ConverterUtils.toString(id2);
|
String cid2 = ConverterUtils.toString(id2);
|
||||||
assertEquals("container_" + ts + "_36473_4365472_999799999997_03", cid2);
|
assertEquals(
|
||||||
|
"container_e03_" + ts + "_36473_4365472_999799999997", cid2);
|
||||||
ContainerId gen2 = ConverterUtils.toContainerId(cid2);
|
ContainerId gen2 = ConverterUtils.toContainerId(cid2);
|
||||||
assertEquals(gen2.toString(), id2.toString());
|
assertEquals(gen2.toString(), id2.toString());
|
||||||
|
|
||||||
ContainerId id3 =
|
ContainerId id3 =
|
||||||
TestContainerId.newContainerId(36473, 4365472, ts, 844424930131965L);
|
TestContainerId.newContainerId(36473, 4365472, ts, 844424930131965L);
|
||||||
String cid3 = ConverterUtils.toString(id3);
|
String cid3 = ConverterUtils.toString(id3);
|
||||||
assertEquals("container_" + ts + "_36473_4365472_1099511627773_767", cid3);
|
assertEquals(
|
||||||
|
"container_e767_" + ts + "_36473_4365472_1099511627773", cid3);
|
||||||
ContainerId gen3 = ConverterUtils.toContainerId(cid3);
|
ContainerId gen3 = ConverterUtils.toContainerId(cid3);
|
||||||
assertEquals(gen3.toString(), id3.toString());
|
assertEquals(gen3.toString(), id3.toString());
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue