You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by mr...@apache.org on 2015/09/07 11:45:09 UTC

svn commit: r1701586 - in /jackrabbit/oak/trunk: oak-core/src/main/java/org/apache/jackrabbit/oak/stats/ oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/repository/

Author: mreutegg
Date: Mon Sep  7 09:45:08 2015
New Revision: 1701586

URL: http://svn.apache.org/r1701586
Log:
OAK-3354: Clock.Fast delays repository shutdown

Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/stats/Clock.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/stats/package-info.java
    jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/repository/RepositoryImpl.java

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/stats/Clock.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/stats/Clock.java?rev=1701586&r1=1701585&r2=1701586&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/stats/Clock.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/stats/Clock.java Mon Sep  7 09:45:08 2015
@@ -16,9 +16,11 @@
  */
 package org.apache.jackrabbit.oak.stats;
 
+import java.io.Closeable;
 import java.util.Date;
 import java.util.Random;
 import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.ScheduledFuture;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicLong;
 
@@ -275,12 +277,14 @@ public abstract class Clock {
      * instantaneously thanks to a background task that takes care of the
      * actual time-keeping work.
      */
-    public static class Fast extends Clock {
+    public static class Fast extends Clock implements Closeable {
 
         private volatile long time = ACCURATE.getTime();
 
+        private final ScheduledFuture<?> future;
+
         public Fast(ScheduledExecutorService executor) {
-            executor.scheduleAtFixedRate(new Runnable() {
+            future = executor.scheduleAtFixedRate(new Runnable() {
                 @Override
                 public void run() {
                     time = ACCURATE.getTime();
@@ -298,6 +302,9 @@ public abstract class Clock {
             return "Clock.Fast";
         }
 
+        public void close() {
+            future.cancel(false);
+        }
     }
 
     /**

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/stats/package-info.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/stats/package-info.java?rev=1701586&r1=1701585&r2=1701586&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/stats/package-info.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/stats/package-info.java Mon Sep  7 09:45:08 2015
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-@Version("1.0")
+@Version("1.1")
 @Export(optional = "provide:=true")
 package org.apache.jackrabbit.oak.stats;
 

Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/repository/RepositoryImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/repository/RepositoryImpl.java?rev=1701586&r1=1701585&r2=1701586&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/repository/RepositoryImpl.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/repository/RepositoryImpl.java Mon Sep  7 09:45:08 2015
@@ -100,7 +100,7 @@ public class RepositoryImpl implements J
     private final SecurityProvider securityProvider;
     private final int observationQueueLength;
     private final CommitRateLimiter commitRateLimiter;
-    private final Clock clock;
+    private final Clock.Fast clock;
     private final DelegatingGCMonitor gcMonitor = new DelegatingGCMonitor();
     private final Registration gcMonitorRegistration;
 
@@ -318,6 +318,7 @@ public class RepositoryImpl implements J
     public void shutdown() {
         statisticManager.dispose();
         gcMonitorRegistration.unregister();
+        clock.close();
         closeExecutor();
         if (contentRepository instanceof Closeable) {
             IOUtils.closeQuietly((Closeable) contentRepository);