You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by ck...@apache.org on 2013/03/27 12:20:22 UTC

svn commit: r1461527 - /jackrabbit/branches/2.6/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/data/MultiDataStore.java

Author: ckoell
Date: Wed Mar 27 11:20:21 2013
New Revision: 1461527

URL: http://svn.apache.org/r1461527
Log:
JCR-3512 DelayedDelete in MultiDatastore does not work correctly

Modified:
    jackrabbit/branches/2.6/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/data/MultiDataStore.java

Modified: jackrabbit/branches/2.6/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/data/MultiDataStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/2.6/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/data/MultiDataStore.java?rev=1461527&r1=1461526&r2=1461527&view=diff
==============================================================================
--- jackrabbit/branches/2.6/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/data/MultiDataStore.java (original)
+++ jackrabbit/branches/2.6/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/data/MultiDataStore.java Wed Mar 27 11:20:21 2013
@@ -313,6 +313,9 @@ public class MultiDataStore implements D
         return archiveDataStore.getAllIdentifiers();
     }
 
+    /**
+     * {@inheritDoc}
+     */
     public void init(String homeDir) throws RepositoryException {
         if (delayedDelete) {
             // First initialize the identifiersToDeleteFile
@@ -337,7 +340,8 @@ public class MultiDataStore implements D
                         && (identifiersToDeleteFile.lastModified() + (delayedDeleteSleep * 1000)) < System
                                 .currentTimeMillis()) {
                     deleteDelayedIdentifiersTaskThread = new Thread(
-                            new DeleteDelayedIdentifiersTask(),
+                            //Start immediately ...
+                            new DeleteDelayedIdentifiersTask(0L),
                             "Jackrabbit-MultiDataStore-DeleteDelayedIdentifiersTaskThread");
                     deleteDelayedIdentifiersTaskThread.setDaemon(true);
                     deleteDelayedIdentifiersTaskThread.start();
@@ -361,6 +365,9 @@ public class MultiDataStore implements D
         return primaryDataStore.getMinRecordLength();
     }
 
+    /**
+     * {@inheritDoc}
+     */
     public void close() throws DataStoreException {
         DataStoreException lastException = null;
         // 1. close the primary data store
@@ -403,6 +410,9 @@ public class MultiDataStore implements D
         }
     }
 
+    /**
+     * {@inheritDoc}
+     */
     public void clearInUse() {
         archiveDataStore.clearInUse();
     }
@@ -539,7 +549,7 @@ public class MultiDataStore implements D
                             log.warn("The DeleteDelayedIdentifiersTask-Thread is already running.");
                         } else {
                             deleteDelayedIdentifiersTaskThread = new Thread(
-                                    new DeleteDelayedIdentifiersTask(),
+                                    new DeleteDelayedIdentifiersTask(delayedDeleteSleep),
                                     "Jackrabbit-MultiDataStore-DeleteDelayedIdentifiersTaskThread");
                             deleteDelayedIdentifiersTaskThread.setDaemon(true);
                             deleteDelayedIdentifiersTaskThread.start();
@@ -615,6 +625,15 @@ public class MultiDataStore implements D
     public class DeleteDelayedIdentifiersTask implements Runnable {
 
         boolean run = true;
+        private long sleepTime = 0L;
+        
+        /**
+         * Constructor
+         * @param sleep how long this DeleteDelayedIdentifiersTask should sleep in seconds.
+         */
+        public DeleteDelayedIdentifiersTask(long sleep) {
+            this.sleepTime = (sleep * 1000L);
+        }
 
         @Override
         public void run() {
@@ -623,6 +642,14 @@ public class MultiDataStore implements D
                 return;
             }
             while (run && !Thread.currentThread().isInterrupted()) {
+                if (sleepTime > 0) {
+                    try {
+                        Thread.sleep(sleepTime);
+                    } catch (InterruptedException e) {
+                        Thread.currentThread().interrupt();
+                    }
+                }
+                log.info("Start to delete DataRecords from the primary data store.");
                 BufferedReader reader = null;
                 ArrayList<DataIdentifier> problemIdentifiers = new ArrayList<DataIdentifier>();
                 try {