You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by rg...@apache.org on 2013/06/18 22:36:45 UTC

svn commit: r1494289 - in /qpid/branches/java-broker-vhost-refactor/java/broker/src/main/java/org/apache/qpid/server/configuration/startup: BrokerRecoverer.java StoreUpgrader.java

Author: rgodfrey
Date: Tue Jun 18 20:36:45 2013
New Revision: 1494289

URL: http://svn.apache.org/r1494289
Log:
Add config store upgrader

Added:
    qpid/branches/java-broker-vhost-refactor/java/broker/src/main/java/org/apache/qpid/server/configuration/startup/StoreUpgrader.java   (with props)
Modified:
    qpid/branches/java-broker-vhost-refactor/java/broker/src/main/java/org/apache/qpid/server/configuration/startup/BrokerRecoverer.java

Modified: qpid/branches/java-broker-vhost-refactor/java/broker/src/main/java/org/apache/qpid/server/configuration/startup/BrokerRecoverer.java
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-vhost-refactor/java/broker/src/main/java/org/apache/qpid/server/configuration/startup/BrokerRecoverer.java?rev=1494289&r1=1494288&r2=1494289&view=diff
==============================================================================
--- qpid/branches/java-broker-vhost-refactor/java/broker/src/main/java/org/apache/qpid/server/configuration/startup/BrokerRecoverer.java (original)
+++ qpid/branches/java-broker-vhost-refactor/java/broker/src/main/java/org/apache/qpid/server/configuration/startup/BrokerRecoverer.java Tue Jun 18 20:36:45 2013
@@ -85,10 +85,9 @@ public class BrokerRecoverer implements 
     @Override
     public Broker create(RecovererProvider recovererProvider, ConfigurationEntry entry, ConfiguredObject... parents)
     {
-        Map<String, Object> attributes = entry.getAttributes();
-        validateAttributes(attributes);
+        //Map<String, Object> attributes = entry.getAttributes();
+        Map<String, Object> attributesCopy = validateAttributes(entry);
 
-        Map<String, Object> attributesCopy = new HashMap<String, Object>(attributes);
         attributesCopy.put(Broker.MODEL_VERSION, Model.MODEL_VERSION);
 
         StoreConfigurationChangeListener storeChangeListener = new StoreConfigurationChangeListener(entry.getStore());
@@ -128,8 +127,10 @@ public class BrokerRecoverer implements 
         return broker;
     }
 
-    private void validateAttributes(Map<String, Object> attributes)
+    private Map<String, Object> validateAttributes(ConfigurationEntry entry)
     {
+        Map<String, Object> attributes = entry.getAttributes();
+
         String modelVersion = null;
         if (attributes.containsKey(Broker.MODEL_VERSION))
         {
@@ -157,6 +158,22 @@ public class BrokerRecoverer implements 
             throw new IllegalConfigurationException("The model version '" + modelVersion
                     + "' in configuration is incompatible with the broker model version '" + Model.MODEL_VERSION + "'");
         }
+
+        if(!Model.MODEL_VERSION.equals(modelVersion))
+        {
+            String oldVersion;
+            do
+            {
+                oldVersion = modelVersion;
+                StoreUpgrader.upgrade(entry.getStore());
+                modelVersion = MapValueConverter.getStringAttribute(Broker.MODEL_VERSION, attributes, null);
+            }
+            while(!(modelVersion.equals(oldVersion) || modelVersion.equals(Model.MODEL_VERSION)));
+        }
+
+        attributes.put(Broker.MODEL_VERSION, Model.MODEL_VERSION);
+
+        return new HashMap<String, Object>(attributes);
     }
 
     private void recoverType(RecovererProvider recovererProvider,

Added: qpid/branches/java-broker-vhost-refactor/java/broker/src/main/java/org/apache/qpid/server/configuration/startup/StoreUpgrader.java
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-vhost-refactor/java/broker/src/main/java/org/apache/qpid/server/configuration/startup/StoreUpgrader.java?rev=1494289&view=auto
==============================================================================
--- qpid/branches/java-broker-vhost-refactor/java/broker/src/main/java/org/apache/qpid/server/configuration/startup/StoreUpgrader.java (added)
+++ qpid/branches/java-broker-vhost-refactor/java/broker/src/main/java/org/apache/qpid/server/configuration/startup/StoreUpgrader.java Tue Jun 18 20:36:45 2013
@@ -0,0 +1,86 @@
+package org.apache.qpid.server.configuration.startup;/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.
+ *
+ */
+
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import org.apache.qpid.server.configuration.ConfigurationEntry;
+import org.apache.qpid.server.configuration.ConfigurationEntryStore;
+import org.apache.qpid.server.model.Broker;
+
+public abstract class StoreUpgrader
+{
+
+    private static Map<String, StoreUpgrader> _upgraders = new HashMap<String, StoreUpgrader>();
+
+    // Note: don't use externally defined constants in upgraders in case they change, the values here MUST stay the same
+    // no matter what changes are made to the code in the future
+
+    private final static StoreUpgrader UPGRADE_1_0 = new StoreUpgrader("1.0")
+    {
+        @Override
+        protected void doUpgrade(ConfigurationEntryStore store)
+        {
+            ConfigurationEntry root = store.getRootEntry();
+            Map<String, Collection<ConfigurationEntry>> children = root.getChildren();
+            Collection<ConfigurationEntry> vhosts = children.get("VirtualHost");
+            Collection<ConfigurationEntry> changed =  new HashSet<ConfigurationEntry>();
+            for(ConfigurationEntry vhost : vhosts)
+            {
+                Map<String, Object> attributes = vhost.getAttributes();
+                if(attributes.containsKey("storeType"))
+                {
+                    attributes = new HashMap<String, Object>(attributes);
+                    attributes.put("type", "STANDARD");
+
+                    changed.add(new ConfigurationEntry(vhost.getId(),vhost.getType(),attributes,vhost.getChildrenIds(),store));
+
+                }
+
+            }
+            Map<String, Object> attributes = new HashMap<String, Object>(root.getAttributes());
+            attributes.put(Broker.MODEL_VERSION, "1.1");
+            changed.add(new ConfigurationEntry(root.getId(),root.getType(),attributes,root.getChildrenIds(),store));
+
+            store.save(changed.toArray(new ConfigurationEntry[changed.size()]));
+
+        }
+    };
+
+    private StoreUpgrader(String version)
+    {
+        _upgraders.put(version, this);
+    }
+
+    public static void upgrade(ConfigurationEntryStore store)
+    {
+        StoreUpgrader upgrader = _upgraders.get(store.getRootEntry().getAttributes().get(Broker.MODEL_VERSION).toString());
+        if(upgrader != null)
+        {
+            upgrader.doUpgrade(store);
+        }
+    }
+
+    protected abstract void doUpgrade(ConfigurationEntryStore store);
+
+
+}

Propchange: qpid/branches/java-broker-vhost-refactor/java/broker/src/main/java/org/apache/qpid/server/configuration/startup/StoreUpgrader.java
------------------------------------------------------------------------------
    svn:eol-style = native



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