Repository: hadoop Updated Branches: refs/heads/trunk 3e0e2033c -> cc23514ab
YARN-7115. Move BoundedAppender to org.hadoop.yarn.util pacakge (Contributed by Jian He via Daniel Templeton) Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/cc23514a Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/cc23514a Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/cc23514a Branch: refs/heads/trunk Commit: cc23514abacb4d6589e731cc5ce5d8e6f19c955d Parents: 3e0e203 Author: Daniel Templeton <templ...@apache.org> Authored: Wed Aug 30 17:26:13 2017 -0700 Committer: Daniel Templeton <templ...@apache.org> Committed: Wed Aug 30 17:26:13 2017 -0700 ---------------------------------------------------------------------- .../hadoop-yarn/hadoop-yarn-common/pom.xml | 14 +- .../hadoop/yarn/util/BoundedAppender.java | 142 +++++++++++++++++++ .../hadoop/yarn/util/TestBoundedAppender.java | 115 +++++++++++++++ .../rmapp/attempt/RMAppAttemptImpl.java | 114 +-------------- .../rmapp/attempt/TestBoundedAppender.java | 116 --------------- .../TestRMAppAttemptImplDiagnostics.java | 3 +- 6 files changed, 270 insertions(+), 234 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hadoop/blob/cc23514a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/pom.xml ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/pom.xml b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/pom.xml index f17cf8c..c2a5c67 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/pom.xml +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/pom.xml @@ -108,6 +108,15 @@ <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-annotations</artifactId> </dependency> + <!-- + junit must be before mockito-all on the classpath. mockito-all bundles its + own copy of the hamcrest classes, but they don't match our junit version. + --> + <dependency> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + <scope>test</scope> + </dependency> <dependency> <groupId>org.mockito</groupId> <artifactId>mockito-all</artifactId> @@ -129,11 +138,6 @@ <artifactId>protobuf-java</artifactId> </dependency> <dependency> - <groupId>junit</groupId> - <artifactId>junit</artifactId> - <scope>test</scope> - </dependency> - <dependency> <groupId>org.bouncycastle</groupId> <artifactId>bcprov-jdk16</artifactId> <scope>test</scope> http://git-wip-us.apache.org/repos/asf/hadoop/blob/cc23514a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/util/BoundedAppender.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/util/BoundedAppender.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/util/BoundedAppender.java new file mode 100644 index 0000000..917d696 --- /dev/null +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/util/BoundedAppender.java @@ -0,0 +1,142 @@ +/** + * 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.util; + +import com.google.common.annotations.VisibleForTesting; +import com.google.common.base.Preconditions; +import org.apache.hadoop.classification.InterfaceAudience; +import org.apache.hadoop.classification.InterfaceStability; + +/** + * A {@link CharSequence} appender that considers its {@link #limit} as upper + * bound. + * <p> + * When {@link #limit} would be reached on append, past messages will be + * truncated from head, and a header telling the user about truncation will be + * prepended, with ellipses in between header and messages. + * <p> + * Note that header and ellipses are not counted against {@link #limit}. + * <p> + * An example: + * + * <pre> + * {@code + * // At the beginning it's an empty string + * final Appendable shortAppender = new BoundedAppender(80); + * // The whole message fits into limit + * shortAppender.append( + * "message1 this is a very long message but fitting into limit\n"); + * // The first message is truncated, the second not + * shortAppender.append("message2 this is shorter than the previous one\n"); + * // The first message is deleted, the second truncated, the third + * // preserved + * shortAppender.append("message3 this is even shorter message, maybe.\n"); + * // The first two are deleted, the third one truncated, the last preserved + * shortAppender.append("message4 the shortest one, yet the greatest :)"); + * // Current contents are like this: + * // Diagnostic messages truncated, showing last 80 chars out of 199: + * // ...s is even shorter message, maybe. + * // message4 the shortest one, yet the greatest :) + * } + * </pre> + * <p> + * Note that <tt>null</tt> values are {@link #append(CharSequence) append}ed + * just like in {@link StringBuilder#append(CharSequence) original + * implementation}. + * <p> + * Note that this class is not thread safe. + */ + +@InterfaceAudience.Public +@InterfaceStability.Unstable +@VisibleForTesting +public class BoundedAppender { + @VisibleForTesting + public static final String TRUNCATED_MESSAGES_TEMPLATE = + "Diagnostic messages truncated, showing last " + + "%d chars out of %d:%n...%s"; + + private final int limit; + private final StringBuilder messages = new StringBuilder(); + private int totalCharacterCount = 0; + + public BoundedAppender(final int limit) { + Preconditions.checkArgument(limit > 0, "limit should be positive"); + + this.limit = limit; + } + + /** + * Append a {@link CharSequence} considering {@link #limit}, truncating + * from the head of {@code csq} or {@link #messages} when necessary. + * + * @param csq the {@link CharSequence} to append + * @return this + */ + public BoundedAppender append(final CharSequence csq) { + appendAndCount(csq); + checkAndCut(); + + return this; + } + + private void appendAndCount(final CharSequence csq) { + final int before = messages.length(); + messages.append(csq); + final int after = messages.length(); + totalCharacterCount += after - before; + } + + private void checkAndCut() { + if (messages.length() > limit) { + final int newStart = messages.length() - limit; + messages.delete(0, newStart); + } + } + + /** + * Get current length of messages considering truncates + * without header and ellipses. + * + * @return current length + */ + public int length() { + return messages.length(); + } + + public int getLimit() { + return limit; + } + + /** + * Get a string representation of the actual contents, displaying also a + * header and ellipses when there was a truncate. + * + * @return String representation of the {@link #messages} + */ + @Override + public String toString() { + if (messages.length() < totalCharacterCount) { + return String.format(TRUNCATED_MESSAGES_TEMPLATE, messages.length(), + totalCharacterCount, messages.toString()); + } + + return messages.toString(); + } +} http://git-wip-us.apache.org/repos/asf/hadoop/blob/cc23514a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/util/TestBoundedAppender.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/util/TestBoundedAppender.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/util/TestBoundedAppender.java new file mode 100644 index 0000000..2b9cfce --- /dev/null +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/util/TestBoundedAppender.java @@ -0,0 +1,115 @@ +/** + * 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.util; + +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; + +import static org.junit.Assert.assertEquals; + +/** + * Test class for {@link BoundedAppender}. + */ +public class TestBoundedAppender { + @Rule + public ExpectedException expected = ExpectedException.none(); + + @Test + public void initWithZeroLimitThrowsException() { + expected.expect(IllegalArgumentException.class); + expected.expectMessage("limit should be positive"); + + new BoundedAppender(0); + } + + @Test + public void nullAppendedNullStringRead() { + final BoundedAppender boundedAppender = new BoundedAppender(4); + boundedAppender.append(null); + + assertEquals("null appended, \"null\" read", "null", + boundedAppender.toString()); + } + + @Test + public void appendBelowLimitOnceValueIsReadCorrectly() { + final BoundedAppender boundedAppender = new BoundedAppender(2); + + boundedAppender.append("ab"); + + assertEquals("value appended is read correctly", "ab", + boundedAppender.toString()); + } + + @Test + public void appendValuesBelowLimitAreReadCorrectlyInFifoOrder() { + final BoundedAppender boundedAppender = new BoundedAppender(3); + + boundedAppender.append("ab"); + boundedAppender.append("cd"); + boundedAppender.append("e"); + boundedAppender.append("fg"); + + assertEquals("last values appended fitting limit are read correctly", + String.format(BoundedAppender.TRUNCATED_MESSAGES_TEMPLATE, 3, 7, "efg"), + boundedAppender.toString()); + } + + @Test + public void appendLastAboveLimitPreservesLastMessagePostfix() { + final BoundedAppender boundedAppender = new BoundedAppender(3); + + boundedAppender.append("ab"); + boundedAppender.append("cde"); + boundedAppender.append("fghij"); + + assertEquals( + "last value appended above limit postfix is read correctly", String + .format(BoundedAppender.TRUNCATED_MESSAGES_TEMPLATE, 3, 10, "hij"), + boundedAppender.toString()); + } + + @Test + public void appendMiddleAboveLimitPreservesLastMessageAndMiddlePostfix() { + final BoundedAppender boundedAppender = new BoundedAppender(3); + + boundedAppender.append("ab"); + boundedAppender.append("cde"); + + assertEquals("last value appended above limit postfix is read correctly", + String.format(BoundedAppender.TRUNCATED_MESSAGES_TEMPLATE, 3, 5, "cde"), + boundedAppender.toString()); + + boundedAppender.append("fg"); + + assertEquals( + "middle value appended above limit postfix and last value are " + + "read correctly", + String.format(BoundedAppender.TRUNCATED_MESSAGES_TEMPLATE, 3, 7, "efg"), + boundedAppender.toString()); + + boundedAppender.append("hijkl"); + + assertEquals( + "last value appended above limit postfix is read correctly", String + .format(BoundedAppender.TRUNCATED_MESSAGES_TEMPLATE, 3, 12, "jkl"), + boundedAppender.toString()); + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/hadoop/blob/cc23514a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/attempt/RMAppAttemptImpl.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/attempt/RMAppAttemptImpl.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/attempt/RMAppAttemptImpl.java index d748860..65412df 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/attempt/RMAppAttemptImpl.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/attempt/RMAppAttemptImpl.java @@ -38,7 +38,6 @@ import java.util.concurrent.locks.ReentrantReadWriteLock.WriteLock; import javax.crypto.SecretKey; -import com.google.common.base.Preconditions; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.hadoop.classification.InterfaceAudience; @@ -110,6 +109,7 @@ import org.apache.hadoop.yarn.state.MultipleArcTransition; import org.apache.hadoop.yarn.state.SingleArcTransition; import org.apache.hadoop.yarn.state.StateMachine; import org.apache.hadoop.yarn.state.StateMachineFactory; +import org.apache.hadoop.yarn.util.BoundedAppender; import org.apache.hadoop.yarn.webapp.util.WebAppUtils; import com.google.common.annotations.VisibleForTesting; @@ -1326,7 +1326,7 @@ public class RMAppAttemptImpl implements RMAppAttempt, Recoverable { // AFTER the initial saving on app-attempt-start // These fields can be visible from outside only after they are saved in // StateStore - BoundedAppender diags = new BoundedAppender(diagnostics.limit); + BoundedAppender diags = new BoundedAppender(diagnostics.getLimit()); // don't leave the tracking URL pointing to a non-existent AM if (conf.getBoolean(YarnConfiguration.APPLICATION_HISTORY_ENABLED, @@ -2295,114 +2295,4 @@ public class RMAppAttemptImpl implements RMAppAttempt, Recoverable { return Collections.EMPTY_SET; } - /** - * A {@link CharSequence} appender that considers its {@link #limit} as upper - * bound. - * <p> - * When {@link #limit} would be reached on append, past messages will be - * truncated from head, and a header telling the user about truncation will be - * prepended, with ellipses in between header and messages. - * <p> - * Note that header and ellipses are not counted against {@link #limit}. - * <p> - * An example: - * - * <pre> - * {@code - * // At the beginning it's an empty string - * final Appendable shortAppender = new BoundedAppender(80); - * // The whole message fits into limit - * shortAppender.append( - * "message1 this is a very long message but fitting into limit\n"); - * // The first message is truncated, the second not - * shortAppender.append("message2 this is shorter than the previous one\n"); - * // The first message is deleted, the second truncated, the third - * // preserved - * shortAppender.append("message3 this is even shorter message, maybe.\n"); - * // The first two are deleted, the third one truncated, the last preserved - * shortAppender.append("message4 the shortest one, yet the greatest :)"); - * // Current contents are like this: - * // Diagnostic messages truncated, showing last 80 chars out of 199: - * // ...s is even shorter message, maybe. - * // message4 the shortest one, yet the greatest :) - * } - * </pre> - * <p> - * Note that <tt>null</tt> values are {@link #append(CharSequence) append}ed - * just like in {@link StringBuilder#append(CharSequence) original - * implementation}. - * <p> - * Note that this class is not thread safe. - */ - @VisibleForTesting - static class BoundedAppender { - @VisibleForTesting - static final String TRUNCATED_MESSAGES_TEMPLATE = - "Diagnostic messages truncated, showing last " - + "%d chars out of %d:%n...%s"; - - private final int limit; - private final StringBuilder messages = new StringBuilder(); - private int totalCharacterCount = 0; - - BoundedAppender(final int limit) { - Preconditions.checkArgument(limit > 0, "limit should be positive"); - - this.limit = limit; - } - - /** - * Append a {@link CharSequence} considering {@link #limit}, truncating - * from the head of {@code csq} or {@link #messages} when necessary. - * - * @param csq the {@link CharSequence} to append - * @return this - */ - BoundedAppender append(final CharSequence csq) { - appendAndCount(csq); - checkAndCut(); - - return this; - } - - private void appendAndCount(final CharSequence csq) { - final int before = messages.length(); - messages.append(csq); - final int after = messages.length(); - totalCharacterCount += after - before; - } - - private void checkAndCut() { - if (messages.length() > limit) { - final int newStart = messages.length() - limit; - messages.delete(0, newStart); - } - } - - /** - * Get current length of messages considering truncates - * without header and ellipses. - * - * @return current length - */ - int length() { - return messages.length(); - } - - /** - * Get a string representation of the actual contents, displaying also a - * header and ellipses when there was a truncate. - * - * @return String representation of the {@link #messages} - */ - @Override - public String toString() { - if (messages.length() < totalCharacterCount) { - return String.format(TRUNCATED_MESSAGES_TEMPLATE, messages.length(), - totalCharacterCount, messages.toString()); - } - - return messages.toString(); - } - } } http://git-wip-us.apache.org/repos/asf/hadoop/blob/cc23514a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/attempt/TestBoundedAppender.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/attempt/TestBoundedAppender.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/attempt/TestBoundedAppender.java deleted file mode 100644 index 9cb1e04..0000000 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/attempt/TestBoundedAppender.java +++ /dev/null @@ -1,116 +0,0 @@ -/** - * 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.server.resourcemanager.rmapp.attempt; - -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.ExpectedException; - -import static org.junit.Assert.assertEquals; -import static org.apache.hadoop.yarn.server.resourcemanager.rmapp.attempt.RMAppAttemptImpl.BoundedAppender; - -/** - * Test class for {@link BoundedAppender}. - */ -public class TestBoundedAppender { - @Rule - public ExpectedException expected = ExpectedException.none(); - - @Test - public void initWithZeroLimitThrowsException() { - expected.expect(IllegalArgumentException.class); - expected.expectMessage("limit should be positive"); - - new BoundedAppender(0); - } - - @Test - public void nullAppendedNullStringRead() { - final BoundedAppender boundedAppender = new BoundedAppender(4); - boundedAppender.append(null); - - assertEquals("null appended, \"null\" read", "null", - boundedAppender.toString()); - } - - @Test - public void appendBelowLimitOnceValueIsReadCorrectly() { - final BoundedAppender boundedAppender = new BoundedAppender(2); - - boundedAppender.append("ab"); - - assertEquals("value appended is read correctly", "ab", - boundedAppender.toString()); - } - - @Test - public void appendValuesBelowLimitAreReadCorrectlyInFifoOrder() { - final BoundedAppender boundedAppender = new BoundedAppender(3); - - boundedAppender.append("ab"); - boundedAppender.append("cd"); - boundedAppender.append("e"); - boundedAppender.append("fg"); - - assertEquals("last values appended fitting limit are read correctly", - String.format(BoundedAppender.TRUNCATED_MESSAGES_TEMPLATE, 3, 7, "efg"), - boundedAppender.toString()); - } - - @Test - public void appendLastAboveLimitPreservesLastMessagePostfix() { - final BoundedAppender boundedAppender = new BoundedAppender(3); - - boundedAppender.append("ab"); - boundedAppender.append("cde"); - boundedAppender.append("fghij"); - - assertEquals( - "last value appended above limit postfix is read correctly", String - .format(BoundedAppender.TRUNCATED_MESSAGES_TEMPLATE, 3, 10, "hij"), - boundedAppender.toString()); - } - - @Test - public void appendMiddleAboveLimitPreservesLastMessageAndMiddlePostfix() { - final BoundedAppender boundedAppender = new BoundedAppender(3); - - boundedAppender.append("ab"); - boundedAppender.append("cde"); - - assertEquals("last value appended above limit postfix is read correctly", - String.format(BoundedAppender.TRUNCATED_MESSAGES_TEMPLATE, 3, 5, "cde"), - boundedAppender.toString()); - - boundedAppender.append("fg"); - - assertEquals( - "middle value appended above limit postfix and last value are " - + "read correctly", - String.format(BoundedAppender.TRUNCATED_MESSAGES_TEMPLATE, 3, 7, "efg"), - boundedAppender.toString()); - - boundedAppender.append("hijkl"); - - assertEquals( - "last value appended above limit postfix is read correctly", String - .format(BoundedAppender.TRUNCATED_MESSAGES_TEMPLATE, 3, 12, "jkl"), - boundedAppender.toString()); - } -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/hadoop/blob/cc23514a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/attempt/TestRMAppAttemptImplDiagnostics.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/attempt/TestRMAppAttemptImplDiagnostics.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/attempt/TestRMAppAttemptImplDiagnostics.java index 19b5dd9..295b59f 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/attempt/TestRMAppAttemptImplDiagnostics.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/attempt/TestRMAppAttemptImplDiagnostics.java @@ -26,6 +26,7 @@ import org.apache.hadoop.yarn.conf.YarnConfiguration; import org.apache.hadoop.yarn.event.Dispatcher; import org.apache.hadoop.yarn.exceptions.YarnRuntimeException; import org.apache.hadoop.yarn.server.resourcemanager.RMContext; +import org.apache.hadoop.yarn.util.BoundedAppender; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; @@ -86,7 +87,7 @@ public class TestRMAppAttemptImplDiagnostics { appAttempt.appendDiagnostics(beyondLimit); final String truncated = String.format( - RMAppAttemptImpl.BoundedAppender.TRUNCATED_MESSAGES_TEMPLATE, 1024, + BoundedAppender.TRUNCATED_MESSAGES_TEMPLATE, 1024, 1025, beyondLimit.substring(1)); assertEquals("messages beyond limit should be truncated", truncated, --------------------------------------------------------------------- To unsubscribe, e-mail: common-commits-unsubscr...@hadoop.apache.org For additional commands, e-mail: common-commits-h...@hadoop.apache.org