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 2015/04/29 15:46:53 UTC

svn commit: r1676744 - in /sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/config: JobManagerConfiguration.java QueueConfigurationManager.java TopologyCapabilities.java

Author: cziegeler
Date: Wed Apr 29 13:45:29 2015
New Revision: 1676744

URL: http://svn.apache.org/r1676744
Log:
SLING-4678 : Background tasks not stopping when bundle is stopped

Modified:
    sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/config/JobManagerConfiguration.java
    sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/config/QueueConfigurationManager.java
    sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/config/TopologyCapabilities.java

Modified: sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/config/JobManagerConfiguration.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/config/JobManagerConfiguration.java?rev=1676744&r1=1676743&r2=1676744&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/config/JobManagerConfiguration.java (original)
+++ sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/config/JobManagerConfiguration.java Wed Apr 29 13:45:29 2015
@@ -24,6 +24,7 @@ import java.util.Calendar;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.atomic.AtomicLong;
 
 import org.apache.felix.scr.annotations.Activate;
@@ -80,7 +81,7 @@ import org.slf4j.LoggerFactory;
     @Property(name=JobManagerConfiguration.PROPERTY_BACKGROUND_LOAD_DELAY,
               longValue=JobManagerConfiguration.DEFAULT_BACKGROUND_LOAD_DELAY, propertyPrivate=true),
 })
-public class JobManagerConfiguration implements TopologyEventListener, ConfigurationChangeListener {
+public class JobManagerConfiguration implements TopologyEventListener {
 
     /** Logger. */
     private final Logger logger = LoggerFactory.getLogger("org.apache.sling.event.impl.jobs");
@@ -176,6 +177,9 @@ public class JobManagerConfiguration imp
     @Reference
     private Scheduler scheduler;
 
+    /** Is this still active? */
+    private final AtomicBoolean active = new AtomicBoolean(false);
+
     /** The topology capabilities. */
     private volatile TopologyCapabilities topologyCapabilities;
 
@@ -221,6 +225,7 @@ public class JobManagerConfiguration imp
         } finally {
             resolver.close();
         }
+        this.active.set(true);
         this.queueConfigManager.addListener(this);
     }
 
@@ -239,10 +244,15 @@ public class JobManagerConfiguration imp
      */
     @Deactivate
     protected void deactivate() {
-        this.stopProcessing(true);
+        this.active.set(false);
+        this.stopProcessing();
         this.queueConfigManager.removeListener();
     }
 
+    public boolean isActive() {
+        return this.active.get();
+    }
+
     /**
      * Create a new resource resolver for reading and writing the resource tree.
      * The resolver needs to be closed by the client.
@@ -441,15 +451,10 @@ public class JobManagerConfiguration imp
      * This method is invoked by the queue configuration manager
      * whenever the queue configuration changes.
      */
-    @Override
-    public void configurationChanged(final boolean active) {
+    public void queueConfigurationChanged() {
         final TopologyCapabilities caps = this.topologyCapabilities;
-        if ( caps != null ) {
-            this.stopProcessing(false);
-
-            if ( active ) {
-                this.startProcessing(Type.PROPERTIES_CHANGED, caps, true);
-            }
+        if ( caps != null && this.isActive() ) {
+            this.startProcessing(Type.PROPERTIES_CHANGED, caps, true);
         }
     }
 
@@ -457,16 +462,15 @@ public class JobManagerConfiguration imp
      * Stop processing
      * @param deactivate Whether to deactivate the capabilities
      */
-    private void stopProcessing(final boolean deactivate) {
+    private void stopProcessing() {
         logger.debug("Stopping job processing...");
-        boolean notify = this.topologyCapabilities != null;
-        // deactivate old capabilities - this stops all background processes
-        if ( deactivate && this.topologyCapabilities != null ) {
-            this.topologyCapabilities.deactivate();
-        }
-        this.topologyCapabilities = null;
+        final TopologyCapabilities caps = this.topologyCapabilities;
+
+        if ( caps != null ) {
+            // deactivate old capabilities - this stops all background processes
+            caps.deactivate();
+            this.topologyCapabilities = null;
 
-        if ( notify ) {
             // stop all listeners
             this.notifiyListeners();
         }
@@ -545,13 +549,13 @@ public class JobManagerConfiguration imp
         synchronized ( this.listeners ) {
 
             if ( event.getType() == Type.TOPOLOGY_CHANGING ) {
-               this.stopProcessing(true);
+               this.stopProcessing();
 
             } else if ( event.getType() == Type.TOPOLOGY_INIT
                 || event.getType() == Type.TOPOLOGY_CHANGED
                 || event.getType() == Type.PROPERTIES_CHANGED ) {
 
-                this.stopProcessing(true);
+                this.stopProcessing();
 
                 this.startProcessing(event.getType(), new TopologyCapabilities(event.getNewView(), this), false);
             }

Modified: sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/config/QueueConfigurationManager.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/config/QueueConfigurationManager.java?rev=1676744&r1=1676743&r2=1676744&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/config/QueueConfigurationManager.java (original)
+++ sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/config/QueueConfigurationManager.java Wed Apr 29 13:45:29 2015
@@ -54,7 +54,7 @@ public class QueueConfigurationManager {
     private MainQueueConfiguration mainQueueConfiguration;
 
     /** Listener - this is the job manager configuration component. */
-    private volatile ConfigurationChangeListener changeListener;
+    private volatile JobManagerConfiguration changeListener;
 
     /**
      * Add a new queue configuration.
@@ -175,7 +175,7 @@ public class QueueConfigurationManager {
      * Add a config listener.
      * @param listener
      */
-    public void addListener(final ConfigurationChangeListener listener) {
+    public void addListener(final JobManagerConfiguration listener) {
         this.changeListener = listener;
     }
 
@@ -190,9 +190,9 @@ public class QueueConfigurationManager {
      * Update the listener.
      */
     private void updateListener() {
-        final ConfigurationChangeListener l = this.changeListener;
+        final JobManagerConfiguration l = this.changeListener;
         if ( l != null ) {
-            l.configurationChanged(true);
+            l.queueConfigurationChanged();
         }
     }
 }

Modified: sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/config/TopologyCapabilities.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/config/TopologyCapabilities.java?rev=1676744&r1=1676743&r2=1676744&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/config/TopologyCapabilities.java (original)
+++ sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/config/TopologyCapabilities.java Wed Apr 29 13:45:29 2015
@@ -173,7 +173,7 @@ public class TopologyCapabilities {
      * @return {@code true} if still active.
      */
     public boolean isActive() {
-        return this.active && this.view.isCurrent();
+        return this.active && this.jobManagerConfiguration.isActive() && this.view.isCurrent();
     }
 
     /**