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;