You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flink.apache.org by sr...@apache.org on 2017/11/13 12:51:31 UTC

flink git commit: [FLINK-8040] [tests] Fix test instability in ResourceGuardTest (cherry picked from commit ad8ef6d)

Repository: flink
Updated Branches:
  refs/heads/release-1.4 431ae36f7 -> e2b92f22c


[FLINK-8040] [tests] Fix test instability in ResourceGuardTest
(cherry picked from commit ad8ef6d)


Project: http://git-wip-us.apache.org/repos/asf/flink/repo
Commit: http://git-wip-us.apache.org/repos/asf/flink/commit/e2b92f22
Tree: http://git-wip-us.apache.org/repos/asf/flink/tree/e2b92f22
Diff: http://git-wip-us.apache.org/repos/asf/flink/diff/e2b92f22

Branch: refs/heads/release-1.4
Commit: e2b92f22c2686f8d842d371a17c36c5d28f9b247
Parents: 431ae36
Author: Stefan Richter <s....@data-artisans.com>
Authored: Mon Nov 13 11:50:07 2017 +0100
Committer: Stefan Richter <s....@data-artisans.com>
Committed: Mon Nov 13 13:50:46 2017 +0100

----------------------------------------------------------------------
 .../apache/flink/util/ResourceGuardTest.java    | 53 +++++++++++++-------
 1 file changed, 34 insertions(+), 19 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flink/blob/e2b92f22/flink-core/src/test/java/org/apache/flink/util/ResourceGuardTest.java
----------------------------------------------------------------------
diff --git a/flink-core/src/test/java/org/apache/flink/util/ResourceGuardTest.java b/flink-core/src/test/java/org/apache/flink/util/ResourceGuardTest.java
index 98aae4d..ade8d0f 100644
--- a/flink-core/src/test/java/org/apache/flink/util/ResourceGuardTest.java
+++ b/flink-core/src/test/java/org/apache/flink/util/ResourceGuardTest.java
@@ -53,30 +53,37 @@ public class ResourceGuardTest extends TestLogger {
 	@Test
 	public void testCloseBlockIfAcquired() throws Exception {
 		ResourceGuard resourceGuard = new ResourceGuard();
-		ResourceGuard.Lease lease_1 = resourceGuard.acquireResource();
+		ResourceGuard.Lease lease = resourceGuard.acquireResource();
 		AtomicBoolean checker = new AtomicBoolean(true);
 
 		Thread closerThread = new Thread() {
 			@Override
 			public void run() {
-				try {
-					// this line should block until all acquires are matched by releases.
-					resourceGuard.close();
-					checker.set(false);
-				} catch (Exception ignore) {
-					checker.set(false);
-				}
+				// this line should block until all acquires are matched by releases.
+				resourceGuard.close();
+				checker.set(false);
 			}
 		};
 
 		closerThread.start();
 
-		ResourceGuard.Lease lease_2 = resourceGuard.acquireResource();
-		lease_2.close();
+		// we wait until the close()-call in the other thread happened.
+		while (!resourceGuard.isClosed()) {
+			Thread.yield();
+		}
+
+		// validate that the close()-call is still blocked.
 		Assert.assertTrue(checker.get());
 
-		// this matches the first acquire and will unblock the close.
-		lease_1.close();
+		// validate that the closed-status is already effective.
+		try {
+			resourceGuard.acquireResource();
+			Assert.fail("Resource guard is expected to be already closed.");
+		} catch (IOException ignore) {
+		}
+
+		// this matches the first acquire and will unblock the close()-call in the other thread.
+		lease.close();
 		closerThread.join(60_000);
 		Assert.assertFalse(checker.get());
 	}
@@ -90,21 +97,29 @@ public class ResourceGuardTest extends TestLogger {
 		Thread closerThread = new Thread() {
 			@Override
 			public void run() {
-				try {
-					// this line should block until all acquires are matched by releases.
-					resourceGuard.close();
-					checker.set(false);
-				} catch (Exception ignore) {
-					checker.set(false);
-				}
+				// this line should block until all acquires are matched by releases.
+				resourceGuard.close();
+				checker.set(false);
 			}
 		};
 
 		closerThread.start();
+
+		// we wait until the close()-call in the other thread happened.
+		while (!resourceGuard.isClosed()) {
+			Thread.yield();
+		}
+
+		// attempt to unblock the resource guard via interrupt.
 		closerThread.interrupt();
 
+		// wait some time.
+		closerThread.join(100);
+
+		// check that unblock through interrupting failed.
 		Assert.assertTrue(checker.get());
 
+		// proper unblocking by closing the lease.
 		lease.close();
 		closerThread.join(60_000);
 		Assert.assertFalse(checker.get());