Author: stefanegli
Date: Tue Jun  4 14:22:52 2013
New Revision: 1489455

URL: http://svn.apache.org/r1489455
Log:
SLING-2901 : robust paranoia check on duplicate sling.id : sending a 
TOPOLOGY_CHANGING before stopping the discovery.impl bundle

Modified:
    
sling/trunk/bundles/extensions/discovery/impl/src/main/java/org/apache/sling/discovery/impl/DiscoveryServiceImpl.java
    
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/DiscoveryServiceImpl.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/discovery/impl/src/main/java/org/apache/sling/discovery/impl/DiscoveryServiceImpl.java?rev=1489455&r1=1489454&r2=1489455&view=diff
==============================================================================
--- 
sling/trunk/bundles/extensions/discovery/impl/src/main/java/org/apache/sling/discovery/impl/DiscoveryServiceImpl.java
 (original)
+++ 
sling/trunk/bundles/extensions/discovery/impl/src/main/java/org/apache/sling/discovery/impl/DiscoveryServiceImpl.java
 Tue Jun  4 14:22:52 2013
@@ -637,4 +637,26 @@ public class DiscoveryServiceImpl implem
         }
     }
 
+    /** SLING-2901 : send a TOPOLOGY_CHANGING event and shutdown the service 
thereafter **/
+       public void forcedShutdown() {
+               synchronized(lock) {
+               if (!activated) {
+                   logger.error("forcedShutdown: ignoring forced shutdown. 
Service is not activated.");
+                   return;
+               }
+               if (oldView == null) {
+                   logger.error("forcedShutdown: ignoring forced shutdown. No 
oldView available.");
+                   return;
+               }
+               logger.error("forcedShutdown: sending TOPOLOGY_CHANGING to all 
listeners");
+            for (final TopologyEventListener da : eventListeners) {
+                sendTopologyEvent(da, new 
TopologyEvent(Type.TOPOLOGY_CHANGING, oldView,
+                        null));
+            }
+               logger.error("forcedShutdown: deactivating DiscoveryService.");
+               // to make sure no further event is sent after this, flag this 
service as deactivated
+            activated = false;
+               }
+       }
+
 }

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=1489455&r1=1489454&r2=1489455&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
 Tue Jun  4 14:22:52 2013
@@ -294,6 +294,8 @@ public class HeartbeatHandler implements
                                        " with the same sling.id. My sling.id 
is "+slingId+", " +
                                                " Check for sling.id.file in 
your installation of all instances in this cluster " +
                                                "to verify this! Duplicate 
sling.ids are not allowed within a cluster!");
+                       logger.error("issueClusterLocalHeartbeat: sending 
TOPOLOGY_CHANGING before self-disabling.");
+                       discoveryService.forcedShutdown();
                        logger.error("issueClusterLocalHeartbeat: disabling 
discovery.impl");
                        activated = false;
                        if (context!=null) {


Reply via email to