You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by jl...@apache.org on 2018/08/24 18:25:40 UTC
hadoop git commit: YARN-8051.
TestRMEmbeddedElector#testCallbackSynchronization is flaky. (Robert Kanter
via Haibo Chen)
Repository: hadoop
Updated Branches:
refs/heads/branch-3.1 246086984 -> e4282c077
YARN-8051. TestRMEmbeddedElector#testCallbackSynchronization is flaky. (Robert Kanter via Haibo Chen)
(cherry picked from commit 93d47a0ed504ee81d4b74d340c1815bdbb3c9b14)
Conflicts:
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestRMEmbeddedElector.java
Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo
Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/e4282c07
Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/e4282c07
Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/e4282c07
Branch: refs/heads/branch-3.1
Commit: e4282c077b806612b34bc3cbcb77427e383ad0ea
Parents: 2460869
Author: Haibo Chen <ha...@apache.org>
Authored: Tue Apr 3 07:58:21 2018 -0700
Committer: Jason Lowe <jl...@apache.org>
Committed: Fri Aug 24 13:24:08 2018 -0500
----------------------------------------------------------------------
.../resourcemanager/TestRMEmbeddedElector.java | 71 +++++++++++++-------
1 file changed, 48 insertions(+), 23 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hadoop/blob/e4282c07/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestRMEmbeddedElector.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/TestRMEmbeddedElector.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestRMEmbeddedElector.java
index 32ab054..8c03861 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestRMEmbeddedElector.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestRMEmbeddedElector.java
@@ -30,13 +30,16 @@ import org.junit.Before;
import org.junit.Test;
import java.io.IOException;
+import java.util.concurrent.TimeoutException;
import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicInteger;
+
import static org.junit.Assert.fail;
import static org.mockito.Matchers.any;
-import static org.mockito.Mockito.atLeast;
-import static org.mockito.Mockito.atMost;
+import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@@ -51,6 +54,8 @@ public class TestRMEmbeddedElector extends ClientBaseWithFixes {
private Configuration conf;
private AtomicBoolean callbackCalled;
+ private AtomicInteger transitionToActiveCounter;
+ private AtomicInteger transitionToStandbyCounter;
private enum SyncTestType {
ACTIVE,
@@ -78,6 +83,8 @@ public class TestRMEmbeddedElector extends ClientBaseWithFixes {
conf.setLong(YarnConfiguration.CLIENT_FAILOVER_SLEEPTIME_BASE_MS, 100L);
callbackCalled = new AtomicBoolean(false);
+ transitionToActiveCounter = new AtomicInteger(0);
+ transitionToStandbyCounter = new AtomicInteger(0);
}
/**
@@ -106,7 +113,7 @@ public class TestRMEmbeddedElector extends ClientBaseWithFixes {
*/
@Test
public void testCallbackSynchronization()
- throws IOException, InterruptedException {
+ throws IOException, InterruptedException, TimeoutException {
testCallbackSynchronization(SyncTestType.ACTIVE);
testCallbackSynchronization(SyncTestType.STANDBY);
testCallbackSynchronization(SyncTestType.NEUTRAL);
@@ -120,9 +127,10 @@ public class TestRMEmbeddedElector extends ClientBaseWithFixes {
* @param type the type of test to run
* @throws IOException if there's an issue transitioning
* @throws InterruptedException if interrupted
+ * @throws TimeoutException if waitFor timeout reached
*/
private void testCallbackSynchronization(SyncTestType type)
- throws IOException, InterruptedException {
+ throws IOException, InterruptedException, TimeoutException {
AdminService as = mock(AdminService.class);
RMContext rc = mock(RMContext.class);
ResourceManager rm = mock(ResourceManager.class);
@@ -132,6 +140,17 @@ public class TestRMEmbeddedElector extends ClientBaseWithFixes {
when(rm.getRMContext()).thenReturn(rc);
when(rc.getRMAdminService()).thenReturn(as);
+ doAnswer(invocation -> {
+ transitionToActiveCounter.incrementAndGet();
+ return null;
+ }).when(as).transitionToActive(any());
+ transitionToActiveCounter.set(0);
+ doAnswer(invocation -> {
+ transitionToStandbyCounter.incrementAndGet();
+ return null;
+ }).when(as).transitionToStandby(any());
+ transitionToStandbyCounter.set(0);
+
ActiveStandbyElectorBasedElectorService ees =
new ActiveStandbyElectorBasedElectorService(rm);
ees.init(myConf);
@@ -168,15 +187,16 @@ public class TestRMEmbeddedElector extends ClientBaseWithFixes {
* @param ees the embedded elector service
* @throws IOException if there's an issue transitioning
* @throws InterruptedException if interrupted
+ * @throws TimeoutException if waitFor timeout reached
*/
private void testCallbackSynchronizationActive(AdminService as,
ActiveStandbyElectorBasedElectorService ees)
- throws IOException, InterruptedException {
+ throws IOException, InterruptedException, TimeoutException {
ees.becomeActive();
- Thread.sleep(100);
-
- verify(as).transitionToActive(any());
+ GenericTestUtils.waitFor(
+ () -> transitionToActiveCounter.get() >= 1, 500, 10 * 1000);
+ verify(as, times(1)).transitionToActive(any());
verify(as, never()).transitionToStandby(any());
}
@@ -188,16 +208,16 @@ public class TestRMEmbeddedElector extends ClientBaseWithFixes {
* @param ees the embedded elector service
* @throws IOException if there's an issue transitioning
* @throws InterruptedException if interrupted
+ * @throws TimeoutException if waitFor timeout reached
*/
private void testCallbackSynchronizationStandby(AdminService as,
ActiveStandbyElectorBasedElectorService ees)
- throws IOException, InterruptedException {
+ throws IOException, InterruptedException, TimeoutException {
ees.becomeStandby();
- Thread.sleep(100);
-
- verify(as, atLeast(1)).transitionToStandby(any());
- verify(as, atMost(1)).transitionToStandby(any());
+ GenericTestUtils.waitFor(
+ () -> transitionToStandbyCounter.get() >= 1, 500, 10 * 1000);
+ verify(as, times(1)).transitionToStandby(any());
}
/**
@@ -207,16 +227,16 @@ public class TestRMEmbeddedElector extends ClientBaseWithFixes {
* @param ees the embedded elector service
* @throws IOException if there's an issue transitioning
* @throws InterruptedException if interrupted
+ * @throws TimeoutException if waitFor timeout reached
*/
private void testCallbackSynchronizationNeutral(AdminService as,
ActiveStandbyElectorBasedElectorService ees)
- throws IOException, InterruptedException {
+ throws IOException, InterruptedException, TimeoutException {
ees.enterNeutralMode();
- Thread.sleep(100);
-
- verify(as, atLeast(1)).transitionToStandby(any());
- verify(as, atMost(1)).transitionToStandby(any());
+ GenericTestUtils.waitFor(
+ () -> transitionToStandbyCounter.get() >= 1, 500, 10 * 1000);
+ verify(as, times(1)).transitionToStandby(any());
}
/**
@@ -227,10 +247,11 @@ public class TestRMEmbeddedElector extends ClientBaseWithFixes {
* @param ees the embedded elector service
* @throws IOException if there's an issue transitioning
* @throws InterruptedException if interrupted
+ * @throws TimeoutException if waitFor timeout reached
*/
private void testCallbackSynchronizationTimingActive(AdminService as,
ActiveStandbyElectorBasedElectorService ees)
- throws IOException, InterruptedException {
+ throws IOException, InterruptedException, TimeoutException {
synchronized (ees.zkDisconnectLock) {
// Sleep while holding the lock so that the timer thread can't do
// anything when it runs. Sleep until we're pretty sure the timer thread
@@ -246,7 +267,9 @@ public class TestRMEmbeddedElector extends ClientBaseWithFixes {
// going to do, hopefully nothing.
Thread.sleep(50);
- verify(as).transitionToActive(any());
+ GenericTestUtils.waitFor(
+ () -> transitionToActiveCounter.get() >= 1, 500, 10 * 1000);
+ verify(as, times(1)).transitionToActive(any());
verify(as, never()).transitionToStandby(any());
}
@@ -258,10 +281,11 @@ public class TestRMEmbeddedElector extends ClientBaseWithFixes {
* @param ees the embedded elector service
* @throws IOException if there's an issue transitioning
* @throws InterruptedException if interrupted
+ * @throws TimeoutException if waitFor timeout reached
*/
private void testCallbackSynchronizationTimingStandby(AdminService as,
ActiveStandbyElectorBasedElectorService ees)
- throws IOException, InterruptedException {
+ throws IOException, InterruptedException, TimeoutException {
synchronized (ees.zkDisconnectLock) {
// Sleep while holding the lock so that the timer thread can't do
// anything when it runs. Sleep until we're pretty sure the timer thread
@@ -277,8 +301,9 @@ public class TestRMEmbeddedElector extends ClientBaseWithFixes {
// going to do, hopefully nothing.
Thread.sleep(50);
- verify(as, atLeast(1)).transitionToStandby(any());
- verify(as, atMost(1)).transitionToStandby(any());
+ GenericTestUtils.waitFor(
+ () -> transitionToStandbyCounter.get() >= 1, 500, 10 * 1000);
+ verify(as, times(1)).transitionToStandby(any());
}
/**
---------------------------------------------------------------------
To unsubscribe, e-mail: common-commits-unsubscribe@hadoop.apache.org
For additional commands, e-mail: common-commits-help@hadoop.apache.org