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.rich...@data-artisans.com>
Authored: Mon Nov 13 11:50:07 2017 +0100
Committer: Stefan Richter <s.rich...@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());

Reply via email to