From ccf2db7fc2688d262df3309007cb12a4dfedc179 Mon Sep 17 00:00:00 2001 From: Kihwal Lee Date: Thu, 19 Jul 2018 11:13:37 -0500 Subject: [PATCH] HADOOP-15614. TestGroupsCaching.testExceptionOnBackgroundRefreshHandled reliably fails. Contributed by Weiwei Yang. --- .../hadoop/security/TestGroupsCaching.java | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/security/TestGroupsCaching.java b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/security/TestGroupsCaching.java index 46e36b3172..bba81522a4 100644 --- a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/security/TestGroupsCaching.java +++ b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/security/TestGroupsCaching.java @@ -561,23 +561,28 @@ public void testExceptionOnBackgroundRefreshHandled() throws Exception { // Then expire that entry timer.advance(4 * 1000); + // Pause the getGroups operation and this will delay the cache refresh + FakeGroupMapping.pause(); // Now get the cache entry - it should return immediately // with the old value and the cache will not have completed // a request to getGroups yet. assertEquals(groups.getGroups("me").size(), 2); assertEquals(startingRequestCount, FakeGroupMapping.getRequestCount()); + // Resume the getGroups operation and the cache can get refreshed + FakeGroupMapping.resume(); - // Now sleep for a short time and re-check the request count. It should have - // increased, but the exception means the cache will not have updated - Thread.sleep(50); + // Now wait for the refresh done, because of the exception, we expect + // a onFailure callback gets called and the counter for failure is 1 + waitForGroupCounters(groups, 0, 0, 0, 1); FakeGroupMapping.setThrowException(false); assertEquals(startingRequestCount + 1, FakeGroupMapping.getRequestCount()); assertEquals(groups.getGroups("me").size(), 2); - // Now sleep another short time - the 3rd call to getGroups above - // will have kicked off another refresh that updates the cache - Thread.sleep(50); + // Now the 3rd call to getGroups above will have kicked off + // another refresh that updates the cache, since it no longer gives + // exception, we now expect the counter for success is 1. + waitForGroupCounters(groups, 0, 0, 1, 1); assertEquals(startingRequestCount + 2, FakeGroupMapping.getRequestCount()); assertEquals(groups.getGroups("me").size(), 3); }