You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by st...@apache.org on 2013/06/03 16:17:11 UTC

svn commit: r1489000 - /sling/trunk/bundles/extensions/discovery/impl/src/main/java/org/apache/sling/discovery/impl/common/heartbeat/HeartbeatHandler.java

Author: stefanegli
Date: Mon Jun  3 14:17:11 2013
New Revision: 1489000

URL: http://svn.apache.org/r1489000
Log:
SLING-2895 : avoid heartbeats after deactivation

Modified:
    sling/trunk/bundles/extensions/discovery/impl/src/main/java/org/apache/sling/discovery/impl/common/heartbeat/HeartbeatHandler.java

Modified: sling/trunk/bundles/extensions/discovery/impl/src/main/java/org/apache/sling/discovery/impl/common/heartbeat/HeartbeatHandler.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/discovery/impl/src/main/java/org/apache/sling/discovery/impl/common/heartbeat/HeartbeatHandler.java?rev=1489000&r1=1488999&r2=1489000&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/discovery/impl/src/main/java/org/apache/sling/discovery/impl/common/heartbeat/HeartbeatHandler.java (original)
+++ sling/trunk/bundles/extensions/discovery/impl/src/main/java/org/apache/sling/discovery/impl/common/heartbeat/HeartbeatHandler.java Mon Jun  3 14:17:11 2013
@@ -109,20 +109,29 @@ public class HeartbeatHandler implements
     /** SLING-2892: remember the value of the heartbeat this instance has written the last time **/
     private Calendar lastHeartbeatWritten = null;
     
+    /** SLING-2895: avoid heartbeats after deactivation **/
+    private boolean activated = false;
+    
     @Activate
-    protected void activate(ComponentContext context) {
-        slingId = slingSettingsService.getSlingId();
-        // on activate the resetLeaderElectionId is set to true to ensure that
-        // the 'leaderElectionId' property is reset on next heartbeat issuance.
-        // the idea being that a node which leaves the cluster should not
-        // become leader on next join - and by resetting the leaderElectionId
-        // to the current time, this is ensured.
-        resetLeaderElectionId = true;
+    protected synchronized void activate(ComponentContext context) {
+    	synchronized(lock) {
+	        slingId = slingSettingsService.getSlingId();
+	        // on activate the resetLeaderElectionId is set to true to ensure that
+	        // the 'leaderElectionId' property is reset on next heartbeat issuance.
+	        // the idea being that a node which leaves the cluster should not
+	        // become leader on next join - and by resetting the leaderElectionId
+	        // to the current time, this is ensured.
+	        resetLeaderElectionId = true;
+	        activated = true;
+    	}
     }
 
     @Deactivate
     protected void deactivate() {
-        scheduler.removeJob(NAME);
+    	synchronized(lock) {
+	    	activated = false;
+    	}
+    	scheduler.removeJob(NAME);
     }
 
     /**
@@ -152,6 +161,11 @@ public class HeartbeatHandler implements
 
     public void run() {
         synchronized(lock) {
+        	if (!activated) {
+        		// SLING:2895: avoid heartbeats if not activated
+        		return;
+        	}
+        	
             // issue a heartbeat
             issueHeartbeat();