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/11/21 22:19:07 UTC

svn commit: r1412304 - in /karaf/cellar/trunk: management/ management/src/main/java/org/apache/karaf/cellar/management/ management/src/main/java/org/apache/karaf/cellar/management/internal/ management/src/main/resources/OSGI-INF/blueprint/ shell/src/ma...

Author: jbonofre
Date: Wed Nov 21 21:19:06 2012
New Revision: 1412304

URL: http://svn.apache.org/viewvc?rev=1412304&view=rev
Log:
[KARAF-2023] Add cluster:sync command and sync operation in the CellarMBean

Added:
    karaf/cellar/trunk/shell/src/main/java/org/apache/karaf/cellar/shell/SyncCommand.java
Modified:
    karaf/cellar/trunk/management/pom.xml
    karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/CellarMBean.java
    karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/internal/CellarMBeanImpl.java
    karaf/cellar/trunk/management/src/main/resources/OSGI-INF/blueprint/blueprint.xml
    karaf/cellar/trunk/shell/src/main/resources/OSGI-INF/blueprint/shell-cluster.xml

Modified: karaf/cellar/trunk/management/pom.xml
URL: http://svn.apache.org/viewvc/karaf/cellar/trunk/management/pom.xml?rev=1412304&r1=1412303&r2=1412304&view=diff
==============================================================================
--- karaf/cellar/trunk/management/pom.xml (original)
+++ karaf/cellar/trunk/management/pom.xml Wed Nov 21 21:19:06 2012
@@ -43,6 +43,7 @@
             javax.management.openmbean,
             org.apache.karaf.features*;version="[3,4)",
             org.apache.karaf.cellar*;version="${project.version}",
+            org.osgi.framework,
             org.osgi.service.cm,
             org.osgi.service.blueprint
         </osgi.import>

Modified: karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/CellarMBean.java
URL: http://svn.apache.org/viewvc/karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/CellarMBean.java?rev=1412304&r1=1412303&r2=1412304&view=diff
==============================================================================
--- karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/CellarMBean.java (original)
+++ karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/CellarMBean.java Wed Nov 21 21:19:06 2012
@@ -20,7 +20,8 @@ import javax.management.openmbean.Tabula
  */
 public interface CellarMBean {
 
-    // Operations
+    void sync() throws Exception;
+
     TabularData consumerStatus() throws Exception;
     void consumerStart(String nodeId) throws Exception;
     void consumerStop(String nodeId) throws Exception;

Modified: karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/internal/CellarMBeanImpl.java
URL: http://svn.apache.org/viewvc/karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/internal/CellarMBeanImpl.java?rev=1412304&r1=1412303&r2=1412304&view=diff
==============================================================================
--- karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/internal/CellarMBeanImpl.java (original)
+++ karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/internal/CellarMBeanImpl.java Wed Nov 21 21:19:06 2012
@@ -27,11 +27,13 @@
  */
 package org.apache.karaf.cellar.management.internal;
 
-import org.apache.karaf.cellar.core.ClusterManager;
-import org.apache.karaf.cellar.core.Node;
+import org.apache.karaf.cellar.core.*;
 import org.apache.karaf.cellar.core.command.ExecutionContext;
 import org.apache.karaf.cellar.core.control.*;
 import org.apache.karaf.cellar.management.CellarMBean;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.InvalidSyntaxException;
+import org.osgi.framework.ServiceReference;
 
 import javax.management.NotCompliantMBeanException;
 import javax.management.StandardMBean;
@@ -43,13 +45,23 @@ import java.util.*;
  */
 public class CellarMBeanImpl extends StandardMBean implements CellarMBean {
 
+    private BundleContext bundleContext;
     private ClusterManager clusterManager;
     private ExecutionContext executionContext;
+    private GroupManager groupManager;
 
     public CellarMBeanImpl() throws NotCompliantMBeanException {
         super(CellarMBean.class);
     }
 
+    public BundleContext getBundleContext() {
+        return bundleContext;
+    }
+
+    public void setBundleContext(BundleContext bundleContext) {
+        this.bundleContext = bundleContext;
+    }
+
     public ClusterManager getClusterManager() {
         return this.clusterManager;
     }
@@ -66,6 +78,35 @@ public class CellarMBeanImpl extends Sta
         this.executionContext = executionContext;
     }
 
+    public GroupManager getGroupManager() {
+        return groupManager;
+    }
+
+    public void setGroupManager(GroupManager groupManager) {
+        this.groupManager = groupManager;
+    }
+
+    public void sync() throws Exception {
+        Set<Group> localGroups = groupManager.listLocalGroups();
+        for (Group group : localGroups) {
+            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);
+                        if (synchronizer.isSyncEnabled(group)) {
+                            synchronizer.pull(group);
+                            synchronizer.push(group);
+                        }
+                        bundleContext.ungetService(ref);
+                    }
+                }
+            } catch (InvalidSyntaxException e) {
+                // ignore
+            }
+        }
+    }
+
     public TabularData handlerStatus() throws Exception {
         ManageHandlersCommand command = new ManageHandlersCommand(clusterManager.generateId());
 

Modified: karaf/cellar/trunk/management/src/main/resources/OSGI-INF/blueprint/blueprint.xml
URL: http://svn.apache.org/viewvc/karaf/cellar/trunk/management/src/main/resources/OSGI-INF/blueprint/blueprint.xml?rev=1412304&r1=1412303&r2=1412304&view=diff
==============================================================================
--- karaf/cellar/trunk/management/src/main/resources/OSGI-INF/blueprint/blueprint.xml (original)
+++ karaf/cellar/trunk/management/src/main/resources/OSGI-INF/blueprint/blueprint.xml Wed Nov 21 21:19:06 2012
@@ -23,7 +23,9 @@
     <reference id="featuresService" interface="org.apache.karaf.features.FeaturesService"/>
 
     <bean id="cellarMBean" class="org.apache.karaf.cellar.management.internal.CellarMBeanImpl">
+        <property name="bundleContext" ref="blueprintBundleContext"/>
         <property name="clusterManager" ref="clusterManager"/>
+        <property name="groupManager" ref="groupManager"/>
         <property name="executionContext" ref="executionContext"/>
     </bean>
 

Added: karaf/cellar/trunk/shell/src/main/java/org/apache/karaf/cellar/shell/SyncCommand.java
URL: http://svn.apache.org/viewvc/karaf/cellar/trunk/shell/src/main/java/org/apache/karaf/cellar/shell/SyncCommand.java?rev=1412304&view=auto
==============================================================================
--- karaf/cellar/trunk/shell/src/main/java/org/apache/karaf/cellar/shell/SyncCommand.java (added)
+++ karaf/cellar/trunk/shell/src/main/java/org/apache/karaf/cellar/shell/SyncCommand.java Wed Nov 21 21:19:06 2012
@@ -0,0 +1,53 @@
+/*
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.karaf.cellar.shell;
+
+import org.apache.karaf.cellar.core.Group;
+import org.apache.karaf.cellar.core.Synchronizer;
+import org.apache.karaf.shell.commands.Command;
+import org.osgi.framework.InvalidSyntaxException;
+import org.osgi.framework.ServiceReference;
+
+import java.util.Set;
+
+@Command(scope = "cluster", name = "sync", description = "Force the call of all cluster synchronizers available.")
+public class SyncCommand extends ClusterCommandSupport {
+
+    @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);
+                        if (synchronizer.isSyncEnabled(group)) {
+                            System.out.print("    sync " + synchronizer.getClass() + " ...");
+                            synchronizer.pull(group);
+                            synchronizer.push(group);
+                            System.out.println("OK");
+                        }
+                        bundleContext.ungetService(ref);
+                    }
+                }
+            } catch (InvalidSyntaxException e) {
+                // ignore
+            }
+        }
+        return null;
+    }
+
+}

Modified: karaf/cellar/trunk/shell/src/main/resources/OSGI-INF/blueprint/shell-cluster.xml
URL: http://svn.apache.org/viewvc/karaf/cellar/trunk/shell/src/main/resources/OSGI-INF/blueprint/shell-cluster.xml?rev=1412304&r1=1412303&r2=1412304&view=diff
==============================================================================
--- karaf/cellar/trunk/shell/src/main/resources/OSGI-INF/blueprint/shell-cluster.xml (original)
+++ karaf/cellar/trunk/shell/src/main/resources/OSGI-INF/blueprint/shell-cluster.xml Wed Nov 21 21:19:06 2012
@@ -30,6 +30,13 @@
             </action>
         </command>
 
+        <command name="cluster/sync">
+            <action class="org.apache.karaf.cellar.shell.SyncCommand">
+                <property name="clusterManager" ref="clusterManager"/>
+                <property name="groupManager" ref="groupManager"/>
+            </action>
+        </command>
+
         <command name="cluster/consumer-start">
             <action class="org.apache.karaf.cellar.shell.consumer.ConsumerStartCommand">
                 <property name="clusterManager" ref="clusterManager"/>