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 2015/09/14 08:34:33 UTC
[1/2] karaf-cellar git commit: [KARAF-3981] Improve bundle
synchronizer
Repository: karaf-cellar
Updated Branches:
refs/heads/cellar-3.0.x 5a599f19c -> f71624e5c
[KARAF-3981] Improve bundle synchronizer
Project: http://git-wip-us.apache.org/repos/asf/karaf-cellar/repo
Commit: http://git-wip-us.apache.org/repos/asf/karaf-cellar/commit/96d50bb8
Tree: http://git-wip-us.apache.org/repos/asf/karaf-cellar/tree/96d50bb8
Diff: http://git-wip-us.apache.org/repos/asf/karaf-cellar/diff/96d50bb8
Branch: refs/heads/cellar-3.0.x
Commit: 96d50bb8703a8194f7d685449aadb878fbc8f454
Parents: 5a599f1
Author: Jean-Baptiste Onofré <jb...@apache.org>
Authored: Mon Sep 14 08:06:08 2015 +0200
Committer: Jean-Baptiste Onofré <jb...@apache.org>
Committed: Mon Sep 14 08:06:08 2015 +0200
----------------------------------------------------------------------
.../karaf/cellar/bundle/BundleEventHandler.java | 50 +++----
.../karaf/cellar/bundle/BundleSupport.java | 72 ++++++----
.../karaf/cellar/bundle/BundleSynchronizer.java | 138 ++++++++++++-------
.../cellar/bundle/LocalBundleListener.java | 33 ++---
.../internal/CellarBundleMBeanImpl.java | 55 +++-----
.../karaf/cellar/bundle/shell/BlockCommand.java | 126 +++++++++--------
.../bundle/shell/BundleCommandSupport.java | 23 +---
.../bundle/shell/InstallBundleCommand.java | 14 +-
.../cellar/bundle/shell/ListBundleCommand.java | 19 ++-
.../cellar/bundle/shell/StartBundleCommand.java | 8 +-
.../cellar/bundle/shell/StopBundleCommand.java | 8 +-
.../bundle/shell/UninstallBundleCommand.java | 6 +-
.../resources/OSGI-INF/blueprint/blueprint.xml | 1 +
.../karaf/cellar/hazelcast/QueueProducer.java | 4 +-
.../karaf/cellar/hazelcast/TopicProducer.java | 4 +-
15 files changed, 301 insertions(+), 260 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/karaf-cellar/blob/96d50bb8/bundle/src/main/java/org/apache/karaf/cellar/bundle/BundleEventHandler.java
----------------------------------------------------------------------
diff --git a/bundle/src/main/java/org/apache/karaf/cellar/bundle/BundleEventHandler.java b/bundle/src/main/java/org/apache/karaf/cellar/bundle/BundleEventHandler.java
index 43a8c51..468ba29 100644
--- a/bundle/src/main/java/org/apache/karaf/cellar/bundle/BundleEventHandler.java
+++ b/bundle/src/main/java/org/apache/karaf/cellar/bundle/BundleEventHandler.java
@@ -20,7 +20,7 @@ import org.apache.karaf.cellar.core.control.SwitchStatus;
import org.apache.karaf.cellar.core.event.EventHandler;
import org.apache.karaf.cellar.core.event.EventType;
import org.apache.karaf.features.Feature;
-import org.osgi.framework.BundleEvent;
+import org.osgi.framework.Bundle;
import org.osgi.framework.BundleException;
import org.osgi.service.cm.Configuration;
import org.slf4j.Logger;
@@ -38,7 +38,7 @@ public class BundleEventHandler extends BundleSupport implements EventHandler<Cl
public static final String SWITCH_ID = "org.apache.karaf.cellar.bundle.handler";
private final Switch eventSwitch = new BasicSwitch(SWITCH_ID);
-
+
/**
* Handle received bundle cluster events.
*
@@ -52,11 +52,11 @@ public class BundleEventHandler extends BundleSupport implements EventHandler<Cl
LOGGER.debug("CELLAR BUNDLE: {} switch is OFF, cluster event is not handled", SWITCH_ID);
return;
}
-
+
if (groupManager == null) {
- //in rare cases for example right after installation this happens!
- LOGGER.error("CELLAR BUNDLE: retrieved event {} while groupManager is not available yet!", event);
- return;
+ //in rare cases for example right after installation this happens!
+ LOGGER.error("CELLAR BUNDLE: retrieved event {} while groupManager is not available yet!", event);
+ return;
}
// check if the group is local
@@ -66,37 +66,39 @@ public class BundleEventHandler extends BundleSupport implements EventHandler<Cl
}
try {
- // check if the pid is marked as local.
+ // check if it's not a "local" event
+ if (event.getSourceNode() != null && event.getSourceNode().getId().equalsIgnoreCase(clusterManager.getNode().getId())) {
+ LOGGER.debug("CELLAR BUNDLE: cluster event is local (coming from local synchronizer or listener)");
+ return;
+ }
if (isAllowed(event.getSourceGroup(), Constants.CATEGORY, event.getLocation(), EventType.INBOUND)) {
- // check the features first
- List<Feature> matchingFeatures = retrieveFeature(event.getLocation());
- for (Feature feature : matchingFeatures) {
- if (!isAllowed(event.getSourceGroup(), "features", feature.getName(), EventType.INBOUND)) {
- LOGGER.trace("CELLAR BUNDLE: bundle {} is contained in feature {} marked BLOCKED INBOUND for cluster group {}", event.getLocation(), feature.getName(), event.getSourceGroup().getName());
- return;
- }
- }
- if (event.getType() == BundleEvent.INSTALLED) {
+ // check the features first
+ List<Feature> matchingFeatures = retrieveFeature(event.getLocation());
+ for (Feature feature : matchingFeatures) {
+ if (!isAllowed(event.getSourceGroup(), "features", feature.getName(), EventType.INBOUND)) {
+ LOGGER.trace("CELLAR BUNDLE: bundle {} is contained in feature {} marked BLOCKED INBOUND for cluster group {}", event.getLocation(), feature.getName(), event.getSourceGroup().getName());
+ return;
+ }
+ }
+ if (event.getType() == Bundle.INSTALLED) {
installBundleFromLocation(event.getLocation());
LOGGER.debug("CELLAR BUNDLE: installing {}/{}", event.getSymbolicName(), event.getVersion());
- } else if (event.getType() == BundleEvent.UNINSTALLED) {
+ } else if (event.getType() == Bundle.UNINSTALLED) {
uninstallBundle(event.getSymbolicName(), event.getVersion());
LOGGER.debug("CELLAR BUNDLE: uninstalling {}/{}", event.getSymbolicName(), event.getVersion());
- } else if (event.getType() == BundleEvent.STARTED) {
+ } else if (event.getType() == Bundle.ACTIVE) {
startBundle(event.getSymbolicName(), event.getVersion());
LOGGER.debug("CELLAR BUNDLE: starting {}/{}", event.getSymbolicName(), event.getVersion());
- } else if (event.getType() == BundleEvent.STOPPED) {
+ } else if (event.getType() == Bundle.RESOLVED) {
stopBundle(event.getSymbolicName(), event.getVersion());
LOGGER.debug("CELLAR BUNDLE: stopping {}/{}", event.getSymbolicName(), event.getVersion());
- } else if (event.getType() == BundleEvent.UPDATED) {
- updateBundle(event.getSymbolicName(), event.getVersion());
- LOGGER.debug("CELLAR BUNDLE: updating {}/{}", event.getSymbolicName(), event.getVersion());
}
- } else LOGGER.trace("CELLAR BUNDLE: bundle {} is marked BLOCKED INBOUND for cluster group {}", event.getSymbolicName(), event.getSourceGroup().getName());
+ } else
+ LOGGER.trace("CELLAR BUNDLE: bundle {} is marked BLOCKED INBOUND for cluster group {}", event.getSymbolicName(), event.getSourceGroup().getName());
} catch (BundleException e) {
LOGGER.error("CELLAR BUNDLE: failed to install bundle {}/{}.", new Object[]{event.getSymbolicName(), event.getVersion()}, e);
} catch (Exception e) {
- LOGGER.error("CELLAR BUNDLE: failed to handle bundle event", e);
+ LOGGER.error("CELLAR BUNDLE: failed to handle bundle event", e);
}
}
http://git-wip-us.apache.org/repos/asf/karaf-cellar/blob/96d50bb8/bundle/src/main/java/org/apache/karaf/cellar/bundle/BundleSupport.java
----------------------------------------------------------------------
diff --git a/bundle/src/main/java/org/apache/karaf/cellar/bundle/BundleSupport.java b/bundle/src/main/java/org/apache/karaf/cellar/bundle/BundleSupport.java
index da649cc..23fb02d 100644
--- a/bundle/src/main/java/org/apache/karaf/cellar/bundle/BundleSupport.java
+++ b/bundle/src/main/java/org/apache/karaf/cellar/bundle/BundleSupport.java
@@ -30,7 +30,27 @@ import java.util.List;
public class BundleSupport extends CellarSupport {
protected BundleContext bundleContext;
- private FeaturesService featuresService;
+ private FeaturesService featuresService;
+
+ public boolean isInstalled(String location) {
+ Bundle[] bundles = getBundleContext().getBundles();
+ for (Bundle bundle : bundles) {
+ if (bundle.getLocation().equals(location)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public boolean isStarted(String location) {
+ Bundle[] bundles = getBundleContext().getBundles();
+ for (Bundle bundle : bundles) {
+ if (bundle.getLocation().equals(location) && (bundle.getState() == Bundle.ACTIVE)) {
+ return true;
+ }
+ }
+ return false;
+ }
/**
* Locally install a bundle.
@@ -46,7 +66,7 @@ public class BundleSupport extends CellarSupport {
* Locally uninstall a bundle.
*
* @param symbolicName the bundle symbolic name.
- * @param version the bundle version.
+ * @param version the bundle version.
* @throws BundleException in case of un-installation failure.
*/
public void uninstallBundle(String symbolicName, String version) throws BundleException {
@@ -64,7 +84,7 @@ public class BundleSupport extends CellarSupport {
* Locally start a bundle.
*
* @param symbolicName the bundle symbolic name.
- * @param version the bundle version.
+ * @param version the bundle version.
* @throws BundleException in case of start failure.
*/
public void startBundle(String symbolicName, String version) throws BundleException {
@@ -82,7 +102,7 @@ public class BundleSupport extends CellarSupport {
* Locally stop a bundle.
*
* @param symbolicName the bundle symbolic name.
- * @param version the bundle version.
+ * @param version the bundle version.
* @throws BundleException in case of stop failure.
*/
public void stopBundle(String symbolicName, String version) throws BundleException {
@@ -100,7 +120,7 @@ public class BundleSupport extends CellarSupport {
* Locally update a bundle.
*
* @param symbolicName the bundle symbolic name.
- * @param version the bundle version.
+ * @param version the bundle version.
* @throws BundleException in case of update failure.
*/
public void updateBundle(String symbolicName, String version) throws BundleException {
@@ -121,21 +141,21 @@ public class BundleSupport extends CellarSupport {
* @return the list of feature where the bundle is present.
* @throws Exception in case of retrieval failure.
*/
- protected List<Feature> retrieveFeature(String bundleLocation) throws Exception {
- Feature[] features = featuresService.listFeatures();
- List<Feature> matchingFeatures = new ArrayList<Feature>();
- for (Feature feature : features) {
- List<BundleInfo> bundles = feature.getBundles();
- for (BundleInfo bundleInfo : bundles) {
- String location = bundleInfo.getLocation();
- if (location.equalsIgnoreCase(bundleLocation)) {
- matchingFeatures.add(feature);
- LOGGER.debug("CELLAR BUNDLE: found a feature {} containing bundle {}", feature.getName(), bundleLocation);
- }
- }
- }
- return matchingFeatures;
- }
+ protected List<Feature> retrieveFeature(String bundleLocation) throws Exception {
+ Feature[] features = featuresService.listFeatures();
+ List<Feature> matchingFeatures = new ArrayList<Feature>();
+ for (Feature feature : features) {
+ List<BundleInfo> bundles = feature.getBundles();
+ for (BundleInfo bundleInfo : bundles) {
+ String location = bundleInfo.getLocation();
+ if (location.equalsIgnoreCase(bundleLocation)) {
+ matchingFeatures.add(feature);
+ LOGGER.debug("CELLAR BUNDLE: found a feature {} containing bundle {}", feature.getName(), bundleLocation);
+ }
+ }
+ }
+ return matchingFeatures;
+ }
public BundleContext getBundleContext() {
return this.bundleContext;
@@ -145,12 +165,12 @@ public class BundleSupport extends CellarSupport {
this.bundleContext = bundleContext;
}
- public FeaturesService getFeaturesService() {
- return featuresService;
- }
+ public FeaturesService getFeaturesService() {
+ return featuresService;
+ }
- public void setFeaturesService(FeaturesService featureService) {
- this.featuresService = featureService;
- }
+ public void setFeaturesService(FeaturesService featureService) {
+ this.featuresService = featureService;
+ }
}
http://git-wip-us.apache.org/repos/asf/karaf-cellar/blob/96d50bb8/bundle/src/main/java/org/apache/karaf/cellar/bundle/BundleSynchronizer.java
----------------------------------------------------------------------
diff --git a/bundle/src/main/java/org/apache/karaf/cellar/bundle/BundleSynchronizer.java b/bundle/src/main/java/org/apache/karaf/cellar/bundle/BundleSynchronizer.java
index b8278e2..9722a20 100644
--- a/bundle/src/main/java/org/apache/karaf/cellar/bundle/BundleSynchronizer.java
+++ b/bundle/src/main/java/org/apache/karaf/cellar/bundle/BundleSynchronizer.java
@@ -16,12 +16,10 @@ 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;
import org.osgi.framework.BundleContext;
-import org.osgi.framework.BundleEvent;
import org.osgi.framework.BundleException;
import org.osgi.framework.BundleReference;
import org.osgi.service.cm.Configuration;
@@ -41,7 +39,15 @@ public class BundleSynchronizer extends BundleSupport implements Synchronizer {
private static final transient Logger LOGGER = LoggerFactory.getLogger(BundleSynchronizer.class);
+ private EventProducer eventProducer;
+
+ public void setEventProducer(EventProducer eventProducer) {
+ this.eventProducer = eventProducer;
+ }
+
public void init() {
+ if (groupManager == null)
+ return;
Set<Group> groups = groupManager.listLocalGroups();
if (groups != null && !groups.isEmpty()) {
for (Group group : groups) {
@@ -62,19 +68,32 @@ public class BundleSynchronizer extends BundleSupport implements Synchronizer {
@Override
public void sync(Group group) {
String policy = getSyncPolicy(group);
- if (policy != null && policy.equalsIgnoreCase("cluster")) {
- LOGGER.debug("CELLAR BUNDLE: sync policy is set as 'cluster' for cluster group " + group.getName());
- if (clusterManager.listNodesByGroup(group).size() == 1 && clusterManager.listNodesByGroup(group).contains(clusterManager.getNode())) {
- LOGGER.debug("CELLAR BUNDLE: node is the first and only member of the group, pushing state");
- push(group);
- } else {
- LOGGER.debug("CELLAR BUNDLE: pulling state");
- pull(group);
- }
+ if (policy == null) {
+ LOGGER.warn("CELLAR BUNDLE: sync policy is not defined for cluster group " + group.getName());
}
- if (policy != null && policy.equalsIgnoreCase("node")) {
- LOGGER.debug("CELLAR BUNDLE: sync policy is set as 'node' for cluster group " + group.getName());
+ if (policy.equalsIgnoreCase("cluster")) {
+ LOGGER.debug("CELLAR BUNDLE: sync policy set as 'cluster' for cluster group " + group.getName());
+ LOGGER.debug("CELLAR BUNDLE: updating node from the cluster (pull first)");
+ pull(group);
+ LOGGER.debug("CELLAR BUNDLE: updating cluster from the local node (push after)");
push(group);
+ } else if (policy.equalsIgnoreCase("node")) {
+ LOGGER.debug("CELLAR BUNDLE: sync policy set as 'node' for cluster group " + group.getName());
+ LOGGER.debug("CELLAR BUNDLE: updating cluster from the local node (push first)");
+ push(group);
+ LOGGER.debug("CELLAR BUNDLE: updating node from the cluster (pull after)");
+ pull(group);
+ } else if (policy.equalsIgnoreCase("clusterOnly")) {
+ LOGGER.debug("CELLAR BUNDLE: sync policy set as 'clusterOnly' for cluster group " + group.getName());
+ LOGGER.debug("CELLAR BUNDLE: updating node from the cluster (pull only)");
+ pull(group);
+ } else if (policy.equalsIgnoreCase("nodeOnly")) {
+ LOGGER.debug("CELLAR BUNDLE: sync policy set as 'nodeOnly' for cluster group " + group.getName());
+ LOGGER.debug("CELLAR BUNDLE: updating cluster from the local node (push only)");
+ push(group);
+ } else {
+ LOGGER.debug("CELLAR BUNDLE: sync policy set as 'disabled' for cluster group " + group.getName());
+ LOGGER.debug("CELLAR BUNDLE: no sync");
}
}
@@ -106,11 +125,24 @@ public class BundleSynchronizer extends BundleSupport implements Synchronizer {
String bundleLocation = state.getLocation();
if (isAllowed(group, Constants.CATEGORY, bundleLocation, EventType.INBOUND)) {
try {
- if (state.getStatus() == BundleEvent.INSTALLED) {
- installBundleFromLocation(state.getLocation());
- } else if (state.getStatus() == BundleEvent.STARTED) {
- installBundleFromLocation(state.getLocation());
- startBundle(symbolicName, version);
+ if (state.getStatus() == Bundle.INSTALLED) {
+ if (!isInstalled(state.getLocation())) {
+ LOGGER.debug("CELLAR BUNDLE: installing bundle located {}", state.getLocation());
+ installBundleFromLocation(state.getLocation());
+ } else {
+ LOGGER.debug("CELLAR BUNDLE: bundle located {} already installed on node", state.getLocation());
+ }
+ } else if (state.getStatus() == Bundle.ACTIVE) {
+ if (!isInstalled(state.getLocation())) {
+ LOGGER.debug("CELLAR BUNDLE: installing bundle located {}", state.getLocation());
+ installBundleFromLocation(state.getLocation());
+ }
+ if (!isStarted(state.getLocation())) {
+ LOGGER.debug("CELLAR BUNDLE: starting bundle {}/{}", symbolicName, version);
+ startBundle(symbolicName, version);
+ } else {
+ LOGGER.debug("CELLAR BUNDLE: bundle located {} already started on node", state.getLocation());
+ }
}
} catch (BundleException e) {
LOGGER.error("CELLAR BUNDLE: failed to pull bundle {}", id, e);
@@ -148,43 +180,49 @@ public class BundleSynchronizer extends BundleSupport implements Synchronizer {
for (Bundle bundle : bundles) {
long bundleId = bundle.getBundleId();
String symbolicName = bundle.getSymbolicName();
- String version = bundle.getVersion().toString();
+ String version = bundle.getHeaders().get(org.osgi.framework.Constants.BUNDLE_VERSION);
String bundleLocation = bundle.getLocation();
int status = bundle.getState();
String id = symbolicName + "/" + version;
// check if the pid is marked as local.
if (isAllowed(group, Constants.CATEGORY, bundleLocation, EventType.OUTBOUND)) {
-
- BundleState bundleState = new BundleState();
- // get the bundle name or location.
- String name = (String) bundle.getHeaders().get(org.osgi.framework.Constants.BUNDLE_NAME);
- // if there is no name, then default to symbolic name.
- name = (name == null) ? symbolicName : name;
- // if there is no symbolic name, resort to location.
- name = (name == null) ? bundle.getLocation() : name;
- bundleState.setId(bundleId);
- bundleState.setName(name);
- bundleState.setSymbolicName(symbolicName);
- bundleState.setVersion(version);
- bundleState.setLocation(bundleLocation);
-
- if (status == Bundle.ACTIVE)
- status = BundleEvent.STARTED;
- if (status == Bundle.INSTALLED)
- status = BundleEvent.INSTALLED;
- if (status == Bundle.RESOLVED)
- status = BundleEvent.RESOLVED;
- if (status == Bundle.STARTING)
- status = BundleEvent.STARTING;
- if (status == Bundle.UNINSTALLED)
- status = BundleEvent.UNINSTALLED;
- if (status == Bundle.STOPPING)
- status = BundleEvent.STARTED;
-
- bundleState.setStatus(status);
-
- clusterBundles.put(id, bundleState);
+ if (!clusterBundles.containsKey(id)) {
+ LOGGER.debug("CELLAR BUNDLE: deploying bundle {} on the cluster", id);
+ BundleState bundleState = new BundleState();
+ // get the bundle name or location.
+ String name = (String) bundle.getHeaders().get(org.osgi.framework.Constants.BUNDLE_NAME);
+ // if there is no name, then default to symbolic name.
+ name = (name == null) ? symbolicName : name;
+ // if there is no symbolic name, resort to location.
+ name = (name == null) ? bundle.getLocation() : name;
+ bundleState.setId(bundleId);
+ bundleState.setName(name);
+ bundleState.setSymbolicName(symbolicName);
+ bundleState.setVersion(version);
+ bundleState.setLocation(bundleLocation);
+ bundleState.setStatus(status);
+ // update cluster state
+ clusterBundles.put(id, bundleState);
+ // send cluster event
+ ClusterBundleEvent clusterEvent = new ClusterBundleEvent(symbolicName, version, bundleLocation, status);
+ clusterEvent.setSourceGroup(group);
+ clusterEvent.setSourceNode(clusterManager.getNode());
+ eventProducer.produce(clusterEvent);
+ } else {
+ BundleState bundleState = clusterBundles.get(id);
+ if (bundleState.getStatus() != status) {
+ LOGGER.debug("CELLAR BUNDLE: updating bundle {} on the cluster", id);
+ // update cluster state
+ bundleState.setStatus(status);
+ clusterBundles.put(id, bundleState);
+ // send cluster event
+ ClusterBundleEvent clusterEvent = new ClusterBundleEvent(symbolicName, version, bundleLocation, status);
+ clusterEvent.setSourceGroup(group);
+ clusterEvent.setSourceNode(clusterManager.getNode());
+ eventProducer.produce(clusterEvent);
+ }
+ }
} else LOGGER.trace("CELLAR BUNDLE: bundle {} is marked BLOCKED OUTBOUND for cluster group {}", bundleLocation, groupName);
}
@@ -217,4 +255,4 @@ public class BundleSynchronizer extends BundleSupport implements Synchronizer {
return "disabled";
}
-}
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/karaf-cellar/blob/96d50bb8/bundle/src/main/java/org/apache/karaf/cellar/bundle/LocalBundleListener.java
----------------------------------------------------------------------
diff --git a/bundle/src/main/java/org/apache/karaf/cellar/bundle/LocalBundleListener.java b/bundle/src/main/java/org/apache/karaf/cellar/bundle/LocalBundleListener.java
index 39c2f56..9d9cfcf 100644
--- a/bundle/src/main/java/org/apache/karaf/cellar/bundle/LocalBundleListener.java
+++ b/bundle/src/main/java/org/apache/karaf/cellar/bundle/LocalBundleListener.java
@@ -55,7 +55,7 @@ public class LocalBundleListener extends BundleSupport implements SynchronousBun
}
if (!isEnabled()) {
- LOGGER.debug("CELLAR BUNDLE: local listener is disabled");
+ LOGGER.trace("CELLAR BUNDLE: local listener is disabled");
return;
}
@@ -89,7 +89,7 @@ public class LocalBundleListener extends BundleSupport implements SynchronousBun
String symbolicName = event.getBundle().getSymbolicName();
String version = event.getBundle().getHeaders().get(org.osgi.framework.Constants.BUNDLE_VERSION);
String bundleLocation = event.getBundle().getLocation();
- int type = event.getType();
+ int status = event.getBundle().getState();
if (isAllowed(group, Constants.CATEGORY, bundleLocation, EventType.OUTBOUND)) {
@@ -99,7 +99,7 @@ public class LocalBundleListener extends BundleSupport implements SynchronousBun
try {
// update bundles in the cluster group
Map<String, BundleState> clusterBundles = clusterManager.getMap(Constants.BUNDLE_MAP + Configurations.SEPARATOR + group.getName());
- if (type == BundleEvent.UNINSTALLED) {
+ if (event.getType() == BundleEvent.UNINSTALLED) {
clusterBundles.remove(symbolicName + "/" + version);
} else {
BundleState state = clusterBundles.get(symbolicName + "/" + version);
@@ -110,27 +110,28 @@ public class LocalBundleListener extends BundleSupport implements SynchronousBun
state.setName(name);
state.setVersion(version);
state.setSymbolicName(symbolicName);
- state.setStatus(type);
+ state.setStatus(status);
state.setLocation(bundleLocation);
clusterBundles.put(symbolicName + "/" + version, state);
}
// check the features first
- List<Feature> matchingFeatures = retrieveFeature(bundleLocation);
- for (Feature feature : matchingFeatures) {
- if (!isAllowed(group, "features", feature.getName(), EventType.OUTBOUND)) {
- LOGGER.trace("CELLAR BUNDLE: bundle {} is contained in feature {} marked BLOCKED OUTBOUND for cluster group {}", bundleLocation, feature.getName(), group.getName());
- return;
- }
- }
-
+ List<Feature> matchingFeatures = retrieveFeature(bundleLocation);
+ for (Feature feature : matchingFeatures) {
+ if (!isAllowed(group, "features", feature.getName(), EventType.OUTBOUND)) {
+ LOGGER.trace("CELLAR BUNDLE: bundle {} is contained in feature {} marked BLOCKED OUTBOUND for cluster group {}", bundleLocation, feature.getName(), group.getName());
+ return;
+ }
+ }
+
// broadcast the cluster event
- ClusterBundleEvent clusterBundleEvent = new ClusterBundleEvent(symbolicName, version, bundleLocation, type);
+ ClusterBundleEvent clusterBundleEvent = new ClusterBundleEvent(symbolicName, version, bundleLocation, status);
clusterBundleEvent.setSourceGroup(group);
+ clusterBundleEvent.setSourceNode(clusterManager.getNode());
eventProducer.produce(clusterBundleEvent);
} catch (Exception e) {
- LOGGER.error("CELLAR BUNDLE: failed to create bundle event", e);
- } finally {
+ LOGGER.error("CELLAR BUNDLE: failed to create bundle event", e);
+ } finally {
Thread.currentThread().setContextClassLoader(originalClassLoader);
}
@@ -175,4 +176,4 @@ public class LocalBundleListener extends BundleSupport implements SynchronousBun
this.eventProducer = eventProducer;
}
-}
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/karaf-cellar/blob/96d50bb8/bundle/src/main/java/org/apache/karaf/cellar/bundle/management/internal/CellarBundleMBeanImpl.java
----------------------------------------------------------------------
diff --git a/bundle/src/main/java/org/apache/karaf/cellar/bundle/management/internal/CellarBundleMBeanImpl.java b/bundle/src/main/java/org/apache/karaf/cellar/bundle/management/internal/CellarBundleMBeanImpl.java
index 231aa73..44cdacf 100644
--- a/bundle/src/main/java/org/apache/karaf/cellar/bundle/management/internal/CellarBundleMBeanImpl.java
+++ b/bundle/src/main/java/org/apache/karaf/cellar/bundle/management/internal/CellarBundleMBeanImpl.java
@@ -16,16 +16,13 @@ package org.apache.karaf.cellar.bundle.management.internal;
import org.apache.karaf.cellar.bundle.BundleState;
import org.apache.karaf.cellar.bundle.ClusterBundleEvent;
import org.apache.karaf.cellar.bundle.Constants;
-import org.apache.karaf.cellar.bundle.shell.BundleCommandSupport;
import org.apache.karaf.cellar.core.*;
-import org.apache.karaf.cellar.core.control.ManageGroupAction;
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.apache.karaf.cellar.bundle.management.CellarBundleMBean;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;
-import org.osgi.framework.BundleEvent;
import org.osgi.service.cm.ConfigurationAdmin;
import javax.management.NotCompliantMBeanException;
@@ -149,9 +146,9 @@ public class CellarBundleMBeanImpl extends StandardMBean implements CellarBundle
state.setId(clusterBundles.size());
state.setLocation(location);
if (start) {
- state.setStatus(BundleEvent.STARTED);
+ state.setStatus(Bundle.ACTIVE);
} else {
- state.setStatus(BundleEvent.INSTALLED);
+ state.setStatus(Bundle.INSTALLED);
}
clusterBundles.put(symbolicName + "/" + version, state);
} finally {
@@ -159,10 +156,10 @@ public class CellarBundleMBeanImpl extends StandardMBean implements CellarBundle
}
// broadcast the event
- ClusterBundleEvent event = new ClusterBundleEvent(symbolicName, version, location, BundleEvent.INSTALLED);
+ ClusterBundleEvent event = new ClusterBundleEvent(symbolicName, version, location, Bundle.INSTALLED);
event.setSourceGroup(group);
if (start) {
- event = new ClusterBundleEvent(symbolicName, version, location, BundleEvent.STARTED);
+ event = new ClusterBundleEvent(symbolicName, version, location, Bundle.ACTIVE);
event.setSourceGroup(group);
}
eventProducer.produce(event);
@@ -212,7 +209,7 @@ public class CellarBundleMBeanImpl extends StandardMBean implements CellarBundle
// broadcast the cluster event
String[] split = bundle.split("/");
- ClusterBundleEvent event = new ClusterBundleEvent(split[0], split[1], location, BundleEvent.UNINSTALLED);
+ ClusterBundleEvent event = new ClusterBundleEvent(split[0], split[1], location, Bundle.UNINSTALLED);
event.setSourceGroup(group);
eventProducer.produce(event);
}
@@ -263,12 +260,12 @@ public class CellarBundleMBeanImpl extends StandardMBean implements CellarBundle
}
// update the cluster state
- state.setStatus(BundleEvent.STARTED);
+ state.setStatus(Bundle.ACTIVE);
clusterBundles.put(bundle, state);
// broadcast the cluster event
String[] split = bundle.split("/");
- ClusterBundleEvent event = new ClusterBundleEvent(split[0], split[1], location, BundleEvent.STARTED);
+ ClusterBundleEvent event = new ClusterBundleEvent(split[0], split[1], location, Bundle.ACTIVE);
event.setSourceGroup(group);
eventProducer.produce(event);
}
@@ -316,12 +313,12 @@ public class CellarBundleMBeanImpl extends StandardMBean implements CellarBundle
}
// update the cluster state
- state.setStatus(BundleEvent.STOPPED);
+ state.setStatus(Bundle.RESOLVED);
clusterBundles.put(bundle, state);
// broadcast the cluster event
String[] split = bundle.split("/");
- ClusterBundleEvent event = new ClusterBundleEvent(split[0], split[1], location, BundleEvent.STOPPED);
+ ClusterBundleEvent event = new ClusterBundleEvent(split[0], split[1], location, Bundle.RESOLVED);
event.setSourceGroup(group);
eventProducer.produce(event);
}
@@ -396,25 +393,22 @@ public class CellarBundleMBeanImpl extends StandardMBean implements CellarBundle
for (ExtendedBundleState bundle : bundles) {
String status;
switch (bundle.getStatus()) {
- case BundleEvent.INSTALLED:
+ case Bundle.INSTALLED:
status = "Installed";
break;
- case BundleEvent.RESOLVED:
+ case Bundle.RESOLVED:
status = "Resolved";
break;
- case BundleEvent.STARTED:
+ case Bundle.ACTIVE:
status = "Active";
break;
- case BundleEvent.STARTING:
+ case Bundle.STARTING:
status = "Starting";
break;
- case BundleEvent.STOPPED:
- status = "Resolved";
- break;
- case BundleEvent.STOPPING:
+ case Bundle.STOPPING:
status = "Stopping";
break;
- case BundleEvent.UNINSTALLED:
+ case Bundle.UNINSTALLED:
status = "Uninstalled";
break;
default:
@@ -604,23 +598,10 @@ public class CellarBundleMBeanImpl extends StandardMBean implements CellarBundle
name = (name == null) ? bundle.getLocation() : name;
extendedState.setId(bundle.getBundleId());
extendedState.setName(name);
- extendedState.setVersion(bundle.getHeaders().get("Bundle-Version").toString());
+ extendedState.setVersion(bundle.getHeaders().get(org.osgi.framework.Constants.BUNDLE_VERSION));
extendedState.setSymbolicName(bundle.getSymbolicName());
extendedState.setLocation(bundle.getLocation());
- int status = bundle.getState();
- if (status == Bundle.ACTIVE)
- status = BundleEvent.STARTED;
- if (status == Bundle.INSTALLED)
- status = BundleEvent.INSTALLED;
- if (status == Bundle.RESOLVED)
- status = BundleEvent.RESOLVED;
- if (status == Bundle.STARTING)
- status = BundleEvent.STARTING;
- if (status == Bundle.UNINSTALLED)
- status = BundleEvent.UNINSTALLED;
- if (status == Bundle.STOPPING)
- status = BundleEvent.STARTED;
- extendedState.setStatus(status);
+ extendedState.setStatus(bundle.getState());
extendedState.setCluster(false);
extendedState.setLocal(true);
bundles.put(key, extendedState);
@@ -658,4 +639,4 @@ public class CellarBundleMBeanImpl extends StandardMBean implements CellarBundle
}
}
-}
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/karaf-cellar/blob/96d50bb8/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/BlockCommand.java
----------------------------------------------------------------------
diff --git a/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/BlockCommand.java b/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/BlockCommand.java
index 098d38a..88a9b69 100644
--- a/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/BlockCommand.java
+++ b/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/BlockCommand.java
@@ -39,7 +39,6 @@ public class BlockCommand extends BundleCommandSupport {
boolean blacklist = false;
public Object doExecute() throws Exception {
-
Group group = groupManager.findGroupByName(groupName);
if (group == null) {
System.err.println("Cluster group " + groupName + " doesn't exist");
@@ -48,85 +47,92 @@ public class BlockCommand extends BundleCommandSupport {
List<String> patterns = new ArrayList<String>();
- Map<String, ExtendedBundleState> bundles = gatherBundles();
- List<String> selectedBundles = selector(bundles);
- for (String selectedBundle : selectedBundles) {
- patterns.add(bundles.get(selectedBundle).getLocation());
- }
+ ClassLoader originalClassLoader = Thread.currentThread().getContextClassLoader();
+ Thread.currentThread().setContextClassLoader(getClass().getClassLoader());
- if (patterns.isEmpty() && ids != null) {
- for (String id : ids) {
- patterns.add(id);
+ try {
+ Map<String, ExtendedBundleState> bundles = gatherBundles(false);
+ List<String> selectedBundles = selector(bundles);
+ for (String selectedBundle : selectedBundles) {
+ patterns.add(bundles.get(selectedBundle).getLocation());
}
- }
- CellarSupport support = new CellarSupport();
- support.setClusterManager(clusterManager);
- support.setGroupManager(groupManager);
- support.setConfigurationAdmin(configurationAdmin);
+ if (patterns.isEmpty() && ids != null) {
+ for (String id : ids) {
+ patterns.add(id);
+ }
+ }
- if (!in && !out) {
- in = true;
- out = true;
- }
- if (!whitelist && !blacklist) {
- whitelist = true;
- blacklist = true;
- }
+ CellarSupport support = new CellarSupport();
+ support.setClusterManager(clusterManager);
+ support.setGroupManager(groupManager);
+ support.setConfigurationAdmin(configurationAdmin);
- if (patterns.isEmpty()) {
- // display mode
- if (in) {
- System.out.println("INBOUND:");
- if (whitelist) {
- System.out.print("\twhitelist: ");
- Set<String> list = support.getListEntries(Configurations.WHITELIST, groupName, Constants.CATEGORY, EventType.INBOUND);
- System.out.println(list.toString());
- }
- if (blacklist) {
- System.out.print("\tblacklist: ");
- Set<String> list = support.getListEntries(Configurations.BLACKLIST, groupName, Constants.CATEGORY, EventType.INBOUND);
- System.out.println(list.toString());
- }
+ if (!in && !out) {
+ in = true;
+ out = true;
}
- if (out) {
- System.out.println("OUTBOUND:");
- if (whitelist) {
- System.out.print("\twhitelist: ");
- Set<String> list = support.getListEntries(Configurations.WHITELIST, groupName, Constants.CATEGORY, EventType.OUTBOUND);
- System.out.println(list.toString());
- }
- if (blacklist) {
- System.out.print("\tblacklist: ");
- Set<String> list = support.getListEntries(Configurations.BLACKLIST, groupName, Constants.CATEGORY, EventType.OUTBOUND);
- System.out.println(list.toString());
- }
+ if (!whitelist && !blacklist) {
+ whitelist = true;
+ blacklist = true;
}
- } else {
- // edit mode
- for (String pattern : patterns) {
- System.out.println("Updating blocking policy for " + pattern);
+
+ if (patterns.isEmpty()) {
+ // display mode
if (in) {
+ System.out.println("INBOUND:");
if (whitelist) {
- System.out.println("\tinbound whitelist ...");
- support.switchListEntry(Configurations.WHITELIST, groupName, Constants.CATEGORY, EventType.INBOUND, pattern);
+ System.out.print("\twhitelist: ");
+ Set<String> list = support.getListEntries(Configurations.WHITELIST, groupName, Constants.CATEGORY, EventType.INBOUND);
+ System.out.println(list.toString());
}
if (blacklist) {
- System.out.println("\tinbound blacklist ...");
- support.switchListEntry(Configurations.BLACKLIST, groupName, Constants.CATEGORY, EventType.INBOUND, pattern);
+ System.out.print("\tblacklist: ");
+ Set<String> list = support.getListEntries(Configurations.BLACKLIST, groupName, Constants.CATEGORY, EventType.INBOUND);
+ System.out.println(list.toString());
}
}
if (out) {
+ System.out.println("OUTBOUND:");
if (whitelist) {
- System.out.println("\toutbound whitelist ...");
- support.switchListEntry(Configurations.WHITELIST, groupName, Constants.CATEGORY, EventType.OUTBOUND, pattern);
+ System.out.print("\twhitelist: ");
+ Set<String> list = support.getListEntries(Configurations.WHITELIST, groupName, Constants.CATEGORY, EventType.OUTBOUND);
+ System.out.println(list.toString());
}
if (blacklist) {
- System.out.println("\toutbound blacklist ...");
- support.switchListEntry(Configurations.BLACKLIST, groupName, Constants.CATEGORY, EventType.OUTBOUND, pattern);
+ System.out.print("\tblacklist: ");
+ Set<String> list = support.getListEntries(Configurations.BLACKLIST, groupName, Constants.CATEGORY, EventType.OUTBOUND);
+ System.out.println(list.toString());
+ }
+ }
+ } else {
+ // edit mode
+ for (String pattern : patterns) {
+ System.out.println("Updating blocking policy for " + pattern);
+ if (in) {
+ if (whitelist) {
+ System.out.println("\tinbound whitelist ...");
+ support.switchListEntry(Configurations.WHITELIST, groupName, Constants.CATEGORY, EventType.INBOUND, pattern);
+ }
+ if (blacklist) {
+ System.out.println("\tinbound blacklist ...");
+ support.switchListEntry(Configurations.BLACKLIST, groupName, Constants.CATEGORY, EventType.INBOUND, pattern);
+ }
+ }
+ if (out) {
+ if (whitelist) {
+ System.out.println("\toutbound whitelist ...");
+ support.switchListEntry(Configurations.WHITELIST, groupName, Constants.CATEGORY, EventType.OUTBOUND, pattern);
+ }
+ if (blacklist) {
+ System.out.println("\toutbound blacklist ...");
+ support.switchListEntry(Configurations.BLACKLIST, groupName, Constants.CATEGORY, EventType.OUTBOUND, pattern);
+ }
}
}
}
+ } finally {
+ Thread.currentThread().setContextClassLoader(originalClassLoader);
}
return null;
http://git-wip-us.apache.org/repos/asf/karaf-cellar/blob/96d50bb8/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/BundleCommandSupport.java
----------------------------------------------------------------------
diff --git a/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/BundleCommandSupport.java b/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/BundleCommandSupport.java
index 66a73e5..39f6464 100644
--- a/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/BundleCommandSupport.java
+++ b/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/BundleCommandSupport.java
@@ -19,7 +19,6 @@ import org.apache.karaf.cellar.core.Configurations;
import org.apache.karaf.cellar.core.shell.CellarCommandSupport;
import org.apache.karaf.shell.commands.Argument;
import org.osgi.framework.Bundle;
-import org.osgi.framework.BundleEvent;
import java.util.ArrayList;
import java.util.HashMap;
@@ -158,7 +157,7 @@ public abstract class BundleCommandSupport extends CellarCommandSupport {
}
}
- protected Map<String, ExtendedBundleState> gatherBundles() {
+ protected Map<String, ExtendedBundleState> gatherBundles(boolean clusterOnly) {
Map<String, ExtendedBundleState> bundles = new HashMap<String, ExtendedBundleState>();
// retrieve bundles from the cluster
@@ -177,6 +176,9 @@ public abstract class BundleCommandSupport extends CellarCommandSupport {
bundles.put(key, extendedState);
}
+ if (clusterOnly)
+ return bundles;
+
// retrieve local bundles
for (Bundle bundle : bundleContext.getBundles()) {
String version = (String) bundle.getHeaders().get(org.osgi.framework.Constants.BUNDLE_VERSION);
@@ -195,22 +197,9 @@ public abstract class BundleCommandSupport extends CellarCommandSupport {
name = (name == null) ? bundle.getLocation() : name;
extendedState.setId(bundle.getBundleId());
extendedState.setName(name);
- extendedState.setVersion(bundle.getHeaders().get("Bundle-Version").toString());
+ extendedState.setVersion(bundle.getHeaders().get(org.osgi.framework.Constants.BUNDLE_VERSION));
extendedState.setLocation(bundle.getLocation());
- int status = bundle.getState();
- if (status == Bundle.ACTIVE)
- status = BundleEvent.STARTED;
- if (status == Bundle.INSTALLED)
- status = BundleEvent.INSTALLED;
- if (status == Bundle.RESOLVED)
- status = BundleEvent.RESOLVED;
- if (status == Bundle.STARTING)
- status = BundleEvent.STARTING;
- if (status == Bundle.UNINSTALLED)
- status = BundleEvent.UNINSTALLED;
- if (status == Bundle.STOPPING)
- status = BundleEvent.STARTED;
- extendedState.setStatus(status);
+ extendedState.setStatus(bundle.getState());
extendedState.setCluster(false);
extendedState.setLocal(true);
bundles.put(key, extendedState);
http://git-wip-us.apache.org/repos/asf/karaf-cellar/blob/96d50bb8/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/InstallBundleCommand.java
----------------------------------------------------------------------
diff --git a/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/InstallBundleCommand.java b/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/InstallBundleCommand.java
index 3f86aac..be29148 100644
--- a/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/InstallBundleCommand.java
+++ b/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/InstallBundleCommand.java
@@ -26,7 +26,7 @@ import org.apache.karaf.cellar.core.shell.CellarCommandSupport;
import org.apache.karaf.shell.commands.Argument;
import org.apache.karaf.shell.commands.Command;
import org.apache.karaf.shell.commands.Option;
-import org.osgi.framework.BundleEvent;
+import org.osgi.framework.Bundle;
import java.net.URL;
import java.util.List;
@@ -103,9 +103,9 @@ public class InstallBundleCommand extends CellarCommandSupport {
state.setId(clusterBundles.size());
state.setLocation(url);
if (start) {
- state.setStatus(BundleEvent.STARTED);
+ state.setStatus(Bundle.ACTIVE);
} else {
- state.setStatus(BundleEvent.INSTALLED);
+ state.setStatus(Bundle.INSTALLED);
}
clusterBundles.put(symbolicName + "/" + version, state);
} finally {
@@ -113,10 +113,12 @@ public class InstallBundleCommand extends CellarCommandSupport {
}
// broadcast the cluster event
- ClusterBundleEvent event = new ClusterBundleEvent(symbolicName, version, url, BundleEvent.INSTALLED);
- event.setSourceGroup(group);
+ ClusterBundleEvent event;
if (start) {
- event = new ClusterBundleEvent(symbolicName, version, url, BundleEvent.STARTED);
+ event = new ClusterBundleEvent(symbolicName, version, url, Bundle.ACTIVE);
+ event.setSourceGroup(group);
+ } else {
+ event = new ClusterBundleEvent(symbolicName, version, url, Bundle.INSTALLED);
event.setSourceGroup(group);
}
eventProducer.produce(event);
http://git-wip-us.apache.org/repos/asf/karaf-cellar/blob/96d50bb8/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/ListBundleCommand.java
----------------------------------------------------------------------
diff --git a/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/ListBundleCommand.java b/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/ListBundleCommand.java
index 165d5de..3bfa04a 100644
--- a/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/ListBundleCommand.java
+++ b/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/ListBundleCommand.java
@@ -21,7 +21,7 @@ import org.apache.karaf.cellar.core.event.EventType;
import org.apache.karaf.shell.commands.Command;
import org.apache.karaf.shell.commands.Option;
import org.apache.karaf.shell.table.ShellTable;
-import org.osgi.framework.BundleEvent;
+import org.osgi.framework.Bundle;
import java.util.*;
@@ -61,7 +61,7 @@ public class ListBundleCommand extends BundleCommandSupport {
Thread.currentThread().setContextClassLoader(getClass().getClassLoader());
try {
- Map<String, ExtendedBundleState> allBundles = gatherBundles();
+ Map<String, ExtendedBundleState> allBundles = gatherBundles(false);
if (allBundles != null && !allBundles.isEmpty()) {
System.out.println(String.format("Bundles in cluster group " + groupName));
@@ -85,25 +85,22 @@ public class ListBundleCommand extends BundleCommandSupport {
for (ExtendedBundleState bundle : bundles) {
String status;
switch (bundle.getStatus()) {
- case BundleEvent.INSTALLED:
+ case Bundle.INSTALLED:
status = "Installed";
break;
- case BundleEvent.RESOLVED:
+ case Bundle.RESOLVED:
status = "Resolved";
break;
- case BundleEvent.STARTED:
+ case Bundle.ACTIVE:
status = "Active";
break;
- case BundleEvent.STARTING:
+ case Bundle.STARTING:
status = "Starting";
break;
- case BundleEvent.STOPPED:
- status = "Resolved";
- break;
- case BundleEvent.STOPPING:
+ case Bundle.STOPPING:
status = "Stopping";
break;
- case BundleEvent.UNINSTALLED:
+ case Bundle.UNINSTALLED:
status = "Uninstalled";
break;
default:
http://git-wip-us.apache.org/repos/asf/karaf-cellar/blob/96d50bb8/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/StartBundleCommand.java
----------------------------------------------------------------------
diff --git a/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/StartBundleCommand.java b/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/StartBundleCommand.java
index 552d753..815b200 100644
--- a/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/StartBundleCommand.java
+++ b/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/StartBundleCommand.java
@@ -23,7 +23,7 @@ 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.apache.karaf.shell.commands.Command;
-import org.osgi.framework.BundleEvent;
+import org.osgi.framework.Bundle;
import java.util.List;
import java.util.Map;
@@ -55,7 +55,7 @@ public class StartBundleCommand extends BundleCommandSupport {
try {
Map<String, BundleState> clusterBundles = clusterManager.getMap(Constants.BUNDLE_MAP + Configurations.SEPARATOR + groupName);
- List<String> bundles = selector(gatherBundles());
+ List<String> bundles = selector(gatherBundles(true));
for (String bundle : bundles) {
BundleState state = clusterBundles.get(bundle);
@@ -74,12 +74,12 @@ public class StartBundleCommand extends BundleCommandSupport {
}
// update the cluster state
- state.setStatus(BundleEvent.STARTED);
+ state.setStatus(Bundle.ACTIVE);
clusterBundles.put(bundle, state);
// broadcast the cluster event
String[] split = bundle.split("/");
- ClusterBundleEvent event = new ClusterBundleEvent(split[0], split[1], location, BundleEvent.STARTED);
+ ClusterBundleEvent event = new ClusterBundleEvent(split[0], split[1], location, Bundle.ACTIVE);
event.setSourceGroup(group);
eventProducer.produce(event);
}
http://git-wip-us.apache.org/repos/asf/karaf-cellar/blob/96d50bb8/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/StopBundleCommand.java
----------------------------------------------------------------------
diff --git a/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/StopBundleCommand.java b/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/StopBundleCommand.java
index d91aa9a..8b6952e 100644
--- a/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/StopBundleCommand.java
+++ b/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/StopBundleCommand.java
@@ -23,7 +23,7 @@ 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.apache.karaf.shell.commands.Command;
-import org.osgi.framework.BundleEvent;
+import org.osgi.framework.Bundle;
import java.util.List;
import java.util.Map;
@@ -54,7 +54,7 @@ public class StopBundleCommand extends BundleCommandSupport {
try {
Map<String, BundleState> clusterBundles = clusterManager.getMap(Constants.BUNDLE_MAP + Configurations.SEPARATOR + groupName);
- List<String> bundles = selector(gatherBundles());
+ List<String> bundles = selector(gatherBundles(true));
for (String bundle : bundles) {
BundleState state = clusterBundles.get(bundle);
@@ -73,12 +73,12 @@ public class StopBundleCommand extends BundleCommandSupport {
}
// update the cluster state
- state.setStatus(BundleEvent.STOPPED);
+ state.setStatus(Bundle.RESOLVED);
clusterBundles.put(bundle, state);
// broadcast the cluster event
String[] split = bundle.split("/");
- ClusterBundleEvent event = new ClusterBundleEvent(split[0], split[1], location, BundleEvent.STOPPED);
+ ClusterBundleEvent event = new ClusterBundleEvent(split[0], split[1], location, Bundle.RESOLVED);
event.setSourceGroup(group);
eventProducer.produce(event);
}
http://git-wip-us.apache.org/repos/asf/karaf-cellar/blob/96d50bb8/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/UninstallBundleCommand.java
----------------------------------------------------------------------
diff --git a/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/UninstallBundleCommand.java b/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/UninstallBundleCommand.java
index 760a58a..2f98ec5 100644
--- a/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/UninstallBundleCommand.java
+++ b/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/UninstallBundleCommand.java
@@ -23,7 +23,7 @@ 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.apache.karaf.shell.commands.Command;
-import org.osgi.framework.BundleEvent;
+import org.osgi.framework.Bundle;
import java.util.List;
import java.util.Map;
@@ -55,7 +55,7 @@ public class UninstallBundleCommand extends BundleCommandSupport {
try {
Map<String, BundleState> clusterBundles = clusterManager.getMap(Constants.BUNDLE_MAP + Configurations.SEPARATOR + groupName);
- List<String> bundles = selector(gatherBundles());
+ List<String> bundles = selector(gatherBundles(true));
for (String bundle : bundles) {
BundleState state = clusterBundles.get(bundle);
@@ -78,7 +78,7 @@ public class UninstallBundleCommand extends BundleCommandSupport {
// broadcast the cluster event
String[] split = bundle.split("/");
- ClusterBundleEvent event = new ClusterBundleEvent(split[0], split[1], location, BundleEvent.UNINSTALLED);
+ ClusterBundleEvent event = new ClusterBundleEvent(split[0], split[1], location, Bundle.UNINSTALLED);
event.setSourceGroup(group);
eventProducer.produce(event);
}
http://git-wip-us.apache.org/repos/asf/karaf-cellar/blob/96d50bb8/bundle/src/main/resources/OSGI-INF/blueprint/blueprint.xml
----------------------------------------------------------------------
diff --git a/bundle/src/main/resources/OSGI-INF/blueprint/blueprint.xml b/bundle/src/main/resources/OSGI-INF/blueprint/blueprint.xml
index ec986e7..0742ab5 100644
--- a/bundle/src/main/resources/OSGI-INF/blueprint/blueprint.xml
+++ b/bundle/src/main/resources/OSGI-INF/blueprint/blueprint.xml
@@ -35,6 +35,7 @@
<property name="groupManager" ref="groupManager"/>
<property name="clusterManager" ref="clusterManager"/>
<property name="bundleContext" ref="blueprintBundleContext"/>
+ <property name="eventProducer" ref="eventProducer"/>
</bean>
<service ref="synchronizer" interface="org.apache.karaf.cellar.core.Synchronizer">
<service-properties>
http://git-wip-us.apache.org/repos/asf/karaf-cellar/blob/96d50bb8/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/QueueProducer.java
----------------------------------------------------------------------
diff --git a/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/QueueProducer.java b/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/QueueProducer.java
index 4dcf404..b489444 100644
--- a/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/QueueProducer.java
+++ b/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/QueueProducer.java
@@ -31,6 +31,7 @@ import com.hazelcast.core.HazelcastInstance;
import com.hazelcast.core.IQueue;
import org.apache.karaf.cellar.core.Configurations;
import org.apache.karaf.cellar.core.Node;
+import org.apache.karaf.cellar.core.command.Command;
import org.apache.karaf.cellar.core.command.Result;
import org.apache.karaf.cellar.core.control.BasicSwitch;
import org.apache.karaf.cellar.core.control.Switch;
@@ -71,7 +72,8 @@ public class QueueProducer<E extends Event> implements EventProducer<E> {
@Override
public void produce(E event) {
if (this.getSwitch().getStatus().equals(SwitchStatus.ON) || event.getForce() || event instanceof Result) {
- event.setSourceNode(node);
+ if (event instanceof Result || event instanceof Command)
+ event.setSourceNode(node);
try {
queue.put(event);
} catch (InterruptedException e) {
http://git-wip-us.apache.org/repos/asf/karaf-cellar/blob/96d50bb8/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/TopicProducer.java
----------------------------------------------------------------------
diff --git a/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/TopicProducer.java b/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/TopicProducer.java
index 65f20f1..6ea4fc9 100644
--- a/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/TopicProducer.java
+++ b/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/TopicProducer.java
@@ -17,6 +17,7 @@ import com.hazelcast.core.HazelcastInstance;
import com.hazelcast.core.ITopic;
import org.apache.karaf.cellar.core.Configurations;
import org.apache.karaf.cellar.core.Node;
+import org.apache.karaf.cellar.core.command.Command;
import org.apache.karaf.cellar.core.command.Result;
import org.apache.karaf.cellar.core.control.BasicSwitch;
import org.apache.karaf.cellar.core.control.Switch;
@@ -57,7 +58,8 @@ public class TopicProducer<E extends Event> implements EventProducer<E> {
@Override
public void produce(E event) {
if (this.getSwitch().getStatus().equals(SwitchStatus.ON) || event.getForce() || event instanceof Result) {
- event.setSourceNode(node);
+ if (event instanceof Result || event instanceof Command)
+ event.setSourceNode(node);
topic.publish(event);
} else {
if (eventSwitch.getStatus().equals(SwitchStatus.OFF)) {
[2/2] karaf-cellar git commit: [KARAF-3981] Improve config
synchronizer
Posted by jb...@apache.org.
[KARAF-3981] Improve config synchronizer
Project: http://git-wip-us.apache.org/repos/asf/karaf-cellar/repo
Commit: http://git-wip-us.apache.org/repos/asf/karaf-cellar/commit/f71624e5
Tree: http://git-wip-us.apache.org/repos/asf/karaf-cellar/tree/f71624e5
Diff: http://git-wip-us.apache.org/repos/asf/karaf-cellar/diff/f71624e5
Branch: refs/heads/cellar-3.0.x
Commit: f71624e5c3e1af7578741edade2a9b1c81e8f3dc
Parents: 96d50bb
Author: Jean-Baptiste Onofré <jb...@apache.org>
Authored: Sun Sep 13 06:58:57 2015 +0200
Committer: Jean-Baptiste Onofré <jb...@apache.org>
Committed: Mon Sep 14 08:33:59 2015 +0200
----------------------------------------------------------------------
.../karaf/cellar/bundle/BundleEventHandler.java | 2 +-
.../karaf/cellar/bundle/BundleSynchronizer.java | 20 ++++--
.../config/ConfigurationEventHandler.java | 6 ++
.../config/ConfigurationSynchronizer.java | 71 +++++++++++++++-----
.../config/LocalConfigurationListener.java | 6 +-
.../resources/OSGI-INF/blueprint/blueprint.xml | 1 +
6 files changed, 80 insertions(+), 26 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/karaf-cellar/blob/f71624e5/bundle/src/main/java/org/apache/karaf/cellar/bundle/BundleEventHandler.java
----------------------------------------------------------------------
diff --git a/bundle/src/main/java/org/apache/karaf/cellar/bundle/BundleEventHandler.java b/bundle/src/main/java/org/apache/karaf/cellar/bundle/BundleEventHandler.java
index 468ba29..edfe2d5 100644
--- a/bundle/src/main/java/org/apache/karaf/cellar/bundle/BundleEventHandler.java
+++ b/bundle/src/main/java/org/apache/karaf/cellar/bundle/BundleEventHandler.java
@@ -68,7 +68,7 @@ public class BundleEventHandler extends BundleSupport implements EventHandler<Cl
try {
// check if it's not a "local" event
if (event.getSourceNode() != null && event.getSourceNode().getId().equalsIgnoreCase(clusterManager.getNode().getId())) {
- LOGGER.debug("CELLAR BUNDLE: cluster event is local (coming from local synchronizer or listener)");
+ LOGGER.trace("CELLAR BUNDLE: cluster event is local (coming from local synchronizer or listener)");
return;
}
if (isAllowed(event.getSourceGroup(), Constants.CATEGORY, event.getLocation(), EventType.INBOUND)) {
http://git-wip-us.apache.org/repos/asf/karaf-cellar/blob/f71624e5/bundle/src/main/java/org/apache/karaf/cellar/bundle/BundleSynchronizer.java
----------------------------------------------------------------------
diff --git a/bundle/src/main/java/org/apache/karaf/cellar/bundle/BundleSynchronizer.java b/bundle/src/main/java/org/apache/karaf/cellar/bundle/BundleSynchronizer.java
index 9722a20..aee5a26 100644
--- a/bundle/src/main/java/org/apache/karaf/cellar/bundle/BundleSynchronizer.java
+++ b/bundle/src/main/java/org/apache/karaf/cellar/bundle/BundleSynchronizer.java
@@ -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;
@@ -69,16 +70,16 @@ public class BundleSynchronizer extends BundleSupport implements Synchronizer {
public void sync(Group group) {
String policy = getSyncPolicy(group);
if (policy == null) {
- LOGGER.warn("CELLAR BUNDLE: sync policy is not defined for cluster group " + group.getName());
+ LOGGER.warn("CELLAR BUNDLE: sync policy is not defined for cluster group {}", group.getName());
}
if (policy.equalsIgnoreCase("cluster")) {
- LOGGER.debug("CELLAR BUNDLE: sync policy set as 'cluster' for cluster group " + group.getName());
+ LOGGER.debug("CELLAR BUNDLE: sync policy set as 'cluster' for cluster group {}", group.getName());
LOGGER.debug("CELLAR BUNDLE: updating node from the cluster (pull first)");
pull(group);
LOGGER.debug("CELLAR BUNDLE: updating cluster from the local node (push after)");
push(group);
} else if (policy.equalsIgnoreCase("node")) {
- LOGGER.debug("CELLAR BUNDLE: sync policy set as 'node' for cluster group " + group.getName());
+ LOGGER.debug("CELLAR BUNDLE: sync policy set as 'node' for cluster group {}", group.getName());
LOGGER.debug("CELLAR BUNDLE: updating cluster from the local node (push first)");
push(group);
LOGGER.debug("CELLAR BUNDLE: updating node from the cluster (pull after)");
@@ -127,18 +128,18 @@ public class BundleSynchronizer extends BundleSupport implements Synchronizer {
try {
if (state.getStatus() == Bundle.INSTALLED) {
if (!isInstalled(state.getLocation())) {
- LOGGER.debug("CELLAR BUNDLE: installing bundle located {}", state.getLocation());
+ LOGGER.debug("CELLAR BUNDLE: installing bundle located {} on node", state.getLocation());
installBundleFromLocation(state.getLocation());
} else {
LOGGER.debug("CELLAR BUNDLE: bundle located {} already installed on node", state.getLocation());
}
} else if (state.getStatus() == Bundle.ACTIVE) {
if (!isInstalled(state.getLocation())) {
- LOGGER.debug("CELLAR BUNDLE: installing bundle located {}", state.getLocation());
+ LOGGER.debug("CELLAR BUNDLE: installing bundle located {} on node", state.getLocation());
installBundleFromLocation(state.getLocation());
}
if (!isStarted(state.getLocation())) {
- LOGGER.debug("CELLAR BUNDLE: starting bundle {}/{}", symbolicName, version);
+ LOGGER.debug("CELLAR BUNDLE: starting bundle {}/{} on node", symbolicName, version);
startBundle(symbolicName, version);
} else {
LOGGER.debug("CELLAR BUNDLE: bundle located {} already started on node", state.getLocation());
@@ -165,6 +166,11 @@ public class BundleSynchronizer extends BundleSupport implements Synchronizer {
@Override
public void push(Group group) {
+ if (eventProducer.getSwitch().getStatus().equals(SwitchStatus.OFF)) {
+ LOGGER.warn("CELLAR BUNDLE: cluster event producer is OFF");
+ return;
+ }
+
if (group != null) {
String groupName = group.getName();
LOGGER.debug("CELLAR BUNDLE: pushing bundles to cluster group {}", groupName);
@@ -255,4 +261,4 @@ public class BundleSynchronizer extends BundleSupport implements Synchronizer {
return "disabled";
}
-}
\ No newline at end of file
+}
http://git-wip-us.apache.org/repos/asf/karaf-cellar/blob/f71624e5/config/src/main/java/org/apache/karaf/cellar/config/ConfigurationEventHandler.java
----------------------------------------------------------------------
diff --git a/config/src/main/java/org/apache/karaf/cellar/config/ConfigurationEventHandler.java b/config/src/main/java/org/apache/karaf/cellar/config/ConfigurationEventHandler.java
index 9382414..682bc2c 100644
--- a/config/src/main/java/org/apache/karaf/cellar/config/ConfigurationEventHandler.java
+++ b/config/src/main/java/org/apache/karaf/cellar/config/ConfigurationEventHandler.java
@@ -62,6 +62,12 @@ public class ConfigurationEventHandler extends ConfigurationSupport implements E
return;
}
+ // check if it's not a "local" event
+ if (event.getSourceNode() != null && event.getSourceNode().getId().equalsIgnoreCase(clusterManager.getNode().getId())) {
+ LOGGER.trace("CELLAR CONFIG: cluster event is local (coming from local synchronizer or listener)");
+ return;
+ }
+
Group group = event.getSourceGroup();
String groupName = group.getName();
http://git-wip-us.apache.org/repos/asf/karaf-cellar/blob/f71624e5/config/src/main/java/org/apache/karaf/cellar/config/ConfigurationSynchronizer.java
----------------------------------------------------------------------
diff --git a/config/src/main/java/org/apache/karaf/cellar/config/ConfigurationSynchronizer.java b/config/src/main/java/org/apache/karaf/cellar/config/ConfigurationSynchronizer.java
index 307ae19..84df57a 100644
--- a/config/src/main/java/org/apache/karaf/cellar/config/ConfigurationSynchronizer.java
+++ b/config/src/main/java/org/apache/karaf/cellar/config/ConfigurationSynchronizer.java
@@ -38,8 +38,10 @@ public class ConfigurationSynchronizer extends ConfigurationSupport implements S
private static final transient Logger LOGGER = LoggerFactory.getLogger(ConfigurationSynchronizer.class);
- public ConfigurationSynchronizer() {
- // nothing to do
+ private EventProducer eventProducer;
+
+ public void setEventProducer(EventProducer eventProducer) {
+ this.eventProducer = eventProducer;
}
public void init() {
@@ -63,19 +65,32 @@ public class ConfigurationSynchronizer extends ConfigurationSupport implements S
@Override
public void sync(Group group) {
String policy = getSyncPolicy(group);
- if (policy != null && policy.equalsIgnoreCase("cluster")) {
- LOGGER.debug("CELLAR CONFIG: sync policy is set as 'cluster' for cluster group " + group.getName());
- if (clusterManager.listNodesByGroup(group).size() == 1 && clusterManager.listNodesByGroup(group).contains(clusterManager.getNode())) {
- LOGGER.debug("CELLAR CONFIG: node is the first and only member of the group, pushing state");
- push(group);
- } else {
- LOGGER.debug("CELLAR CONFIG: pulling state");
- pull(group);
- }
+ if (policy == null) {
+ LOGGER.warn("CELLAR CONFIG: sync policy is not defined for cluster group {}", group.getName());
}
- if (policy != null && policy.equalsIgnoreCase("node")) {
- LOGGER.debug("CELLAR CONFIG: sync policy is set as 'node' for cluster group " + group.getName());
+ if (policy.equalsIgnoreCase("cluster")) {
+ LOGGER.debug("CELLAR CONFIG: sync policy set as 'cluster' for cluster group {}", group.getName());
+ LOGGER.debug("CELLAR CONFIG: updating node from the cluster (pull first)");
+ pull(group);
+ LOGGER.debug("CELLAR CONFIG: updating cluster from the local node (push after)");
+ push(group);
+ } else if (policy.equalsIgnoreCase("node")) {
+ LOGGER.debug("CELLAR CONFIG: sync policy set as 'node' for cluster group {}", group.getName());
+ LOGGER.debug("CELLAR CONFIG: updating cluster from the local node (push first)");
push(group);
+ LOGGER.debug("CELLAR CONFIG: updating node from the cluster (pull after)");
+ pull(group);
+ } else if (policy.equalsIgnoreCase("clusterOnly")) {
+ LOGGER.debug("CELLAR CONFIG: sync policy set as 'clusterOnly' for cluster group " + group.getName());
+ LOGGER.debug("CELLAR CONFIG: updating node from the cluster (pull only)");
+ pull(group);
+ } else if (policy.equalsIgnoreCase("nodeOnly")) {
+ LOGGER.debug("CELLAR CONFIG: sync policy set as 'nodeOnly' for cluster group " + group.getName());
+ LOGGER.debug("CELLAR CONFIG: updating cluster from the local node (push only)");
+ push(group);
+ } else {
+ LOGGER.debug("CELLAR CONFIG: sync policy set as 'disabled' for cluster group " + group.getName());
+ LOGGER.debug("CELLAR CONFIG: no sync");
}
}
@@ -107,6 +122,7 @@ public class ConfigurationSynchronizer extends ConfigurationSupport implements S
localDictionary = filter(localDictionary);
if (!equals(clusterDictionary, localDictionary)) {
+ LOGGER.debug("CELLAR CONFIG: updating configration {} on node", pid);
localConfiguration.update((Dictionary) clusterDictionary);
persistConfiguration(configurationAdmin, pid, clusterDictionary);
}
@@ -128,6 +144,11 @@ public class ConfigurationSynchronizer extends ConfigurationSupport implements S
*/
public void push(Group group) {
+ if (eventProducer.getSwitch().getStatus().equals(SwitchStatus.OFF)) {
+ LOGGER.warn("CELLAR CONFIG: cluster event producer is OFF");
+ return;
+ }
+
if (group != null) {
String groupName = group.getName();
LOGGER.debug("CELLAR CONFIG: pushing configurations to cluster group {}", groupName);
@@ -145,8 +166,28 @@ public class ConfigurationSynchronizer extends ConfigurationSupport implements S
if (isAllowed(group, Constants.CATEGORY, pid, EventType.OUTBOUND)) {
Dictionary localDictionary = localConfiguration.getProperties();
localDictionary = filter(localDictionary);
- // update the configurations in the cluster group
- clusterConfigurations.put(pid, dictionaryToProperties(localDictionary));
+ if (!clusterConfigurations.containsKey(pid)) {
+ LOGGER.debug("CELLAR CONFIG: creating configuration pid {} on the cluster", pid);
+ // update cluster configurations
+ clusterConfigurations.put(pid, dictionaryToProperties(localDictionary));
+ // send cluster event
+ ClusterConfigurationEvent event = new ClusterConfigurationEvent(pid);
+ event.setSourceGroup(group);
+ event.setSourceNode(clusterManager.getNode());
+ eventProducer.produce(event);
+ } else {
+ Dictionary clusterDictionary = clusterConfigurations.get(pid);
+ if (!equals(clusterDictionary, localDictionary)) {
+ LOGGER.debug("CELLAR CONFIG: updating configuration pid {} on the cluster", pid);
+ // update cluster configurations
+ clusterConfigurations.put(pid, dictionaryToProperties(localDictionary));
+ // send cluster event
+ ClusterConfigurationEvent event = new ClusterConfigurationEvent(pid);
+ event.setSourceGroup(group);
+ event.setSourceNode(clusterManager.getNode());
+ eventProducer.produce(event);
+ }
+ }
} else
LOGGER.trace("CELLAR CONFIG: configuration with PID {} is marked BLOCKED OUTBOUND for cluster group {}", pid, groupName);
}
http://git-wip-us.apache.org/repos/asf/karaf-cellar/blob/f71624e5/config/src/main/java/org/apache/karaf/cellar/config/LocalConfigurationListener.java
----------------------------------------------------------------------
diff --git a/config/src/main/java/org/apache/karaf/cellar/config/LocalConfigurationListener.java b/config/src/main/java/org/apache/karaf/cellar/config/LocalConfigurationListener.java
index 8846e70..67fb201 100644
--- a/config/src/main/java/org/apache/karaf/cellar/config/LocalConfigurationListener.java
+++ b/config/src/main/java/org/apache/karaf/cellar/config/LocalConfigurationListener.java
@@ -45,7 +45,7 @@ public class LocalConfigurationListener extends ConfigurationSupport implements
public void configurationEvent(ConfigurationEvent event) {
if (!isEnabled()) {
- LOGGER.debug("CELLAR CONFIG: local listener is disabled");
+ LOGGER.trace("CELLAR CONFIG: local listener is disabled");
return;
}
@@ -72,7 +72,7 @@ public class LocalConfigurationListener extends ConfigurationSupport implements
if (clusterConfigurations.containsKey(pid)) {
// update the configurations in the cluster group
clusterConfigurations.remove(pid);
- // broadcast the cluster event
+ // send the cluster event
ClusterConfigurationEvent clusterConfigurationEvent = new ClusterConfigurationEvent(pid);
clusterConfigurationEvent.setType(event.getType());
clusterConfigurationEvent.setSourceNode(clusterManager.getNode());
@@ -91,7 +91,7 @@ public class LocalConfigurationListener extends ConfigurationSupport implements
if (!equals(localDictionary, distributedDictionary)) {
// update the configurations in the cluster group
clusterConfigurations.put(pid, dictionaryToProperties(localDictionary));
- // broadcast the cluster event
+ // send the cluster event
ClusterConfigurationEvent clusterConfigurationEvent = new ClusterConfigurationEvent(pid);
clusterConfigurationEvent.setSourceGroup(group);
clusterConfigurationEvent.setSourceNode(clusterManager.getNode());
http://git-wip-us.apache.org/repos/asf/karaf-cellar/blob/f71624e5/config/src/main/resources/OSGI-INF/blueprint/blueprint.xml
----------------------------------------------------------------------
diff --git a/config/src/main/resources/OSGI-INF/blueprint/blueprint.xml b/config/src/main/resources/OSGI-INF/blueprint/blueprint.xml
index 1baf760..de653da 100644
--- a/config/src/main/resources/OSGI-INF/blueprint/blueprint.xml
+++ b/config/src/main/resources/OSGI-INF/blueprint/blueprint.xml
@@ -43,6 +43,7 @@
<property name="configurationAdmin" ref="configurationAdmin"/>
<property name="groupManager" ref="groupManager"/>
<property name="clusterManager" ref="clusterManager"/>
+ <property name="eventProducer" ref="eventProducer"/>
<property name="storage" value="${storage}"/>
</bean>
<service ref="synchronizer" interface="org.apache.karaf.cellar.core.Synchronizer">