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 2013/10/11 18:10:28 UTC

svn commit: r1531337 - in /karaf/cellar/branches/cellar-2.3.x/config/src/main/java/org/apache/karaf/cellar/config: ClusterConfigurationEvent.java ConfigurationEventHandler.java LocalConfigurationListener.java

Author: jbonofre
Date: Fri Oct 11 16:10:28 2013
New Revision: 1531337

URL: http://svn.apache.org/r1531337
Log:
[KARAF-2514] Improve Cellar config, especially around configuration deletion

Modified:
    karaf/cellar/branches/cellar-2.3.x/config/src/main/java/org/apache/karaf/cellar/config/ClusterConfigurationEvent.java
    karaf/cellar/branches/cellar-2.3.x/config/src/main/java/org/apache/karaf/cellar/config/ConfigurationEventHandler.java
    karaf/cellar/branches/cellar-2.3.x/config/src/main/java/org/apache/karaf/cellar/config/LocalConfigurationListener.java

Modified: karaf/cellar/branches/cellar-2.3.x/config/src/main/java/org/apache/karaf/cellar/config/ClusterConfigurationEvent.java
URL: http://svn.apache.org/viewvc/karaf/cellar/branches/cellar-2.3.x/config/src/main/java/org/apache/karaf/cellar/config/ClusterConfigurationEvent.java?rev=1531337&r1=1531336&r2=1531337&view=diff
==============================================================================
--- karaf/cellar/branches/cellar-2.3.x/config/src/main/java/org/apache/karaf/cellar/config/ClusterConfigurationEvent.java (original)
+++ karaf/cellar/branches/cellar-2.3.x/config/src/main/java/org/apache/karaf/cellar/config/ClusterConfigurationEvent.java Fri Oct 11 16:10:28 2013
@@ -20,17 +20,17 @@ import org.apache.karaf.cellar.core.even
  */
 public class ClusterConfigurationEvent extends Event {
 
-    private int type;
+    private Integer type;
 
     public ClusterConfigurationEvent(String id) {
         super(id);
     }
 
-    public int getType() {
+    public Integer getType() {
         return type;
     }
 
-    public void setType(int type) {
+    public void setType(Integer type) {
         this.type = type;
     }
 

Modified: karaf/cellar/branches/cellar-2.3.x/config/src/main/java/org/apache/karaf/cellar/config/ConfigurationEventHandler.java
URL: http://svn.apache.org/viewvc/karaf/cellar/branches/cellar-2.3.x/config/src/main/java/org/apache/karaf/cellar/config/ConfigurationEventHandler.java?rev=1531337&r1=1531336&r2=1531337&view=diff
==============================================================================
--- karaf/cellar/branches/cellar-2.3.x/config/src/main/java/org/apache/karaf/cellar/config/ConfigurationEventHandler.java (original)
+++ karaf/cellar/branches/cellar-2.3.x/config/src/main/java/org/apache/karaf/cellar/config/ConfigurationEventHandler.java Fri Oct 11 16:10:28 2013
@@ -65,18 +65,18 @@ public class ConfigurationEventHandler e
         if (isAllowed(event.getSourceGroup(), Constants.CATEGORY, pid, EventType.INBOUND)) {
 
             Properties clusterDictionary = clusterConfigurations.get(pid);
-            Configuration localConfiguration;
             try {
                 // update the local configuration
-                localConfiguration = configurationAdmin.getConfiguration(pid, null);
+                Configuration[] localConfigurations = configurationAdmin.listConfigurations("(service.pid=" + pid + ")");
                 if (event.getType() == ConfigurationEvent.CM_DELETED) {
-                    if (localConfiguration.getProperties() != null) {
-                        // delete the properties
-                        localConfiguration.delete();
+                    // delete the configuration
+                    if (localConfigurations != null && localConfigurations.length > 0) {
+                        localConfigurations[0].delete();
                         deleteStorage(pid);
                     }
                 } else {
                     if (clusterDictionary != null) {
+                        Configuration localConfiguration = configurationAdmin.getConfiguration(pid, null);
                         Dictionary localDictionary = localConfiguration.getProperties();
                         if (localDictionary == null)
                             localDictionary = new Properties();
@@ -87,7 +87,7 @@ public class ConfigurationEventHandler e
                         }
                     }
                 }
-            } catch (IOException ex) {
+            } catch (Exception ex) {
                 LOGGER.error("CELLAR CONFIG: failed to update local configuration", ex);
             }
         } else LOGGER.debug("CELLAR CONFIG: configuration with PID {} is marked BLOCKED INBOUND for cluster group {}", pid, groupName);

Modified: karaf/cellar/branches/cellar-2.3.x/config/src/main/java/org/apache/karaf/cellar/config/LocalConfigurationListener.java
URL: http://svn.apache.org/viewvc/karaf/cellar/branches/cellar-2.3.x/config/src/main/java/org/apache/karaf/cellar/config/LocalConfigurationListener.java?rev=1531337&r1=1531336&r2=1531337&view=diff
==============================================================================
--- karaf/cellar/branches/cellar-2.3.x/config/src/main/java/org/apache/karaf/cellar/config/LocalConfigurationListener.java (original)
+++ karaf/cellar/branches/cellar-2.3.x/config/src/main/java/org/apache/karaf/cellar/config/LocalConfigurationListener.java Fri Oct 11 16:10:28 2013
@@ -55,17 +55,6 @@ public class LocalConfigurationListener 
 
         String pid = event.getPid();
 
-        Dictionary localDictionary = null;
-        if (event.getType() != ConfigurationEvent.CM_DELETED) {
-            try {
-                Configuration conf = configurationAdmin.getConfiguration(pid, null);
-                localDictionary = conf.getProperties();
-            } catch (Exception e) {
-                LOGGER.error("CELLAR CONFIG: can't retrieve configuration with PID {}", pid, e);
-                return;
-            }
-        }
-
         Set<Group> groups = groupManager.listLocalGroups();
 
         if (groups != null && !groups.isEmpty()) {
@@ -77,15 +66,22 @@ public class LocalConfigurationListener 
 
                     try {
                         if (event.getType() == ConfigurationEvent.CM_DELETED) {
-                            // update the configurations in the cluster group
-                            clusterConfigurations.remove(pid);
-                            // broadcast the cluster event
-                            ClusterConfigurationEvent clusterConfigurationEvent = new ClusterConfigurationEvent(pid);
-                            clusterConfigurationEvent.setType(ConfigurationEvent.CM_DELETED);
-                            clusterConfigurationEvent.setSourceNode(clusterManager.getNode());
-                            clusterConfigurationEvent.setSourceGroup(group);
-                            eventProducer.produce(clusterConfigurationEvent);
+
+                            if (clusterConfigurations.containsKey(pid)) {
+                                // update the configurations in the cluster group
+                                clusterConfigurations.remove(pid);
+                                // broadcast the cluster event
+                                ClusterConfigurationEvent clusterConfigurationEvent = new ClusterConfigurationEvent(pid);
+                                clusterConfigurationEvent.setType(event.getType());
+                                clusterConfigurationEvent.setSourceNode(clusterManager.getNode());
+                                clusterConfigurationEvent.setSourceGroup(group);
+                                eventProducer.produce(clusterConfigurationEvent);
+                            }
                         } else {
+
+                            Configuration conf = configurationAdmin.getConfiguration(pid, null);
+                            Dictionary localDictionary = conf.getProperties();
+
                             localDictionary = filter(localDictionary);
 
                             Properties distributedDictionary = clusterConfigurations.get(pid);
@@ -95,6 +91,7 @@ public class LocalConfigurationListener 
                                 clusterConfigurations.put(pid, dictionaryToProperties(localDictionary));
                                 // broadcast the cluster event
                                 ClusterConfigurationEvent clusterConfigurationEvent = new ClusterConfigurationEvent(pid);
+                                clusterConfigurationEvent.setType(event.getType());
                                 clusterConfigurationEvent.setSourceGroup(group);
                                 clusterConfigurationEvent.setSourceNode(clusterManager.getNode());
                                 eventProducer.produce(clusterConfigurationEvent);