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();
     


Reply via email to