qpid-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From kw...@apache.org
Subject svn commit: r1583300 - /qpid/branches/java-broker-bdb-ha2/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/startup/StoreUpgrader1_3.java
Date Mon, 31 Mar 2014 11:22:44 GMT
Author: kwall
Date: Mon Mar 31 11:22:44 2014
New Revision: 1583300

URL: http://svn.apache.org/r1583300
Log:
QPID-5624: Refactor implementation of the 1.3 StoreUpgrader

Modified:
    qpid/branches/java-broker-bdb-ha2/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/startup/StoreUpgrader1_3.java

Modified: qpid/branches/java-broker-bdb-ha2/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/startup/StoreUpgrader1_3.java
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-bdb-ha2/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/startup/StoreUpgrader1_3.java?rev=1583300&r1=1583299&r2=1583300&view=diff
==============================================================================
--- qpid/branches/java-broker-bdb-ha2/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/startup/StoreUpgrader1_3.java
(original)
+++ qpid/branches/java-broker-bdb-ha2/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/startup/StoreUpgrader1_3.java
Mon Mar 31 11:22:44 2014
@@ -23,10 +23,11 @@ package org.apache.qpid.server.configura
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
-import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
+import java.util.List;
 import java.util.Map;
+import java.util.Map.Entry;
 import java.util.Set;
 
 import org.apache.qpid.server.configuration.ConfigurationEntry;
@@ -37,6 +38,7 @@ import org.apache.qpid.server.model.Brok
 @SuppressWarnings("serial")
 public final class StoreUpgrader1_3 extends StoreUpgrader
 {
+
     public static final String VERSION = "1.3";
 
     private Map<String, VirtualHostEntryUpgrader> _vhostUpgraderMap = new HashMap<String,
VirtualHostEntryUpgrader>()
@@ -83,263 +85,304 @@ public final class StoreUpgrader1_3 exte
         store.save(changed.toArray(new ConfigurationEntry[changed.size()]));
     }
 
-    public interface VirtualHostEntryUpgrader
+    private interface VirtualHostEntryUpgrader
     {
         ConfigurationEntry upgrade(ConfigurationEntryStore store, ConfigurationEntry vhost);
     }
 
-    public class BdbHaVirtualHostUpgrader implements VirtualHostEntryUpgrader
+    private class StandardVirtualHostUpgrader implements VirtualHostEntryUpgrader
     {
-        private final String[] HA_ATTRIBUTES =
-            { "storePath", "haNodeName", "haGroupName", "haHelperAddress", "haCoalescingSync",
"haNodeAddress", "haDurability",
-              "haDesignatedPrimary", "haReplicationConfig", "bdbEnvironmentConfig" };
+        Map<String, AttributesTransformer> _messageStoreAttributeTransformers = new
HashMap<String, AttributesTransformer>()
+        {{
+            put("DERBY", new AttributesTransformer().
+                    addAttributeTransformer("storePath", copyAttribute()).
+                    addAttributeTransformer("storeUnderfullSize", copyAttribute()).
+                    addAttributeTransformer("storeOverfullSize", copyAttribute()).
+                    addAttributeTransformer("storeType", mutateAttributeValue("DERBY")));
+            put("MEMORY",  new AttributesTransformer().
+                    addAttributeTransformer("storeType", mutateAttributeValue("Memory")));
+            put("BDB", new AttributesTransformer().
+                    addAttributeTransformer("storePath", copyAttribute()).
+                    addAttributeTransformer("storeUnderfullSize", copyAttribute()).
+                    addAttributeTransformer("storeOverfullSize", copyAttribute()).
+                    addAttributeTransformer("bdbEnvironmentConfig", copyAttribute()).
+                    addAttributeTransformer("storeType", mutateAttributeValue("BDB")));
+            put("JDBC", new AttributesTransformer().
+                    addAttributeTransformer("storePath", mutateAttributeName("connectionURL")).
+                    addAttributeTransformer("connectionURL", copyAttribute()).
+                    addAttributeTransformer("connectionPool", copyAttribute()).
+                    addAttributeTransformer("jdbcBigIntType", copyAttribute()).
+                    addAttributeTransformer("jdbcBytesForBlob", copyAttribute()).
+                    addAttributeTransformer("jdbcBlobType", copyAttribute()).
+                    addAttributeTransformer("jdbcVarbinaryType", copyAttribute()).
+                    addAttributeTransformer("partitionCount", copyAttribute()).
+                    addAttributeTransformer("maxConnectionsPerPartition", copyAttribute()).
+                    addAttributeTransformer("minConnectionsPerPartition", copyAttribute()).
+                    addAttributeTransformer("storeType", mutateAttributeValue("JDBC")));
+        }};
+
+        Map<String, AttributesTransformer> _configurationStoreAttributeTransformers
= new HashMap<String, AttributesTransformer>()
+        {{
+            put("DERBY", new AttributesTransformer().
+                    addAttributeTransformer("configStorePath", mutateAttributeName("storePath")).
+                    addAttributeTransformer("configStoreType", mutateAttributeName("storeType"),
mutateAttributeValue("DERBY")));
+            put("MEMORY",  new AttributesTransformer().
+                    addAttributeTransformer("configStoreType", mutateAttributeValue("Memory")));
+            put("JSON", new AttributesTransformer().
+                    addAttributeTransformer("configStorePath", mutateAttributeName("storePath")).
+                    addAttributeTransformer("configStoreType", mutateAttributeName("storeType"),
mutateAttributeValue("JSON")));
+            put("BDB", new AttributesTransformer().
+                    addAttributeTransformer("configStorePath", mutateAttributeName("storePath")).
+                    addAttributeTransformer("bdbEnvironmentConfig", copyAttribute()).
+                    addAttributeTransformer("configStoreType", mutateAttributeName("storeType"),
mutateAttributeValue("BDB")));
+            put("JDBC", new AttributesTransformer().
+                    addAttributeTransformer("configStorePath", mutateAttributeName("connectionURL")).
+                    addAttributeTransformer("configConnectionURL", mutateAttributeName("connectionURL")).
+                    addAttributeTransformer("connectionPool", copyAttribute()).
+                    addAttributeTransformer("jdbcBigIntType", copyAttribute()).
+                    addAttributeTransformer("jdbcBytesForBlob", copyAttribute()).
+                    addAttributeTransformer("jdbcBlobType", copyAttribute()).
+                    addAttributeTransformer("jdbcVarbinaryType", copyAttribute()).
+                    addAttributeTransformer("partitionCount", copyAttribute()).
+                    addAttributeTransformer("maxConnectionsPerPartition", copyAttribute()).
+                    addAttributeTransformer("minConnectionsPerPartition", copyAttribute()).
+                    addAttributeTransformer("configStoreType", mutateAttributeName("storeType"),
mutateAttributeValue("JDBC")));
+        }};
 
         @Override
         public ConfigurationEntry upgrade(ConfigurationEntryStore store, ConfigurationEntry
vhost)
         {
             Map<String, Object> attributes = vhost.getAttributes();
             Map<String, Object> newAttributes = new HashMap<String, Object>(attributes);
-            Map<String, Object> messageStoreSettings = new HashMap<String, Object>();
 
-            for (String haAttribute : HA_ATTRIBUTES)
+            String capitalisedStoreType = String.valueOf(attributes.get("storeType")).toUpperCase();
+            AttributesTransformer vhAttrsToMessageStoreSettings = _messageStoreAttributeTransformers.get(capitalisedStoreType);
+            Map<String, Object> messageStoreSettings = null;
+            if (vhAttrsToMessageStoreSettings != null)
             {
-                if (attributes.containsKey(haAttribute))
-                {
-                    messageStoreSettings.put(haAttribute, newAttributes.remove(haAttribute));
-                }
+                messageStoreSettings = vhAttrsToMessageStoreSettings.upgrade(attributes);
             }
 
-            if (attributes.containsKey("storeUnderfullSize"))
+            if (attributes.containsKey("configStoreType"))
             {
-                messageStoreSettings.put("storeUnderfullSize", newAttributes.remove("storeUnderfullSize"));
+                String capitaliseConfigStoreType = ((String) attributes.get("configStoreType")).toUpperCase();
+                AttributesTransformer vhAttrsToConfigurationStoreSettings = _configurationStoreAttributeTransformers
+                        .get(capitaliseConfigStoreType);
+                Map<String, Object> configurationStoreSettings = vhAttrsToConfigurationStoreSettings.upgrade(attributes);
+                newAttributes.keySet().removeAll(vhAttrsToConfigurationStoreSettings.getNamesToBeDeleted());
+                newAttributes.put("configurationStoreSettings", configurationStoreSettings);
             }
-            if (attributes.containsKey("storeOverfullSize"))
+
+            if (vhAttrsToMessageStoreSettings != null)
             {
-                messageStoreSettings.put("storeOverfullSize", newAttributes.remove("storeOverfullSize"));
+                newAttributes.keySet().removeAll(vhAttrsToMessageStoreSettings.getNamesToBeDeleted());
+                newAttributes.put("messageStoreSettings", messageStoreSettings);
             }
-            newAttributes.remove("storeType");
-            newAttributes.put("messageStoreSettings", messageStoreSettings);
+
             return new ConfigurationEntry(vhost.getId(), vhost.getType(), newAttributes,
vhost.getChildrenIds(), store);
         }
-
     }
 
-    public interface StoreEntryUpgrader
+    private class BdbHaVirtualHostUpgrader implements VirtualHostEntryUpgrader
     {
-        Map<String, Object> upgrade(Map<String, Object> attributes);
 
-        Set<String> getNamesToBeDeleted();
+        private final AttributesTransformer haAttributesTransformer =  new AttributesTransformer().
+                addAttributeTransformer("storePath", copyAttribute()).
+                addAttributeTransformer("storeUnderfullSize", copyAttribute()).
+                addAttributeTransformer("storeOverfullSize", copyAttribute()).
+                addAttributeTransformer("haNodeName", copyAttribute()).
+                addAttributeTransformer("haGroupName", copyAttribute()).
+                addAttributeTransformer("haHelperAddress", copyAttribute()).
+                addAttributeTransformer("haCoalescingSync", copyAttribute()).
+                addAttributeTransformer("haNodeAddress", copyAttribute()).
+                addAttributeTransformer("haDurability", copyAttribute()).
+                addAttributeTransformer("haDesignatedPrimary", copyAttribute()).
+                addAttributeTransformer("haReplicationConfig", copyAttribute()).
+                addAttributeTransformer("bdbEnvironmentConfig", copyAttribute()).
+                addAttributeTransformer("storeType", removeAttribute());
+
+        @Override
+        public ConfigurationEntry upgrade(ConfigurationEntryStore store, ConfigurationEntry
vhost)
+        {
+            Map<String, Object> attributes = vhost.getAttributes();
+
+            Map<String, Object> messageStoreSettings = haAttributesTransformer.upgrade(attributes);
+
+            Map<String, Object> newAttributes = new HashMap<String, Object>(attributes);
+            newAttributes.keySet().removeAll(haAttributesTransformer.getNamesToBeDeleted());
+            newAttributes.put("messageStoreSettings", messageStoreSettings);
+
+            return new ConfigurationEntry(vhost.getId(), vhost.getType(), newAttributes,
vhost.getChildrenIds(), store);
+        }
     }
 
-    public class GenericMessageStoreEntryUpgrader implements StoreEntryUpgrader
+    private class AttributesTransformer
     {
-        private Map<String, String> _oldToNewNamesMap;
-        private String _storeType;
+        private final Map<String, List<AttributeTransformer>> _transformers =
new HashMap<String, List<AttributeTransformer>>();
+        private Set<String> _namesToBeDeleted = new HashSet<String>();
 
-        public GenericMessageStoreEntryUpgrader(String storeType, Map<String, String>
oldToNewNamesMap)
+        public AttributesTransformer addAttributeTransformer(String string, AttributeTransformer...
attributeTransformers)
         {
-            _oldToNewNamesMap = oldToNewNamesMap;
-            _storeType = storeType;
+            _transformers.put(string, Arrays.asList(attributeTransformers));
+            return this;
         }
 
-        @Override
         public Map<String, Object> upgrade(Map<String, Object> attributes)
         {
-            Map<String, Object> messageStoreSettings = new HashMap<String, Object>();
-            for (Map.Entry<String, String> nameMapEntry : _oldToNewNamesMap.entrySet())
+            Map<String, Object> settings = new HashMap<String, Object>();
+            for (Entry<String, List<AttributeTransformer>> entry : _transformers.entrySet())
             {
-                String attributeName = nameMapEntry.getKey();
+                String attributeName = entry.getKey();
                 if (attributes.containsKey(attributeName))
                 {
-                    messageStoreSettings.put(nameMapEntry.getValue(), attributes.get(attributeName));
+                    Object attributeValue = attributes.get(attributeName);
+                    MutatableEntry newEntry = new MutatableEntry(attributeName, attributeValue);
+
+                    List<AttributeTransformer> transformers = entry.getValue();
+                    for (AttributeTransformer attributeTransformer : transformers)
+                    {
+                        newEntry = attributeTransformer.transform(newEntry);
+                        if (newEntry == null)
+                        {
+                            break;
+                        }
+                    }
+                    if (newEntry != null)
+                    {
+                        settings.put(newEntry.getKey(), newEntry.getValue());
+                    }
+
+                    _namesToBeDeleted.add(attributeName);
                 }
             }
-            messageStoreSettings.put("storeType", _storeType);
-            return messageStoreSettings;
+            return settings;
         }
 
-        @Override
         public Set<String> getNamesToBeDeleted()
         {
-            Set<String> names = new HashSet<String>(_oldToNewNamesMap.keySet());
-            names.add("storeType");
-            return names;
+            return _namesToBeDeleted;
         }
+    }
 
+    private AttributeTransformer copyAttribute()
+    {
+        return CopyAttribute.INSTANCE;
     }
 
-    public class JDBCMessageStoreEntryUpgrader implements StoreEntryUpgrader
+    private AttributeTransformer removeAttribute()
     {
-        private final String[] JDBC_ATTRIBUTES =
-            { "connectionURL", "connectionPool", "jdbcBigIntType", "jdbcBytesForBlob", "jdbcVarbinaryType",
"jdbcBlobType",
-              "partitionCount", "maxConnectionsPerPartition", "minConnectionsPerPartition"
};
+        return RemoveAttribute.INSTANCE;
+    }
 
-        @Override
-        public Map<String, Object> upgrade(Map<String, Object> attributes)
-        {
-            Map<String, Object> messageStoreSettings = new HashMap<String, Object>();
+    private AttributeTransformer mutateAttributeValue(Object newValue)
+    {
+        return new MutateAttributeValue(newValue);
+    }
 
-            if (attributes.containsKey("storePath"))
-            {
-                messageStoreSettings.put("connectionURL", attributes.get("storePath"));
-            }
+    private AttributeTransformer mutateAttributeName(String newName)
+    {
+        return new MutateAttributeName(newName);
+    }
 
-            copyJdbcStoreSettings(attributes, messageStoreSettings);
+    private interface AttributeTransformer
+    {
+        MutatableEntry transform(MutatableEntry entry);
+    }
 
-            messageStoreSettings.put("storeType", "JDBC");
-            return messageStoreSettings;
-        }
+    private static class CopyAttribute implements AttributeTransformer
+    {
+        private static final CopyAttribute INSTANCE = new CopyAttribute();
 
-        @Override
-        public Set<String> getNamesToBeDeleted()
+        private CopyAttribute()
         {
-            Set<String> names = new HashSet<String>();
-            names.addAll(Arrays.asList(JDBC_ATTRIBUTES));
-            names.add("storePath");
-            names.add("storeType");
-            return names;
         }
 
-        private void copyJdbcStoreSettings(Map<String, Object> attributes, Map<String,
Object> messageStoreSettings)
+        @Override
+        public MutatableEntry transform(MutatableEntry entry)
         {
-            for (String jdbcAttribute : JDBC_ATTRIBUTES)
-            {
-                if (attributes.containsKey(jdbcAttribute))
-                {
-                    messageStoreSettings.put(jdbcAttribute, attributes.get(jdbcAttribute));
-                }
-            }
+            return entry;
         }
-
     }
 
-    public class JDBCConfigurationStoreEntryUpgrader implements StoreEntryUpgrader
+    private static class RemoveAttribute implements AttributeTransformer
     {
+        private static final RemoveAttribute INSTANCE = new RemoveAttribute();
 
-        private final String[] JDBC_ATTRIBUTES =
-            { "connectionPool", "jdbcBigIntType", "jdbcBytesForBlob", "jdbcVarbinaryType",
"jdbcBlobType", "partitionCount",
-              "maxConnectionsPerPartition", "minConnectionsPerPartition" };
+        private RemoveAttribute()
+        {
+        }
 
         @Override
-        public Map<String, Object> upgrade(Map<String, Object> attributes)
+        public MutatableEntry transform(MutatableEntry entry)
         {
-            Map<String, Object> messageStoreSettings = new HashMap<String, Object>();
-
-            if (attributes.containsKey("configStorePath"))
-            {
-                messageStoreSettings.put("connectionURL", attributes.get("configStorePath"));
-            }
-
-            if (attributes.containsKey("configConnectionURL"))
-            {
-                messageStoreSettings.put("connectionURL", attributes.get("configConnectionURL"));
-            }
+            return null;
+        }
+    }
 
-            copyJdbcStoreSettings(attributes, messageStoreSettings);
+    private class MutateAttributeName implements AttributeTransformer
+    {
+        private final String _newName;
 
-            messageStoreSettings.put("storeType", "JDBC");
-            return messageStoreSettings;
+        public MutateAttributeName(String newName)
+        {
+            _newName = newName;
         }
 
         @Override
-        public Set<String> getNamesToBeDeleted()
+        public MutatableEntry transform(MutatableEntry entry)
         {
-            Set<String> names = new HashSet<String>();
-            names.addAll(Arrays.asList(JDBC_ATTRIBUTES));
-            names.add("configStorePath");
-            names.add("configStoreType");
-            names.add("configConnectionURL");
-            return names;
+            entry.setKey(_newName);
+            return entry;
         }
+    }
+
+    private static class MutateAttributeValue implements AttributeTransformer
+    {
+        private final Object _newValue;
 
-        private void copyJdbcStoreSettings(Map<String, Object> attributes, Map<String,
Object> messageStoreSettings)
+        public MutateAttributeValue(Object newValue)
         {
-            for (String jdbcAttribute : JDBC_ATTRIBUTES)
-            {
-                if (attributes.containsKey(jdbcAttribute))
-                {
-                    messageStoreSettings.put(jdbcAttribute, attributes.get(jdbcAttribute));
-                }
-            }
+            _newValue = newValue;
+        }
+
+        @Override
+        public MutatableEntry transform(MutatableEntry entry)
+        {
+            entry.setValue(_newValue);
+            return entry;
         }
     }
 
-    public class StandardVirtualHostUpgrader implements VirtualHostEntryUpgrader
+    private static class MutatableEntry
     {
-        Map<String, StoreEntryUpgrader> _messageStoreEntryUpgrader = new HashMap<String,
StoreEntryUpgrader>()
-        {{
-            put("JDBC", new JDBCMessageStoreEntryUpgrader());
-            put("BDB", new GenericMessageStoreEntryUpgrader("BDB", new HashMap<String,
String>()
-            {{
-                put("storePath", "storePath");
-                put("bdbEnvironmentConfig", "bdbEnvironmentConfig");
-                put("storeUnderfullSize", "storeUnderfullSize");
-                put("storeOverfullSize", "storeOverfullSize");
-            }}));
-            put("DERBY", new GenericMessageStoreEntryUpgrader("DERBY", new HashMap<String,
String>()
-            {{
-                put("storePath", "storePath");
-                put("storeUnderfullSize", "storeUnderfullSize");
-                put("storeOverfullSize", "storeOverfullSize");
-            }}));
-            put("MEMORY", new GenericMessageStoreEntryUpgrader("Memory", Collections.<String,
String> emptyMap()));
-        }};
-        Map<String, StoreEntryUpgrader> _configurationStoreEntryUpgrader = new HashMap<String,
StoreEntryUpgrader>()
-        {{
-            put("JDBC", new JDBCConfigurationStoreEntryUpgrader());
-            put("DERBY", new GenericMessageStoreEntryUpgrader("DERBY", new HashMap<String,
String>()
-            {{
-                put("configStorePath", "storePath");
-                put("configStoreType", "storeType");
-            }}));
-            put("BDB", new GenericMessageStoreEntryUpgrader("BDB", new HashMap<String,
String>()
-            {{
-                put("configStoreType", "storeType");
-                put("configStorePath", "storePath");
-                put("bdbEnvironmentConfig", "bdbEnvironmentConfig");
-            }}));
-            put("MEMORY", new GenericMessageStoreEntryUpgrader("Memory",
-                                            Collections.<String, String> singletonMap("configStoreType",
"storeType")));
-            put("JSON", new GenericMessageStoreEntryUpgrader("JSON", new HashMap<String,
String>()
-            {{
-                put("configStorePath", "storePath");
-                put("configStoreType", "storeType");
-            }}));
-        }};
+        private String _key;
+        private Object _value;
 
-        @Override
-        public ConfigurationEntry upgrade(ConfigurationEntryStore store, ConfigurationEntry
vhost)
+        public MutatableEntry(String key, Object value)
         {
-            Map<String, Object> attributes = vhost.getAttributes();
-            Map<String, Object> newAttributes = new HashMap<String, Object>(attributes);
-
-            String capitalisedStoreType = String.valueOf(attributes.get("storeType")).toUpperCase();
-            StoreEntryUpgrader messageStoreSettingsUpgrader = _messageStoreEntryUpgrader.get(capitalisedStoreType);
-            Map<String, Object> messageStoreSettings = null;
-            if (messageStoreSettingsUpgrader != null)
-            {
-                messageStoreSettings = messageStoreSettingsUpgrader.upgrade(attributes);
-            }
+            _key = key;
+            _value = value;
+        }
 
-            if (attributes.containsKey("configStoreType"))
-            {
-                String capitaliseConfigStoreType = ((String) attributes.get("configStoreType")).toUpperCase();
-                StoreEntryUpgrader configurationStoreSettingsUpgrader = _configurationStoreEntryUpgrader
-                        .get(capitaliseConfigStoreType);
-                Map<String, Object> configurationStoreSettings = configurationStoreSettingsUpgrader.upgrade(attributes);
-                newAttributes.keySet().removeAll(configurationStoreSettingsUpgrader.getNamesToBeDeleted());
-                newAttributes.put("configurationStoreSettings", configurationStoreSettings);
-            }
+        public String getKey()
+        {
+            return _key;
+        }
 
-            if (messageStoreSettingsUpgrader != null)
-            {
-                newAttributes.keySet().removeAll(messageStoreSettingsUpgrader.getNamesToBeDeleted());
-                newAttributes.put("messageStoreSettings", messageStoreSettings);
-            }
+        public void setKey(String key)
+        {
+            _key = key;
+        }
 
-            return new ConfigurationEntry(vhost.getId(), vhost.getType(), newAttributes,
vhost.getChildrenIds(), store);
+        public Object getValue()
+        {
+            return _value;
         }
 
+        public void setValue(Object value)
+        {
+            _value = value;
+        }
     }
 
 }
\ No newline at end of file



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org


Mime
View raw message