You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by cz...@apache.org on 2011/06/29 16:45:30 UTC

svn commit: r1141120 - /sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/jcr/PersistenceHandler.java

Author: cziegeler
Date: Wed Jun 29 14:45:30 2011
New Revision: 1141120

URL: http://svn.apache.org/viewvc?rev=1141120&view=rev
Log:
SLING-2117 : Only remove empty job folders which are older than one hour

Modified:
    sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/jcr/PersistenceHandler.java

Modified: sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/jcr/PersistenceHandler.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/jcr/PersistenceHandler.java?rev=1141120&r1=1141119&r2=1141120&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/jcr/PersistenceHandler.java (original)
+++ sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/jcr/PersistenceHandler.java Wed Jun 29 14:45:30 2011
@@ -349,7 +349,7 @@ public class PersistenceHandler implemen
      */
     public void cleanup() {
         // remove obsolete jobs from the repository
-        if ( this.running ) {
+        if ( this.running && this.jobManager.isJobProcessingEnabled() ) {
             this.logger.debug("Cleaning up repository: removing all finished jobs older than {} minutes.", this.cleanupPeriod);
 
             // we create an own session to avoid concurrency issues
@@ -390,7 +390,8 @@ public class PersistenceHandler implemen
     }
 
     /**
-     * Simple empty folder removes empty folders for the last five minutes.
+     * Simple empty folder removes empty folders for the last five minutes
+     * from an hour ago!
      * If folder for minute 59 is removed, we check the hour folder as well.
      */
     private void simpleEmptyFolderCleanup() {
@@ -400,8 +401,9 @@ public class PersistenceHandler implemen
         try {
             s = this.environment.createAdminSession();
             final Calendar cleanUpDate = Calendar.getInstance();
+            // go back ten minutes
+            cleanUpDate.add(Calendar.HOUR, -1);
             for(int i = 0; i < 5; i++) {
-                cleanUpDate.add(Calendar.MINUTE, -1);
                 final StringBuilder sb = Utility.getAnonPath(cleanUpDate);
 
                 final String path = this.repositoryPath + '/' + sb.toString();
@@ -424,6 +426,7 @@ public class PersistenceHandler implemen
                         }
                     }
                 }
+                cleanUpDate.add(Calendar.MINUTE, -1);
             }
 
         } catch (RepositoryException e) {
@@ -449,6 +452,7 @@ public class PersistenceHandler implemen
             final Node startNode = (s.nodeExists(startPath) ? s.getNode(startPath) : null);
             if ( startNode != null ) {
                 final Calendar now = Calendar.getInstance();
+
                 // we iterate over the application id nodes
                 final NodeIterator idIter = startNode.getNodes();
                 while ( idIter.hasNext() ) {
@@ -479,19 +483,19 @@ public class PersistenceHandler implemen
                                 while ( hourIter.hasNext() ) {
                                     final Node hourNode = hourIter.nextNode();
                                     final int hour = Integer.valueOf(hourNode.getName());
-                                    final boolean oldHour = oldDay || hour < now.get(Calendar.HOUR);
+                                    final boolean oldHour = (oldDay && (oldMonth || now.get(Calendar.HOUR_OF_DAY) > 0)) || hour < (now.get(Calendar.HOUR_OF_DAY) -1);
 
-                                    // minutes
-                                    final NodeIterator minuteIter = hourNode.getNodes();
-                                    while ( minuteIter.hasNext() ) {
-                                        final Node minuteNode = minuteIter.nextNode();
-                                        final int minute = Integer.valueOf(minuteNode.getName());
-                                        final boolean oldMinute = oldHour || minute < now.get(Calendar.MINUTE);
-
-                                        // check if we can delete the minute
-                                        if ( oldMinute && !minuteNode.hasNodes()) {
-                                            minuteNode.remove();
-                                            s.save();
+                                    // we only remove minutes if the hour is old
+                                    if ( oldHour ) {
+                                        final NodeIterator minuteIter = hourNode.getNodes();
+                                        while ( minuteIter.hasNext() ) {
+                                            final Node minuteNode = minuteIter.nextNode();
+
+                                            // check if we can delete the minute
+                                            if ( !minuteNode.hasNodes()) {
+                                                minuteNode.remove();
+                                                s.save();
+                                            }
                                         }
                                     }