You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@reef.apache.org by ch...@apache.org on 2015/06/12 10:54:44 UTC

incubator-reef git commit: [REEF-367]: Allow clean multiple calls to Wake Clock close This adds a condition to check if the clock is already closed and a test that invokes close calls from multiple threads.

Repository: incubator-reef
Updated Branches:
  refs/heads/master 7b99be950 -> 85c01c6ce


[REEF-367]: Allow clean multiple calls to Wake Clock close
  This adds a condition to check if the clock is already closed
  and a test that invokes close calls from multiple threads.

JIRA:
  [REEF-367] https://issues.apache.org/jira/browse/REEF-367

Pull Request:
  This closes #215


Project: http://git-wip-us.apache.org/repos/asf/incubator-reef/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-reef/commit/85c01c6c
Tree: http://git-wip-us.apache.org/repos/asf/incubator-reef/tree/85c01c6c
Diff: http://git-wip-us.apache.org/repos/asf/incubator-reef/diff/85c01c6c

Branch: refs/heads/master
Commit: 85c01c6ceed49b2bc97a6031cc32bf9f16e427ec
Parents: 7b99be9
Author: Byung-Gon Chun <bg...@apache.org>
Authored: Fri Jun 12 16:02:49 2015 +0900
Committer: Brian Cho <ch...@apache.org>
Committed: Fri Jun 12 17:54:16 2015 +0900

----------------------------------------------------------------------
 .../reef/wake/time/runtime/RuntimeClock.java    |  4 ++++
 .../apache/reef/wake/test/time/ClockTest.java   | 24 ++++++++++++++++++++
 2 files changed, 28 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/85c01c6c/lang/java/reef-wake/wake/src/main/java/org/apache/reef/wake/time/runtime/RuntimeClock.java
----------------------------------------------------------------------
diff --git a/lang/java/reef-wake/wake/src/main/java/org/apache/reef/wake/time/runtime/RuntimeClock.java b/lang/java/reef-wake/wake/src/main/java/org/apache/reef/wake/time/runtime/RuntimeClock.java
index d67bec2..d8f27da 100644
--- a/lang/java/reef-wake/wake/src/main/java/org/apache/reef/wake/time/runtime/RuntimeClock.java
+++ b/lang/java/reef-wake/wake/src/main/java/org/apache/reef/wake/time/runtime/RuntimeClock.java
@@ -112,6 +112,10 @@ public final class RuntimeClock implements Clock {
   public final void close() {
     LOG.entering(RuntimeClock.class.getCanonicalName(), "close");
     synchronized (this.schedule) {
+      if (this.closed) {
+        LOG.log(Level.INFO, "Clock is already closed");
+        return;
+      }
       this.schedule.clear();
       this.schedule.add(new StopTime(findAcceptableStopTime()));
       this.schedule.notifyAll();

http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/85c01c6c/lang/java/reef-wake/wake/src/test/java/org/apache/reef/wake/test/time/ClockTest.java
----------------------------------------------------------------------
diff --git a/lang/java/reef-wake/wake/src/test/java/org/apache/reef/wake/test/time/ClockTest.java b/lang/java/reef-wake/wake/src/test/java/org/apache/reef/wake/test/time/ClockTest.java
index 6a1c8b2..2cdab5b 100644
--- a/lang/java/reef-wake/wake/src/test/java/org/apache/reef/wake/test/time/ClockTest.java
+++ b/lang/java/reef-wake/wake/src/test/java/org/apache/reef/wake/test/time/ClockTest.java
@@ -114,6 +114,30 @@ public class ClockTest {
   }
 
   @Test
+  public void testMultipleCloseCalls() throws Exception {
+    LoggingUtils.setLoggingLevel(Level.FINE);
+
+    final int numThreads = 3;
+    final RuntimeClock clock = buildClock();
+    new Thread(clock).start();
+    final ThreadPoolStage<Alarm> stage = new ThreadPoolStage<>(new EventHandler<Alarm>() {
+      @Override
+      public void onNext(final Alarm value) {
+        clock.close();
+      }
+    }, numThreads);
+
+    try {
+      for (int i = 0; i < numThreads; ++i)
+        stage.onNext(null);
+      Thread.sleep(1000);
+    } finally {
+      stage.close();
+      clock.close();
+    }
+  }
+
+  @Test
   public void testSimultaneousAlarms() throws Exception {
     LoggingUtils.setLoggingLevel(Level.FINE);