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);