Author: bdelacretaz
Date: Tue Aug 26 05:20:45 2008
New Revision: 689045

URL: http://svn.apache.org/viewvc?rev=689045&view=rev
Log:
SLING-506 - Repository Pinger pinged too often

Modified:
    
incubator/sling/trunk/jcr/base/src/main/java/org/apache/sling/jcr/base/AbstractSlingRepository.java
    incubator/sling/trunk/launchpad/app/pom.xml
    incubator/sling/trunk/launchpad/jcrapp/pom.xml

Modified: 
incubator/sling/trunk/jcr/base/src/main/java/org/apache/sling/jcr/base/AbstractSlingRepository.java
URL: 
http://svn.apache.org/viewvc/incubator/sling/trunk/jcr/base/src/main/java/org/apache/sling/jcr/base/AbstractSlingRepository.java?rev=689045&r1=689044&r2=689045&view=diff
==============================================================================
--- 
incubator/sling/trunk/jcr/base/src/main/java/org/apache/sling/jcr/base/AbstractSlingRepository.java
 (original)
+++ 
incubator/sling/trunk/jcr/base/src/main/java/org/apache/sling/jcr/base/AbstractSlingRepository.java
 Tue Aug 26 05:20:45 2008
@@ -151,10 +151,10 @@
     private Loader loader;
 
     // the poll interval used while the repository is not active
-    private long pollTimeInActive;
+    private long pollTimeInActiveSeconds;
 
     // the poll interval used while the repository is active
-    private long pollTimeActive;
+    private long pollTimeActiveSeconds;
 
     // whether the repository checker task should be active. this field
     // is managed by the startRepositoryPinger and stopRepositoryPinger methods
@@ -732,14 +732,14 @@
         if (seconds < MIN_POLL) {
             seconds = DEFAULT_POLL_ACTIVE;
         }
-        pollTimeActive = 1000L * seconds;
+        pollTimeActiveSeconds = seconds;
     }
 
     private void setPollTimeInActive(int seconds) {
         if (seconds < MIN_POLL) {
             seconds = DEFAULT_POLL_INACTIVE;
         }
-        pollTimeInActive = 1000L * seconds;
+        pollTimeInActiveSeconds = seconds;
     }
 
     private void startRepositoryPinger() {
@@ -883,10 +883,11 @@
     }
 
     public void run() {
-        // start polling with min value to be faster at system startup
+        // start polling with a small value to be faster at system startup
         // we'll increase the polling time after each try
-        long pollTime = MIN_POLL;
-        final long pollTimeIncrement = 1;
+        long pollTimeMsec = 100L;
+        final long MSEC = 1000L;
+        final int pollTimeFactor = 2;
         Object waitLock = repositoryPinger;
 
         try {
@@ -898,41 +899,52 @@
                     try {
                         // no debug logging, see SLING-505
                         // log(LogService.LOG_DEBUG, "Waiting " + pollTime + " 
seconds before checking repository");
-                        waitLock.wait(pollTime * 1000L);
+                        waitLock.wait(pollTimeMsec);
                     } catch (InterruptedException ie) {
                         // don't care, go ahead
                     }
                 }
 
-                // only apply any checks if we are running after waiting
+                long newPollTime = pollTimeMsec;
                 if (running) {
 
                     Repository repo = repository;
+                    boolean ok = false;
                     if (repo == null) {
-
+                        // No Repository yet, try to start
                         if (startRepository()) {
-                            pollTime = pollTimeActive;
+                            log(LogService.LOG_INFO, "Repository started 
successfully"); 
+                            ok = true;
+                            newPollTime = pollTimeActiveSeconds * MSEC;
+                        } else {
+                            // ramp up poll time, up to the max of our 
configured times
+                            newPollTime = Math.min(pollTimeMsec * 
pollTimeFactor, Math.max(pollTimeInActiveSeconds, pollTimeActiveSeconds) * 
MSEC);
                         }
 
-                    } else if (!pingAndCheck()) {
-
+                    } else if (pingAndCheck()) {
+                        ok = true;
+                        newPollTime = pollTimeActiveSeconds * MSEC;
+                        
+                    } else {
+                        // Repository disappeared
                         log(LogService.LOG_INFO,
-                            "run: Repository not accessible, unregistering 
service");
+                            "run: Repository not accessible anymore, 
unregistering service");
                         stopRepository();
-                        pollTime = Math.min(pollTime + pollTimeIncrement, 
pollTimeInActive);
-
-                    } else {
-
-                        // no debug logging, see SLING-505
-                        // log(LogService.LOG_DEBUG,
-                        //    "run: Repository available, checking again in "
-                        //        + pollTime + " seconds");
+                        newPollTime = pollTimeInActiveSeconds * MSEC;
+                    }
+                    
+                    if(newPollTime != pollTimeMsec) {
+                        pollTimeMsec = newPollTime;
+                        log(LogService.LOG_DEBUG, 
+                                "Repository Pinger interval set to " + 
pollTimeMsec + " msec, repository is "
+                                + (ok ? "available" : "NOT available")
+                                );
                     }
                 }
             }
 
         } finally {
-            // whatever goes on, make sure the repository is disposed off
+            // whatever goes on, make sure the repository is disposed of
             // at the end of the thread....
             stopRepository();
         }

Modified: incubator/sling/trunk/launchpad/app/pom.xml
URL: 
http://svn.apache.org/viewvc/incubator/sling/trunk/launchpad/app/pom.xml?rev=689045&r1=689044&r2=689045&view=diff
==============================================================================
--- incubator/sling/trunk/launchpad/app/pom.xml (original)
+++ incubator/sling/trunk/launchpad/app/pom.xml Tue Aug 26 05:20:45 2008
@@ -364,7 +364,7 @@
         <dependency>
             <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.jcr.jackrabbit.server</artifactId>
-            <version>2.0.2-incubator</version>
+            <version>2.0.3-incubator-SNAPSHOT</version>
             <optional>true</optional>
         </dependency>
         <dependency>

Modified: incubator/sling/trunk/launchpad/jcrapp/pom.xml
URL: 
http://svn.apache.org/viewvc/incubator/sling/trunk/launchpad/jcrapp/pom.xml?rev=689045&r1=689044&r2=689045&view=diff
==============================================================================
--- incubator/sling/trunk/launchpad/jcrapp/pom.xml (original)
+++ incubator/sling/trunk/launchpad/jcrapp/pom.xml Tue Aug 26 05:20:45 2008
@@ -204,7 +204,7 @@
         <dependency>
             <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.jcr.jackrabbit.server</artifactId>
-            <version>2.0.2-incubator</version>
+            <version>2.0.3-incubator-SNAPSHOT</version>
             <optional>true</optional>
         </dependency>
         <dependency>


Reply via email to