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 2015/11/09 17:59:33 UTC

svn commit: r1713478 - in /sling/trunk/bundles/extensions/discovery: base/src/test/java/org/apache/sling/discovery/base/its/ impl/src/main/java/org/apache/sling/discovery/impl/ oak/src/main/java/org/apache/sling/discovery/oak/

Author: stefanegli
Date: Mon Nov  9 16:59:33 2015
New Revision: 1713478

URL: http://svn.apache.org/viewvc?rev=1713478&view=rev
Log:
SLING-5286 : re-activate fast topology change propagation

Modified:
    sling/trunk/bundles/extensions/discovery/base/src/test/java/org/apache/sling/discovery/base/its/AbstractSingleInstanceTest.java
    sling/trunk/bundles/extensions/discovery/impl/src/main/java/org/apache/sling/discovery/impl/DiscoveryServiceImpl.java
    sling/trunk/bundles/extensions/discovery/oak/src/main/java/org/apache/sling/discovery/oak/OakDiscoveryService.java

Modified: sling/trunk/bundles/extensions/discovery/base/src/test/java/org/apache/sling/discovery/base/its/AbstractSingleInstanceTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/discovery/base/src/test/java/org/apache/sling/discovery/base/its/AbstractSingleInstanceTest.java?rev=1713478&r1=1713477&r2=1713478&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/discovery/base/src/test/java/org/apache/sling/discovery/base/its/AbstractSingleInstanceTest.java (original)
+++ sling/trunk/bundles/extensions/discovery/base/src/test/java/org/apache/sling/discovery/base/its/AbstractSingleInstanceTest.java Mon Nov  9 16:59:33 2015
@@ -235,14 +235,14 @@ public abstract class AbstractSingleInst
         logger.info("testTopologyEventListeners: 4th sleep 2s");
         Thread.sleep(2000);
         assertEquals(0, assertingTopologyEventListener.getRemainingExpectedCount());
-        assertEquals(1, pp.getGetCnt());
+        assertEquals(2, pp.getGetCnt());
 
         // a heartbeat repeat should not result in another call though
         instance.heartbeatsAndCheckView();
         logger.info("testTopologyEventListeners: 5th sleep 2s");
         Thread.sleep(2000);
         assertEquals(0, assertingTopologyEventListener.getRemainingExpectedCount());
-        assertEquals(2, pp.getGetCnt());
+        assertEquals(3, pp.getGetCnt());
         logger.info("testTopologyEventListeners: done");
     }
 

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=1713478&r1=1713477&r2=1713478&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 Mon Nov  9 16:59:33 2015
@@ -50,7 +50,9 @@ import org.apache.sling.commons.schedule
 import org.apache.sling.discovery.DiscoveryService;
 import org.apache.sling.discovery.InstanceDescription;
 import org.apache.sling.discovery.PropertyProvider;
+import org.apache.sling.discovery.TopologyEvent;
 import org.apache.sling.discovery.TopologyEventListener;
+import org.apache.sling.discovery.TopologyEvent.Type;
 import org.apache.sling.discovery.base.commons.BaseDiscoveryService;
 import org.apache.sling.discovery.base.commons.ClusterViewService;
 import org.apache.sling.discovery.base.commons.DefaultTopologyView;
@@ -135,6 +137,18 @@ public class DiscoveryServiceImpl extend
 
     private ReentrantLock viewStateManagerLock; 
     
+    private TopologyEventListener changePropagationListener = new TopologyEventListener() {
+
+        public void handleTopologyEvent(TopologyEvent event) {
+            HeartbeatHandler handler = heartbeatHandler;
+            if (activated && handler != null 
+                    && (event.getType() == Type.TOPOLOGY_CHANGED || event.getType() == Type.PROPERTIES_CHANGED)) {
+                logger.info("changePropagationListener.handleTopologyEvent: topology changed - propagate through connectors");
+                handler.triggerAsyncConnectorPing();
+            }
+        }
+    };
+
     /** for testing only **/
     public static BaseDiscoveryService testConstructor(ResourceResolverFactory resourceResolverFactory, 
             AnnouncementRegistry announcementRegistry, 
@@ -277,6 +291,8 @@ public class DiscoveryServiceImpl extend
             }
             activated = true;
             setOldView(newView);
+
+            viewStateManager.bind(changePropagationListener);
         } finally {
             if (viewStateManagerLock!=null) {
                 viewStateManagerLock.unlock();
@@ -311,6 +327,8 @@ public class DiscoveryServiceImpl extend
         logger.debug("DiscoveryServiceImpl deactivated.");
         viewStateManagerLock.lock();
         try{
+            viewStateManager.unbind(changePropagationListener);
+
             viewStateManager.handleDeactivated();
             
             activated = false;

Modified: sling/trunk/bundles/extensions/discovery/oak/src/main/java/org/apache/sling/discovery/oak/OakDiscoveryService.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/discovery/oak/src/main/java/org/apache/sling/discovery/oak/OakDiscoveryService.java?rev=1713478&r1=1713477&r2=1713478&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/discovery/oak/src/main/java/org/apache/sling/discovery/oak/OakDiscoveryService.java (original)
+++ sling/trunk/bundles/extensions/discovery/oak/src/main/java/org/apache/sling/discovery/oak/OakDiscoveryService.java Mon Nov  9 16:59:33 2015
@@ -49,13 +49,14 @@ import org.apache.sling.commons.schedule
 import org.apache.sling.discovery.DiscoveryService;
 import org.apache.sling.discovery.InstanceDescription;
 import org.apache.sling.discovery.PropertyProvider;
+import org.apache.sling.discovery.TopologyEvent;
+import org.apache.sling.discovery.TopologyEvent.Type;
 import org.apache.sling.discovery.TopologyEventListener;
 import org.apache.sling.discovery.base.commons.BaseDiscoveryService;
 import org.apache.sling.discovery.base.commons.ClusterViewService;
 import org.apache.sling.discovery.base.commons.DefaultTopologyView;
 import org.apache.sling.discovery.base.connectors.announcement.AnnouncementRegistry;
 import org.apache.sling.discovery.base.connectors.ping.ConnectorRegistry;
-import org.apache.sling.discovery.commons.providers.BaseTopologyView;
 import org.apache.sling.discovery.commons.providers.DefaultClusterView;
 import org.apache.sling.discovery.commons.providers.DefaultInstanceDescription;
 import org.apache.sling.discovery.commons.providers.ViewStateManager;
@@ -149,6 +150,18 @@ public class OakDiscoveryService extends
     
     private final List<TopologyEventListener> pendingListeners = new LinkedList<TopologyEventListener>();
     
+    private TopologyEventListener changePropagationListener = new TopologyEventListener() {
+
+        public void handleTopologyEvent(TopologyEvent event) {
+            OakViewChecker checker = oakViewChecker;
+            if (activated && checker != null 
+                    && (event.getType() == Type.TOPOLOGY_CHANGED || event.getType() == Type.PROPERTIES_CHANGED)) {
+                logger.info("changePropagationListener.handleTopologyEvent: topology changed - propagate through connectors");
+                checker.triggerAsyncConnectorPing();
+            }
+        }
+    };
+
     public static OakDiscoveryService testConstructor(SlingSettingsService settingsService,
             AnnouncementRegistry announcementRegistry,
             ConnectorRegistry connectorRegistry,
@@ -276,6 +289,8 @@ public class OakDiscoveryService extends
                 viewStateManager.bind(listener);
             }
             pendingListeners.clear();
+            
+            viewStateManager.bind(changePropagationListener);
         } finally {
             if (viewStateManagerLock!=null) {
                 viewStateManagerLock.unlock();
@@ -308,6 +323,8 @@ public class OakDiscoveryService extends
         logger.debug("OakDiscoveryService deactivated.");
         viewStateManagerLock.lock();
         try{
+            viewStateManager.unbind(changePropagationListener);
+
             viewStateManager.handleDeactivated();
             
             activated = false;