You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by jb...@apache.org on 2012/04/30 09:48:39 UTC
svn commit: r1332088 - in /karaf/cellar/branches/cellar-2.2.x:
bundle/src/main/java/org/apache/karaf/cellar/bundle/
bundle/src/main/resources/OSGI-INF/blueprint/
core/src/main/java/org/apache/karaf/cellar/core/
hazelcast/src/main/java/org/apache/karaf/...
Author: jbonofre
Date: Mon Apr 30 07:48:39 2012
New Revision: 1332088
URL: http://svn.apache.org/viewvc?rev=1332088&view=rev
Log:
[KARAF-1426] Refactore bundle module to use event producer and check status in the handler, synchronizer and listener
Modified:
karaf/cellar/branches/cellar-2.2.x/bundle/src/main/java/org/apache/karaf/cellar/bundle/BundleEventHandler.java
karaf/cellar/branches/cellar-2.2.x/bundle/src/main/java/org/apache/karaf/cellar/bundle/BundleSynchronizer.java
karaf/cellar/branches/cellar-2.2.x/bundle/src/main/java/org/apache/karaf/cellar/bundle/LocalBundleListener.java
karaf/cellar/branches/cellar-2.2.x/bundle/src/main/resources/OSGI-INF/blueprint/blueprint.xml
karaf/cellar/branches/cellar-2.2.x/core/src/main/java/org/apache/karaf/cellar/core/GroupManager.java
karaf/cellar/branches/cellar-2.2.x/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/HazelcastGroupManager.java
Modified: karaf/cellar/branches/cellar-2.2.x/bundle/src/main/java/org/apache/karaf/cellar/bundle/BundleEventHandler.java
URL: http://svn.apache.org/viewvc/karaf/cellar/branches/cellar-2.2.x/bundle/src/main/java/org/apache/karaf/cellar/bundle/BundleEventHandler.java?rev=1332088&r1=1332087&r2=1332088&view=diff
==============================================================================
--- karaf/cellar/branches/cellar-2.2.x/bundle/src/main/java/org/apache/karaf/cellar/bundle/BundleEventHandler.java (original)
+++ karaf/cellar/branches/cellar-2.2.x/bundle/src/main/java/org/apache/karaf/cellar/bundle/BundleEventHandler.java Mon Apr 30 07:48:39 2012
@@ -37,10 +37,18 @@ public class BundleEventHandler extends
* @param event
*/
public void handle(RemoteBundleEvent event) {
+ // check if the handler switch is ON
if (eventSwitch.getStatus().equals(SwitchStatus.OFF)) {
LOGGER.warn("CELLAR BUNDLE: {} switch is OFF, cluster event is not handled", SWITCH_ID);
return;
}
+
+ // check if the node is local
+ if (!groupManager.isLocalGroup(event.getSourceGroup().getName())) {
+ LOGGER.warn("CELLAR BUNDLE: node is not part of the cluster event cluster group");
+ return;
+ }
+
try {
//Check if the pid is marked as local.
if (isAllowed(event.getSourceGroup(), Constants.CATEGORY, event.getLocation(), EventType.INBOUND)) {
Modified: karaf/cellar/branches/cellar-2.2.x/bundle/src/main/java/org/apache/karaf/cellar/bundle/BundleSynchronizer.java
URL: http://svn.apache.org/viewvc/karaf/cellar/branches/cellar-2.2.x/bundle/src/main/java/org/apache/karaf/cellar/bundle/BundleSynchronizer.java?rev=1332088&r1=1332087&r2=1332088&view=diff
==============================================================================
--- karaf/cellar/branches/cellar-2.2.x/bundle/src/main/java/org/apache/karaf/cellar/bundle/BundleSynchronizer.java (original)
+++ karaf/cellar/branches/cellar-2.2.x/bundle/src/main/java/org/apache/karaf/cellar/bundle/BundleSynchronizer.java Mon Apr 30 07:48:39 2012
@@ -16,6 +16,7 @@ package org.apache.karaf.cellar.bundle;
import org.apache.karaf.cellar.core.Configurations;
import org.apache.karaf.cellar.core.Group;
import org.apache.karaf.cellar.core.Synchronizer;
+import org.apache.karaf.cellar.core.control.SwitchStatus;
import org.apache.karaf.cellar.core.event.EventProducer;
import org.apache.karaf.cellar.core.event.EventType;
import org.osgi.framework.Bundle;
@@ -37,7 +38,7 @@ public class BundleSynchronizer extends
private static final transient Logger LOGGER = LoggerFactory.getLogger(BundleSynchronizer.class);
- private List<EventProducer> producerList;
+ private EventProducer eventProducer;
/**
* Registration method
@@ -62,14 +63,14 @@ public class BundleSynchronizer extends
}
/**
- * Reads the configuration from the remote map.
+ * Get the bundle to install from the distributed map
*/
public void pull(Group group) {
if (group != null) {
String groupName = group.getName();
- Map<String, BundleState> bundleTable = clusterManager.getMap(Constants.BUNDLE_MAP + Configurations.SEPARATOR + groupName);
+ Map<String, BundleState> bundleDistributedMap = clusterManager.getMap(Constants.BUNDLE_MAP + Configurations.SEPARATOR + groupName);
- for (Map.Entry<String,BundleState> entry : bundleTable.entrySet()) {
+ for (Map.Entry<String,BundleState> entry : bundleDistributedMap.entrySet()) {
String id = entry.getKey();
BundleState state = entry.getValue();
@@ -99,10 +100,16 @@ public class BundleSynchronizer extends
}
/**
- * Publishes local configuration to the cluster.
+ * Publishes local bundle to the cluster.
*/
public void push(Group group) {
+ // check if the producer is ON
+ if (eventProducer.getSwitch().getStatus().equals(SwitchStatus.OFF)) {
+ LOGGER.warn("CELLAR BUNDLE: cluster event producer is OFF for this node");
+ return;
+ }
+
if (group != null) {
String groupName = group.getName();
Map<String, BundleState> bundleTable = clusterManager.getMap(Constants.BUNDLE_MAP + Configurations.SEPARATOR + groupName);
@@ -126,19 +133,15 @@ public class BundleSynchronizer extends
BundleState existingState = bundleTable.get(id);
RemoteBundleEvent event = null;
+
if (existingState == null) {
+ // update the distributed map
event = new RemoteBundleEvent(symbolicName, version, bundleLocation, status);
- // update the cluster map
bundleTable.put(id, bundleState);
}
// broadcast the event
- // TODO use the local producer and check its status
- if (producerList != null && !producerList.isEmpty() && event != null) {
- for (EventProducer producer : producerList) {
- producer.produce(event);
- }
- }
+ eventProducer.produce(event);
} else LOGGER.warn("CELLAR BUNDLE: bundle {} is marked as BLOCKED OUTBOUND", bundleLocation);
}
}
@@ -162,12 +165,12 @@ public class BundleSynchronizer extends
return result;
}
- public List<EventProducer> getProducerList() {
- return producerList;
+ public EventProducer getEventProducer() {
+ return eventProducer;
}
- public void setProducerList(List<EventProducer> producerList) {
- this.producerList = producerList;
+ public void setEventProducer(EventProducer eventProducer) {
+ this.eventProducer = eventProducer;
}
}
Modified: karaf/cellar/branches/cellar-2.2.x/bundle/src/main/java/org/apache/karaf/cellar/bundle/LocalBundleListener.java
URL: http://svn.apache.org/viewvc/karaf/cellar/branches/cellar-2.2.x/bundle/src/main/java/org/apache/karaf/cellar/bundle/LocalBundleListener.java?rev=1332088&r1=1332087&r2=1332088&view=diff
==============================================================================
--- karaf/cellar/branches/cellar-2.2.x/bundle/src/main/java/org/apache/karaf/cellar/bundle/LocalBundleListener.java (original)
+++ karaf/cellar/branches/cellar-2.2.x/bundle/src/main/java/org/apache/karaf/cellar/bundle/LocalBundleListener.java Mon Apr 30 07:48:39 2012
@@ -16,6 +16,7 @@ package org.apache.karaf.cellar.bundle;
import org.apache.karaf.cellar.core.Configurations;
import org.apache.karaf.cellar.core.Group;
import org.apache.karaf.cellar.core.Node;
+import org.apache.karaf.cellar.core.control.SwitchStatus;
import org.apache.karaf.cellar.core.event.EventProducer;
import org.apache.karaf.cellar.core.event.EventType;
import org.osgi.framework.BundleEvent;
@@ -31,9 +32,7 @@ public class LocalBundleListener extends
private static final transient Logger LOGGER = LoggerFactory.getLogger(LocalBundleListener.class);
- private List<EventProducer> producerList;
-
- private Node node;
+ private EventProducer eventProducer;
/**
* Process {@link BundleEvent}s.
@@ -41,50 +40,49 @@ public class LocalBundleListener extends
* @param event
*/
public void bundleChanged(BundleEvent event) {
- try {
- if (event != null && event.getBundle() != null) {
- Set<Group> groups = null;
- try {
- groups = groupManager.listLocalGroups();
- } catch (Exception ex) {
- LOGGER.warn("Failed to list local groups. Is Cellar uninstalling ?");
- }
- if (groups != null && !groups.isEmpty()) {
- for (Group group : groups) {
+ // check if the producer is ON
+ if (eventProducer.getSwitch().getStatus().equals(SwitchStatus.OFF)) {
+ LOGGER.warn("CELLAR BUNDLE: node is not part of the cluster event cluster group");
+ return;
+ }
+
+ if (event != null && event.getBundle() != null) {
+
+ Set<Group> groups = null;
+ try {
+ groups = groupManager.listLocalGroups();
+ } catch (Exception ex) {
+ LOGGER.warn("CELLAR BUNDLE: failed to list local groups. Is Cellar uninstalling ?");
+ }
+
+ if (groups != null && !groups.isEmpty()) {
+ for (Group group : groups) {
+
+ String symbolicName = event.getBundle().getSymbolicName();
+ String version = event.getBundle().getVersion().toString();
+ String bundleLocation = event.getBundle().getLocation();
+ int type = event.getType();
+ if (isAllowed(group, Constants.CATEGORY, bundleLocation, EventType.OUTBOUND)) {
+
+ // update the cluster map
+ Map<String, BundleState> bundles = clusterManager.getMap(Constants.BUNDLE_MAP + Configurations.SEPARATOR + group.getName());
+ BundleState state = bundles.get(symbolicName + "/" + version);
+ if (state == null) {
+ state = new BundleState();
+ }
+ state.setStatus(event.getBundle().getState());
+ state.setLocation(event.getBundle().getLocation());
+ bundles.put(symbolicName + "/" + version, state);
+
+ // broadcast the cluster event
+ RemoteBundleEvent remoteBundleEvent = new RemoteBundleEvent(symbolicName, version, bundleLocation, type);
+ remoteBundleEvent.setSourceGroup(group);
+ eventProducer.produce(remoteBundleEvent);
- String symbolicName = event.getBundle().getSymbolicName();
- String version = event.getBundle().getVersion().toString();
- String bundleLocation = event.getBundle().getLocation();
- int type = event.getType();
- if (isAllowed(group, Constants.CATEGORY, bundleLocation, EventType.OUTBOUND)) {
- RemoteBundleEvent remoteBundleEvent = new RemoteBundleEvent(symbolicName, version, bundleLocation, type);
- remoteBundleEvent.setSourceGroup(group);
- remoteBundleEvent.setSourceNode(node);
-
- // update the cluster map
- Map<String, BundleState> bundles = clusterManager.getMap(Constants.BUNDLE_MAP + Configurations.SEPARATOR + group.getName());
- BundleState state = bundles.get(symbolicName + "/" + version);
- if (state == null) {
- state = new BundleState();
- }
- state.setStatus(event.getBundle().getState());
- state.setLocation(event.getBundle().getLocation());
- bundles.put(symbolicName + "/" + version, state);
-
- // broadcast the cluster event
- // TODO use the local producer and check its status
- if (producerList != null && !producerList.isEmpty()) {
- for (EventProducer producer : producerList) {
- producer.produce(remoteBundleEvent);
- }
- }
- } else LOGGER.warn("CELLAR BUNDLE: bundle {} is marked as BLOCKED OUTBOUND", bundleLocation);
- }
+ } else LOGGER.warn("CELLAR BUNDLE: bundle {} is marked as BLOCKED OUTBOUND", bundleLocation);
}
}
- } catch (Exception ex) {
- LOGGER.error("CELLAR BUNDLE: failed to handle bundle event", ex);
}
}
@@ -92,9 +90,7 @@ public class LocalBundleListener extends
* Initialization Method.
*/
public void init() {
- if (clusterManager != null) {
- node = clusterManager.getNode();
- }
+
}
/**
@@ -104,12 +100,12 @@ public class LocalBundleListener extends
}
- public List<EventProducer> getProducerList() {
- return producerList;
+ public EventProducer getEventProducer() {
+ return eventProducer;
}
- public void setProducerList(List<EventProducer> producerList) {
- this.producerList = producerList;
+ public void setEventProducer(EventProducer eventProducer) {
+ this.eventProducer = eventProducer;
}
}
Modified: karaf/cellar/branches/cellar-2.2.x/bundle/src/main/resources/OSGI-INF/blueprint/blueprint.xml
URL: http://svn.apache.org/viewvc/karaf/cellar/branches/cellar-2.2.x/bundle/src/main/resources/OSGI-INF/blueprint/blueprint.xml?rev=1332088&r1=1332087&r2=1332088&view=diff
==============================================================================
--- karaf/cellar/branches/cellar-2.2.x/bundle/src/main/resources/OSGI-INF/blueprint/blueprint.xml (original)
+++ karaf/cellar/branches/cellar-2.2.x/bundle/src/main/resources/OSGI-INF/blueprint/blueprint.xml Mon Apr 30 07:48:39 2012
@@ -17,11 +17,11 @@
<!-- Cluster Configuration Listener -->
<bean id="bundleListener" class="org.apache.karaf.cellar.bundle.LocalBundleListener" init-method="init" destroy-method="destroy">
- <property name="producerList" ref="groupEventProducers"/>
<property name="clusterManager" ref="clusterManager"/>
<property name="groupManager" ref="groupManager"/>
<property name="configurationAdmin" ref="configurationAdmin"/>
<property name="bundleContext" ref="blueprintBundleContext"/>
+ <property name="eventProducer" ref="eventProducer"/>
</bean>
<!-- Configuration Synchronizer -->
@@ -30,7 +30,7 @@
<property name="configurationAdmin" ref="configurationAdmin"/>
<property name="groupManager" ref="groupManager"/>
<property name="clusterManager" ref="clusterManager"/>
- <property name="producerList" ref="groupEventProducers"/>
+ <property name="eventProducer" ref="eventProducer"/>
<property name="bundleContext" ref="blueprintBundleContext"/>
</bean>
@@ -38,6 +38,7 @@
init-method="init" destroy-method="destroy">
<property name="configurationAdmin" ref="configurationAdmin"/>
<property name="clusterManager" ref="clusterManager"/>
+ <property name="groupManager" ref="groupManager"/>
<property name="bundleContext" ref="blueprintBundleContext"/>
</bean>
@@ -52,9 +53,6 @@
<reference id="clusterManager" interface="org.apache.karaf.cellar.core.ClusterManager"/>
<reference id="groupManager" interface="org.apache.karaf.cellar.core.GroupManager"/>
<reference id="configurationAdmin" interface="org.osgi.service.cm.ConfigurationAdmin"/>
- <reference id="eventTransportFactory" interface="org.apache.karaf.cellar.core.event.EventTransportFactory"/>
<reference id="eventProducer" interface="org.apache.karaf.cellar.core.event.EventProducer"/>
- <reference-list id="groupEventProducers" member-type="service-object"
- interface="org.apache.karaf.cellar.core.event.EventProducer" filter="(type=group)"/>
</blueprint>
Modified: karaf/cellar/branches/cellar-2.2.x/core/src/main/java/org/apache/karaf/cellar/core/GroupManager.java
URL: http://svn.apache.org/viewvc/karaf/cellar/branches/cellar-2.2.x/core/src/main/java/org/apache/karaf/cellar/core/GroupManager.java?rev=1332088&r1=1332087&r2=1332088&view=diff
==============================================================================
--- karaf/cellar/branches/cellar-2.2.x/core/src/main/java/org/apache/karaf/cellar/core/GroupManager.java (original)
+++ karaf/cellar/branches/cellar-2.2.x/core/src/main/java/org/apache/karaf/cellar/core/GroupManager.java Mon Apr 30 07:48:39 2012
@@ -66,6 +66,14 @@ public interface GroupManager {
public Set<Group> listLocalGroups();
/**
+ * Check if the local node is part of the given group.
+ *
+ * @param groupName the group name.
+ * @return true if the local node is part of the group, false else.
+ */
+ public boolean isLocalGroup(String groupName);
+
+ /**
* Returns the {@link Group}s of the specified {@link Node}.
*
* @return
Modified: karaf/cellar/branches/cellar-2.2.x/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/HazelcastGroupManager.java
URL: http://svn.apache.org/viewvc/karaf/cellar/branches/cellar-2.2.x/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/HazelcastGroupManager.java?rev=1332088&r1=1332087&r2=1332088&view=diff
==============================================================================
--- karaf/cellar/branches/cellar-2.2.x/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/HazelcastGroupManager.java (original)
+++ karaf/cellar/branches/cellar-2.2.x/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/HazelcastGroupManager.java Mon Apr 30 07:48:39 2012
@@ -164,6 +164,16 @@ public class HazelcastGroupManager imple
}
}
+ public boolean isLocalGroup(String groupName) {
+ Set<Group> localGroups = this.listLocalGroups();
+ for (Group localGroup : localGroups) {
+ if (localGroup.getName().equals(groupName)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
public Set<Group> listAllGroups() {
ClassLoader originalClassLoader = Thread.currentThread().getContextClassLoader();
try {