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/01/11 16:17:29 UTC
karaf-cellar git commit: [KARAF-1157] Improve the cluster:sync
command and fix default property names
Repository: karaf-cellar
Updated Branches:
refs/heads/cellar-2.3.x 5ed6e332c -> 6ec9d8c16
[KARAF-1157] Improve the cluster:sync command and fix default property names
Project: http://git-wip-us.apache.org/repos/asf/karaf-cellar/repo
Commit: http://git-wip-us.apache.org/repos/asf/karaf-cellar/commit/6ec9d8c1
Tree: http://git-wip-us.apache.org/repos/asf/karaf-cellar/tree/6ec9d8c1
Diff: http://git-wip-us.apache.org/repos/asf/karaf-cellar/diff/6ec9d8c1
Branch: refs/heads/cellar-2.3.x
Commit: 6ec9d8c169ed073014af9f220a3041863ace14a3
Parents: 5ed6e33
Author: Jean-Baptiste Onofré <jb...@apache.org>
Authored: Sun Jan 11 15:49:51 2015 +0100
Committer: Jean-Baptiste Onofré <jb...@apache.org>
Committed: Sun Jan 11 16:17:06 2015 +0100
----------------------------------------------------------------------
assembly/src/main/resources/groups.cfg | 4 +-
assembly/src/main/resources/node.cfg | 2 +-
.../resources/OSGI-INF/blueprint/blueprint.xml | 6 +-
.../resources/OSGI-INF/blueprint/blueprint.xml | 6 +-
.../resources/OSGI-INF/blueprint/blueprint.xml | 6 +-
.../resources/OSGI-INF/blueprint/blueprint.xml | 6 +-
shell/pom.xml | 10 ++
.../apache/karaf/cellar/shell/SyncCommand.java | 131 ++++++++++++++++---
.../OSGI-INF/blueprint/shell-cluster.xml | 2 +
9 files changed, 149 insertions(+), 24 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/karaf-cellar/blob/6ec9d8c1/assembly/src/main/resources/groups.cfg
----------------------------------------------------------------------
diff --git a/assembly/src/main/resources/groups.cfg b/assembly/src/main/resources/groups.cfg
index 1b9d592..1bedaa0 100644
--- a/assembly/src/main/resources/groups.cfg
+++ b/assembly/src/main/resources/groups.cfg
@@ -49,7 +49,5 @@ default.features.blacklist.outbound = config,management,hazelcast,cellar*
#
default.bundle.sync = cluster
default.config.sync = cluster
-default.feature.sync = cluster
-default.feature.repositories.sync = cluster
+default.features.sync = cluster
default.obr.urls.sync = cluster
-default.obr.bundles.sync = cluster
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/karaf-cellar/blob/6ec9d8c1/assembly/src/main/resources/node.cfg
----------------------------------------------------------------------
diff --git a/assembly/src/main/resources/node.cfg b/assembly/src/main/resources/node.cfg
index 024a548..2ac4090 100644
--- a/assembly/src/main/resources/node.cfg
+++ b/assembly/src/main/resources/node.cfg
@@ -9,7 +9,7 @@ groups = default
#
bundle.listener = false
config.listener = false
-feature.listener = false
+features.listener = false
event.listener = true;
#
http://git-wip-us.apache.org/repos/asf/karaf-cellar/blob/6ec9d8c1/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 add5c38..1f04eb0 100644
--- a/bundle/src/main/resources/OSGI-INF/blueprint/blueprint.xml
+++ b/bundle/src/main/resources/OSGI-INF/blueprint/blueprint.xml
@@ -35,7 +35,11 @@
<property name="bundleContext" ref="blueprintBundleContext"/>
<property name="featuresService" ref="featuresService"/>
</bean>
- <service ref="synchronizer" interface="org.apache.karaf.cellar.core.Synchronizer"/>
+ <service ref="synchronizer" interface="org.apache.karaf.cellar.core.Synchronizer">
+ <service-properties>
+ <entry key="resource" value="bundle"/>
+ </service-properties>
+ </service>
<!-- Cluster Bundle Event Handler -->
<bean id="eventHandler" class="org.apache.karaf.cellar.bundle.BundleEventHandler"
http://git-wip-us.apache.org/repos/asf/karaf-cellar/blob/6ec9d8c1/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 ee5db17..d83f7e9 100644
--- a/config/src/main/resources/OSGI-INF/blueprint/blueprint.xml
+++ b/config/src/main/resources/OSGI-INF/blueprint/blueprint.xml
@@ -36,7 +36,11 @@
<property name="eventProducer" ref="eventProducer"/>
<property name="storage" value="${storage}"/>
</bean>
- <service ref="synchronizer" interface="org.apache.karaf.cellar.core.Synchronizer"/>
+ <service ref="synchronizer" interface="org.apache.karaf.cellar.core.Synchronizer">
+ <service-properties>
+ <entry key="resource" value="config"/>
+ </service-properties>
+ </service>
<!-- Cluster Event Handler -->
<bean id="eventHandler" class="org.apache.karaf.cellar.config.ConfigurationEventHandler"
http://git-wip-us.apache.org/repos/asf/karaf-cellar/blob/6ec9d8c1/features/src/main/resources/OSGI-INF/blueprint/blueprint.xml
----------------------------------------------------------------------
diff --git a/features/src/main/resources/OSGI-INF/blueprint/blueprint.xml b/features/src/main/resources/OSGI-INF/blueprint/blueprint.xml
index bf4100f..bab0aca 100644
--- a/features/src/main/resources/OSGI-INF/blueprint/blueprint.xml
+++ b/features/src/main/resources/OSGI-INF/blueprint/blueprint.xml
@@ -33,7 +33,11 @@
<property name="configurationAdmin" ref="configurationAdmin"/>
<property name="featuresService" ref="featuresService"/>
</bean>
- <service ref="synchronizer" interface="org.apache.karaf.cellar.core.Synchronizer"/>
+ <service ref="synchronizer" interface="org.apache.karaf.cellar.core.Synchronizer">
+ <service-properties>
+ <entry key="resource" value="feature"/>
+ </service-properties>
+ </service>
<!-- Features Event Handler -->
<bean id="featuresHandler" class="org.apache.karaf.cellar.features.FeaturesEventHandler"
http://git-wip-us.apache.org/repos/asf/karaf-cellar/blob/6ec9d8c1/obr/src/main/resources/OSGI-INF/blueprint/blueprint.xml
----------------------------------------------------------------------
diff --git a/obr/src/main/resources/OSGI-INF/blueprint/blueprint.xml b/obr/src/main/resources/OSGI-INF/blueprint/blueprint.xml
index ee5629e..25ca774 100644
--- a/obr/src/main/resources/OSGI-INF/blueprint/blueprint.xml
+++ b/obr/src/main/resources/OSGI-INF/blueprint/blueprint.xml
@@ -36,7 +36,11 @@
<property name="groupManager" ref="groupManager"/>
<property name="configurationAdmin" ref="configurationAdmin"/>
</bean>
- <service ref="obrUrlSynchronizer" interface="org.apache.karaf.cellar.core.Synchronizer"/>
+ <service ref="obrUrlSynchronizer" interface="org.apache.karaf.cellar.core.Synchronizer">
+ <service-properties>
+ <entry key="resource" value="obr.urls"/>
+ </service-properties>
+ </service>
<!-- OBR URL Event Handler -->
<bean id="obrUrlEventHandler" class="org.apache.karaf.cellar.obr.ObrUrlEventHandler"
http://git-wip-us.apache.org/repos/asf/karaf-cellar/blob/6ec9d8c1/shell/pom.xml
----------------------------------------------------------------------
diff --git a/shell/pom.xml b/shell/pom.xml
index 3587eb6..b6c6998 100644
--- a/shell/pom.xml
+++ b/shell/pom.xml
@@ -56,6 +56,16 @@
<!-- Internal Dependencies -->
<dependency>
+ <groupId>org.osgi</groupId>
+ <artifactId>org.osgi.core</artifactId>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.osgi</groupId>
+ <artifactId>org.osgi.compendium</artifactId>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
<groupId>org.apache.karaf.cellar</groupId>
<artifactId>org.apache.karaf.cellar.core</artifactId>
</dependency>
http://git-wip-us.apache.org/repos/asf/karaf-cellar/blob/6ec9d8c1/shell/src/main/java/org/apache/karaf/cellar/shell/SyncCommand.java
----------------------------------------------------------------------
diff --git a/shell/src/main/java/org/apache/karaf/cellar/shell/SyncCommand.java b/shell/src/main/java/org/apache/karaf/cellar/shell/SyncCommand.java
index ba62510..1b68afb 100644
--- a/shell/src/main/java/org/apache/karaf/cellar/shell/SyncCommand.java
+++ b/shell/src/main/java/org/apache/karaf/cellar/shell/SyncCommand.java
@@ -13,36 +13,135 @@
*/
package org.apache.karaf.cellar.shell;
+import org.apache.felix.gogo.commands.Argument;
import org.apache.felix.gogo.commands.Command;
+import org.apache.felix.gogo.commands.Option;
import org.apache.karaf.cellar.core.Group;
import org.apache.karaf.cellar.core.Synchronizer;
-import org.osgi.framework.InvalidSyntaxException;
+import org.apache.karaf.cellar.core.Configurations;
import org.osgi.framework.ServiceReference;
+import org.osgi.service.cm.Configuration;
+import org.osgi.service.cm.ConfigurationAdmin;
+import java.util.Dictionary;
+import java.util.HashSet;
+import java.util.Properties;
import java.util.Set;
-@Command(scope = "cluster", name = "sync", description = "Force the call of all cluster synchronizers available")
+@Command(scope = "cluster", name = "sync", description = "Manipulate the synchronizers")
public class SyncCommand extends ClusterCommandSupport {
+ @Option(name = "-g", aliases = { "--group" }, description = "The cluster group name", required = false, multiValued = false)
+ private String groupName;
+
+ @Option(name = "-b", aliases = { "--bundle" }, description = "Cluster bundle support", required = false, multiValued = false)
+ private boolean bundleSync = false;
+
+ @Option(name = "-c", aliases = { "--config" }, description = "Cluster config support", required = false, multiValued = false)
+ private boolean configSync = false;
+
+ @Option(name = "-f", aliases = { "--feature" }, description = "Cluster feature support", required = false, multiValued = false)
+ private boolean featuresSync = false;
+
+ @Option(name = "-o", aliases = { "--obr" }, description = "Cluster OBR support", required = false, multiValued = false)
+ private boolean obrSync = false;
+
+ @Argument(name = "policy", description = "The definition of the sync policy for the given cluster resource", required = false, multiValued = false)
+ private String policy;
+
+ private ConfigurationAdmin configurationAdmin;
+
@Override
protected Object doExecute() throws Exception {
- Set<Group> localGroups = groupManager.listLocalGroups();
- for (Group group : localGroups) {
- System.out.println("Synchronizing cluster group " + group.getName());
- try {
- ServiceReference[] serviceReferences = bundleContext.getAllServiceReferences("org.apache.karaf.cellar.core.Synchronizer", null);
- if (serviceReferences != null && serviceReferences.length > 0) {
- for (ServiceReference ref : serviceReferences) {
- Synchronizer synchronizer = (Synchronizer) bundleContext.getService(ref);
- synchronizer.sync(group);
- bundleContext.ungetService(ref);
- }
- }
- } catch (InvalidSyntaxException e) {
- // ignore
+ boolean allResources = false;
+ // if the user didn't provide any resource, we consider all
+ if (!bundleSync && !configSync && !featuresSync && !obrSync) {
+ allResources = true;
+ }
+ Set<Group> groups;
+ if (groupName == null || groupName.isEmpty()) {
+ groups = groupManager.listLocalGroups();
+ } else {
+ groups = new HashSet<Group>();
+ if (groupManager.findGroupByName(groupName) == null) {
+ System.err.println("Cluster group " + groupName + " doesn't exist");
+ return null;
+ }
+ groups.add(groupManager.findGroupByName(groupName));
+ }
+ if (policy == null || policy.isEmpty()) {
+ // we are in sync mode
+ // constructing the target cluster groups
+ for (Group group : groups) {
+ System.out.println("Synchronizing cluster group " + group.getName());
+ if (bundleSync || allResources) {
+ doSync("bundle", group);
+ }
+ if (configSync || allResources) {
+ doSync("config", group);
+ }
+ if (featuresSync || allResources) {
+ doSync("feature", group);
+ }
+ if (obrSync || allResources) {
+ doSync("obr.urls", group);
+ }
+ }
+ } else {
+ // we are in set mode
+ if (!policy.equalsIgnoreCase("cluster") && !policy.equalsIgnoreCase("node") && !policy.equalsIgnoreCase("disabled")) {
+ System.err.println("The sync policy " + policy + " is not valid. Valid sync policies are: cluster, node, disabled");
+ return null;
+ }
+ for (Group group : groups) {
+ System.out.println("Updating sync policy for cluster group " + group.getName());
+ if (bundleSync || allResources) {
+ updateSync("bundle", group, policy);
+ }
+ if (configSync || allResources) {
+ updateSync("config", group, policy);
+ }
+ if (featuresSync || allResources) {
+ updateSync("feature", group, policy);
+ }
+ if (obrSync || allResources) {
+ updateSync("obr.urls", group, policy);
+ }
}
}
return null;
}
+ private void doSync(String resource, Group group) throws Exception {
+ // looking for the resource synchronizer
+ System.out.print("\t" + resource + ": ");
+ ServiceReference[] references = bundleContext.getAllServiceReferences(Synchronizer.class.getName(), "(resource=" + resource + ")");
+ if (references != null && references.length > 0) {
+ for (ServiceReference reference : references) {
+ Synchronizer synchronizer = (Synchronizer) bundleContext.getService(reference);
+ synchronizer.sync(group);
+ bundleContext.ungetService(reference);
+ }
+ System.out.println("done");
+ } else {
+ System.out.println("No synchronizer found for " + resource);
+ }
+ }
+
+ private void updateSync(String resource, Group group, String policy) throws Exception {
+ System.out.print("\t" + resource + ": ");
+ Configuration configuration = configurationAdmin.getConfiguration(Configurations.GROUP, null);
+ if (configuration != null) {
+ Dictionary properties = configuration.getProperties();
+ if (properties == null)
+ properties = new Properties();
+ properties.put(group.getName() + "." + resource + ".sync", policy);
+ configuration.update(properties);
+ System.out.println("done");
+ }
+ }
+
+ public void setConfigurationAdmin(ConfigurationAdmin configurationAdmin) {
+ this.configurationAdmin = configurationAdmin;
+ }
}
http://git-wip-us.apache.org/repos/asf/karaf-cellar/blob/6ec9d8c1/shell/src/main/resources/OSGI-INF/blueprint/shell-cluster.xml
----------------------------------------------------------------------
diff --git a/shell/src/main/resources/OSGI-INF/blueprint/shell-cluster.xml b/shell/src/main/resources/OSGI-INF/blueprint/shell-cluster.xml
index 84a8f80..729ac8b 100644
--- a/shell/src/main/resources/OSGI-INF/blueprint/shell-cluster.xml
+++ b/shell/src/main/resources/OSGI-INF/blueprint/shell-cluster.xml
@@ -31,6 +31,7 @@
<action class="org.apache.karaf.cellar.shell.SyncCommand">
<property name="clusterManager" ref="clusterManager"/>
<property name="groupManager" ref="groupManager"/>
+ <property name="configurationAdmin" ref="configurationAdmin"/>
</action>
</command>
<command name="cluster/consumer-start">
@@ -186,6 +187,7 @@
<reference id="clusterManager" interface="org.apache.karaf.cellar.core.ClusterManager" availability="optional"/>
<reference id="groupManager" interface="org.apache.karaf.cellar.core.GroupManager" availability="optional"/>
<reference id="executionContext" interface="org.apache.karaf.cellar.core.command.ExecutionContext" availability="optional"/>
+ <reference id="configurationAdmin" interface="org.osgi.service.cm.ConfigurationAdmin"/>
<bean id="allNodesCompleter" class="org.apache.karaf.cellar.core.shell.completer.AllNodeCompleter">
<property name="clusterManager" ref="clusterManager"/>