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