You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by cz...@apache.org on 2013/04/22 16:48:05 UTC
svn commit: r1470555 - in /sling/trunk/contrib/extensions/discovery/impl: ./
src/main/java/org/apache/sling/discovery/impl/
src/test/java/org/apache/sling/discovery/impl/cluster/
src/test/java/org/apache/sling/discovery/impl/cluster/helpers/
Author: cziegeler
Date: Mon Apr 22 14:48:05 2013
New Revision: 1470555
URL: http://svn.apache.org/r1470555
Log:
SLING-2827 : discovery.impl: a resource based implementation of the discovery.api . Apply another patch from Stefan Egli (activate and changing patch)
Modified:
sling/trunk/contrib/extensions/discovery/impl/pom.xml
sling/trunk/contrib/extensions/discovery/impl/src/main/java/org/apache/sling/discovery/impl/DiscoveryServiceImpl.java
sling/trunk/contrib/extensions/discovery/impl/src/main/java/org/apache/sling/discovery/impl/TopologyWebConsolePlugin.java
sling/trunk/contrib/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/cluster/ClusterTest.java
sling/trunk/contrib/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/cluster/helpers/AcceptsMultiple.java
Modified: sling/trunk/contrib/extensions/discovery/impl/pom.xml
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/discovery/impl/pom.xml?rev=1470555&r1=1470554&r2=1470555&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/discovery/impl/pom.xml (original)
+++ sling/trunk/contrib/extensions/discovery/impl/pom.xml Mon Apr 22 14:48:05 2013
@@ -29,7 +29,7 @@
<artifactId>org.apache.sling.discovery.impl</artifactId>
<packaging>bundle</packaging>
- <version>0.0.6-SNAPSHOT</version>
+ <version>0.1.0-SNAPSHOT</version>
<name>Apache Sling Resource-Based Discovery Service</name>
<description>Implementation of Apache Sling Discovery based on Sling Resource providing a ClusterView through resource-clustering (eg jackrabbit clustering) and a TopologyView through HTTP POST heartbeats announcing sub-topologies to each other.</description>
Modified: sling/trunk/contrib/extensions/discovery/impl/src/main/java/org/apache/sling/discovery/impl/DiscoveryServiceImpl.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/discovery/impl/src/main/java/org/apache/sling/discovery/impl/DiscoveryServiceImpl.java?rev=1470555&r1=1470554&r2=1470555&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/discovery/impl/src/main/java/org/apache/sling/discovery/impl/DiscoveryServiceImpl.java (original)
+++ sling/trunk/contrib/extensions/discovery/impl/src/main/java/org/apache/sling/discovery/impl/DiscoveryServiceImpl.java Mon Apr 22 14:48:05 2013
@@ -146,18 +146,18 @@ public class DiscoveryServiceImpl implem
final TopologyEventListener[] registeredServices;
synchronized (lock) {
- activated = true;
registeredServices = this.eventListeners;
doUpdateProperties();
+ TopologyViewImpl newView = (TopologyViewImpl) getTopology();
+ TopologyEvent event = new TopologyEvent(Type.TOPOLOGY_INIT, null,
+ newView);
+ for (final TopologyEventListener da : registeredServices) {
+ sendTopologyEvent(da, event);
+ }
+ activated = true;
+ oldView = newView;
}
- TopologyViewImpl newView = (TopologyViewImpl) getTopology();
- TopologyEvent event = new TopologyEvent(Type.TOPOLOGY_INIT, null,
- newView);
- for (final TopologyEventListener da : registeredServices) {
- da.handleTopologyEvent(event);
- }
- oldView = newView;
URL topologyConnectorURL = config.getTopologyConnectorURL();
if (topologyConnectorURL != null) {
@@ -168,6 +168,15 @@ public class DiscoveryServiceImpl implem
logger.debug("DiscoveryServiceImpl activated.");
}
+ private void sendTopologyEvent(TopologyEventListener da, TopologyEvent event) {
+ logger.debug("sendTopologyEvent: sending topologyEvent "+event+", to "+da);
+ try{
+ da.handleTopologyEvent(event);
+ } catch(Exception e) {
+ logger.warn("sendTopologyEvent: handler threw exception. handler: "+da+", exception: "+e, e);
+ }
+ }
+
/**
* Deactivate this service
*/
@@ -181,23 +190,23 @@ public class DiscoveryServiceImpl implem
/**
* bind a discovery aware
*/
- protected void bindTopologyEventListener(final TopologyEventListener clusterAware) {
+ protected void bindTopologyEventListener(final TopologyEventListener eventListener) {
logger.debug("bindTopologyEventListener: Binding TopologyEventListener {}",
- clusterAware);
+ eventListener);
boolean activated = false;
synchronized (lock) {
List<TopologyEventListener> currentList = new ArrayList<TopologyEventListener>(
Arrays.asList(eventListeners));
- currentList.add(clusterAware);
+ currentList.add(eventListener);
this.eventListeners = currentList
.toArray(new TopologyEventListener[currentList.size()]);
activated = this.activated;
}
if (activated) {
- clusterAware.handleTopologyEvent(new TopologyEvent(
+ sendTopologyEvent(eventListener, new TopologyEvent(
Type.TOPOLOGY_INIT, null, getTopology()));
}
}
@@ -417,6 +426,12 @@ public class DiscoveryServiceImpl implem
*/
private void handlePotentialTopologyChange() {
synchronized (lock) {
+ if (!activated) {
+ // ignore this call then - an early call to issue
+ // a topologyevent before even activated
+ logger.debug("handlePotentialTopologyChange: ignoring early change before activate finished.");
+ return;
+ }
if (oldView == null) {
throw new IllegalStateException("oldView must not be null");
}
@@ -430,9 +445,20 @@ public class DiscoveryServiceImpl implem
}
oldView.markOld();
- for (final TopologyEventListener da : eventListeners) {
- da.handleTopologyEvent(new TopologyEvent(difference, oldView,
- newView));
+ if (difference!=Type.TOPOLOGY_CHANGED) {
+ for (final TopologyEventListener da : eventListeners) {
+ sendTopologyEvent(da, new TopologyEvent(difference, oldView,
+ newView));
+ }
+ } else {
+ for (final TopologyEventListener da : eventListeners) {
+ sendTopologyEvent(da, new TopologyEvent(Type.TOPOLOGY_CHANGING, oldView,
+ null));
+ }
+ for (final TopologyEventListener da : eventListeners) {
+ sendTopologyEvent(da, new TopologyEvent(Type.TOPOLOGY_CHANGED, oldView,
+ newView));
+ }
}
this.oldView = newView;
}
Modified: sling/trunk/contrib/extensions/discovery/impl/src/main/java/org/apache/sling/discovery/impl/TopologyWebConsolePlugin.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/discovery/impl/src/main/java/org/apache/sling/discovery/impl/TopologyWebConsolePlugin.java?rev=1470555&r1=1470554&r2=1470555&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/discovery/impl/src/main/java/org/apache/sling/discovery/impl/TopologyWebConsolePlugin.java (original)
+++ sling/trunk/contrib/extensions/discovery/impl/src/main/java/org/apache/sling/discovery/impl/TopologyWebConsolePlugin.java Mon Apr 22 14:48:05 2013
@@ -651,6 +651,9 @@ public class TopologyWebConsolePlugin ex
addEventLog(event.getType(),
"view: " + shortViewInfo(event.getNewView()) + ". "
+ details);
+ } else if (event.getType() == Type.TOPOLOGY_CHANGING) {
+ addEventLog(event.getType(),
+ "old view: " + shortViewInfo(event.getOldView()));
} else {
if (event.getOldView() == null) {
addEventLog(event.getType(),
Modified: sling/trunk/contrib/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/cluster/ClusterTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/cluster/ClusterTest.java?rev=1470555&r1=1470554&r2=1470555&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/cluster/ClusterTest.java (original)
+++ sling/trunk/contrib/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/cluster/ClusterTest.java Mon Apr 22 14:48:05 2013
@@ -185,6 +185,7 @@ public class ClusterTest {
AcceptsMultiple acceptsMultiple = new AcceptsMultiple(
Type.TOPOLOGY_CHANGING, Type.TOPOLOGY_CHANGED);
assertingTopologyEventListener.addExpected(acceptsMultiple);
+ assertingTopologyEventListener.addExpected(acceptsMultiple);
instance3 = Instance.newClusterInstance("thirdInstance", instance1,
false);
instance1.runHeartbeatOnce();
@@ -195,6 +196,7 @@ public class ClusterTest {
instance2.runHeartbeatOnce();
instance3.runHeartbeatOnce();
Thread.sleep(2000);
+ assertEquals(1, acceptsMultiple.getEventCnt(Type.TOPOLOGY_CHANGING));
assertEquals(1, acceptsMultiple.getEventCnt(Type.TOPOLOGY_CHANGED));
}
Modified: sling/trunk/contrib/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/cluster/helpers/AcceptsMultiple.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/cluster/helpers/AcceptsMultiple.java?rev=1470555&r1=1470554&r2=1470555&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/cluster/helpers/AcceptsMultiple.java (original)
+++ sling/trunk/contrib/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/cluster/helpers/AcceptsMultiple.java Mon Apr 22 14:48:05 2013
@@ -54,7 +54,12 @@ public class AcceptsMultiple implements
}
public synchronized int getEventCnt(Type type) {
- return counts.get(type);
+ Integer i = counts.get(type);
+ if (i!=null) {
+ return i;
+ } else {
+ return 0;
+ }
}
}