You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by kw...@apache.org on 2014/04/22 14:32:23 UTC
svn commit: r1589112 [1/2] - in /qpid/trunk/qpid/java/broker-core/src:
main/java/org/apache/qpid/server/
main/java/org/apache/qpid/server/configuration/startup/
main/java/org/apache/qpid/server/model/
main/java/org/apache/qpid/server/registry/ main/jav...
Author: kwall
Date: Tue Apr 22 12:32:23 2014
New Revision: 1589112
URL: http://svn.apache.org/r1589112
Log:
QPID-5715: [Java Broker] Refactor VirtualHostStoreUpgraderAndRecoverer/BrokerStoreUpgrader to avoid duplicated code
Added:
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/BrokerStoreUpgraderAndRecoverer.java
- copied, changed from r1588966, qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/startup/BrokerStoreUpgrader.java
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/GenericRecoverer.java
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/GenericStoreUpgrader.java
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/StoreUpgraderPhase.java
- copied, changed from r1588966, qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/startup/StoreUpgraderPhase.java
qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/BrokerRecovererTest.java
- copied, changed from r1588966, qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/startup/BrokerRecovererTest.java
Removed:
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/startup/BrokerStoreUpgrader.java
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/startup/StoreUpgraderPhase.java
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/startup/UpgraderPhaseFactory.java
qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/startup/BrokerRecovererTest.java
Modified:
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/Broker.java
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/SystemContext.java
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/SystemContextImpl.java
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/registry/ApplicationRegistry.java
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/VirtualHostStoreUpgraderAndRecoverer.java
Modified: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/Broker.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/Broker.java?rev=1589112&r1=1589111&r2=1589112&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/Broker.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/Broker.java Tue Apr 22 12:32:23 2014
@@ -25,6 +25,7 @@ import java.io.IOException;
import java.io.InputStream;
import java.security.PrivilegedAction;
import java.security.PrivilegedExceptionAction;
+import java.util.Collections;
import java.util.List;
import java.util.Properties;
import java.util.Set;
@@ -34,7 +35,6 @@ import javax.security.auth.Subject;
import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
-
import org.apache.qpid.server.configuration.BrokerConfigurationStoreCreator;
import org.apache.qpid.server.configuration.store.ManagementModeStoreHandler;
import org.apache.qpid.server.configuration.updater.TaskExecutor;
@@ -152,6 +152,8 @@ public class Broker
store = new ManagementModeStoreHandler(store, options);
}
+ store.openConfigurationStore(systemContext, Collections.<String, Object>emptyMap());
+
_applicationRegistry = new ApplicationRegistry(store,systemContext);
try
{
Modified: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/SystemContext.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/SystemContext.java?rev=1589112&r1=1589111&r2=1589112&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/SystemContext.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/SystemContext.java Tue Apr 22 12:32:23 2014
@@ -23,13 +23,10 @@ package org.apache.qpid.server.model;
import org.apache.qpid.server.BrokerOptions;
import org.apache.qpid.server.logging.EventLogger;
import org.apache.qpid.server.logging.LogRecorder;
-import org.apache.qpid.server.store.ConfiguredObjectRecord;
@ManagedObject (creatable = false)
public interface SystemContext<X extends SystemContext<X>> extends ConfiguredObject<X>
{
- void resolveObjects(ConfiguredObjectRecord... records);
-
EventLogger getEventLogger();
BrokerOptions getBrokerOptions();
Modified: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/SystemContextImpl.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/SystemContextImpl.java?rev=1589112&r1=1589111&r2=1589112&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/SystemContextImpl.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/SystemContextImpl.java Tue Apr 22 12:32:23 2014
@@ -84,141 +84,6 @@ public class SystemContextImpl extends A
}
@Override
- public void resolveObjects(final ConfiguredObjectRecord... records)
- {
- runTask(new TaskExecutor.VoidTask()
- {
- @Override
- public void execute()
- {
-
-
- ConfiguredObjectFactory factory = getObjectFactory();
-
- Map<UUID, ConfiguredObject<?>> resolvedObjects = new HashMap<UUID, ConfiguredObject<?>>();
- resolvedObjects.put(getId(), SystemContextImpl.this);
-
- Collection<ConfiguredObjectRecord> recordsWithUnresolvedParents =
- new ArrayList<ConfiguredObjectRecord>(Arrays.asList(records));
- Collection<UnresolvedConfiguredObject<? extends ConfiguredObject>> recordsWithUnresolvedDependencies =
- new ArrayList<UnresolvedConfiguredObject<? extends ConfiguredObject>>();
-
- boolean updatesMade;
-
- do
- {
- updatesMade = false;
- Iterator<ConfiguredObjectRecord> iter = recordsWithUnresolvedParents.iterator();
- while (iter.hasNext())
- {
- ConfiguredObjectRecord record = iter.next();
- Collection<ConfiguredObject<?>> parents = new ArrayList<ConfiguredObject<?>>();
- boolean foundParents = true;
- for (ConfiguredObjectRecord parent : record.getParents().values())
- {
- if (!resolvedObjects.containsKey(parent.getId()))
- {
- foundParents = false;
- break;
- }
- else
- {
- parents.add(resolvedObjects.get(parent.getId()));
- }
- }
- if (foundParents)
- {
- iter.remove();
- UnresolvedConfiguredObject<? extends ConfiguredObject> recovered =
- factory.recover(record, parents.toArray(new ConfiguredObject<?>[parents.size()]));
- Collection<ConfiguredObjectDependency<?>> dependencies =
- recovered.getUnresolvedDependencies();
- if (dependencies.isEmpty())
- {
- updatesMade = true;
- ConfiguredObject<?> resolved = recovered.resolve();
- resolvedObjects.put(resolved.getId(), resolved);
- }
- else
- {
- recordsWithUnresolvedDependencies.add(recovered);
- }
- }
-
- }
-
- Iterator<UnresolvedConfiguredObject<? extends ConfiguredObject>> unresolvedIter =
- recordsWithUnresolvedDependencies.iterator();
-
- while (unresolvedIter.hasNext())
- {
- UnresolvedConfiguredObject<? extends ConfiguredObject> unresolvedObject = unresolvedIter.next();
- Collection<ConfiguredObjectDependency<?>> dependencies =
- new ArrayList<ConfiguredObjectDependency<?>>(unresolvedObject.getUnresolvedDependencies());
-
- for (ConfiguredObjectDependency dependency : dependencies)
- {
- if (dependency instanceof ConfiguredObjectIdDependency)
- {
- UUID id = ((ConfiguredObjectIdDependency) dependency).getId();
- if (resolvedObjects.containsKey(id))
- {
- dependency.resolve(resolvedObjects.get(id));
- }
- }
- else if (dependency instanceof ConfiguredObjectNameDependency)
- {
- ConfiguredObject<?> dependentObject = null;
- for (ConfiguredObject<?> parent : unresolvedObject.getParents())
- {
- dependentObject = parent.findConfiguredObject(dependency.getCategoryClass(),
- ((ConfiguredObjectNameDependency) dependency)
- .getName()
- );
- if (dependentObject != null)
- {
- break;
- }
- }
- if (dependentObject != null)
- {
- dependency.resolve(dependentObject);
- }
- }
- else
- {
- throw new ServerScopedRuntimeException("Unknown dependency type "
- + dependency.getClass()
- .getSimpleName());
- }
- }
- if (unresolvedObject.getUnresolvedDependencies().isEmpty())
- {
- updatesMade = true;
- unresolvedIter.remove();
- ConfiguredObject<?> resolved = unresolvedObject.resolve();
- resolvedObjects.put(resolved.getId(), resolved);
- }
- }
-
- } while (updatesMade && !(recordsWithUnresolvedDependencies.isEmpty()
- && recordsWithUnresolvedParents.isEmpty()));
-
- if (!recordsWithUnresolvedDependencies.isEmpty())
- {
- throw new IllegalArgumentException("Cannot resolve some objects: "
- + recordsWithUnresolvedDependencies);
- }
- if (!recordsWithUnresolvedParents.isEmpty())
- {
- throw new IllegalArgumentException("Cannot resolve object because their parents cannot be found"
- + recordsWithUnresolvedParents);
- }
- }
- });
- }
-
- @Override
protected boolean setState(final State currentState, final State desiredState)
{
throw new IllegalArgumentException("Cannot change the state of the SystemContext object");
Modified: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/registry/ApplicationRegistry.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/registry/ApplicationRegistry.java?rev=1589112&r1=1589111&r2=1589112&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/registry/ApplicationRegistry.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/registry/ApplicationRegistry.java Tue Apr 22 12:32:23 2014
@@ -21,11 +21,9 @@
package org.apache.qpid.server.registry;
import org.apache.log4j.Logger;
-
import org.apache.qpid.common.QpidProperties;
import org.apache.qpid.server.BrokerOptions;
import org.apache.qpid.server.configuration.BrokerProperties;
-import org.apache.qpid.server.configuration.startup.BrokerStoreUpgrader;
import org.apache.qpid.server.logging.CompositeStartupMessageLogger;
import org.apache.qpid.server.logging.EventLogger;
import org.apache.qpid.server.logging.Log4jMessageLogger;
@@ -35,6 +33,7 @@ import org.apache.qpid.server.logging.me
import org.apache.qpid.server.model.Broker;
import org.apache.qpid.server.model.State;
import org.apache.qpid.server.model.SystemContext;
+import org.apache.qpid.server.store.BrokerStoreUpgraderAndRecoverer;
import org.apache.qpid.server.store.DurableConfigurationStore;
import org.apache.qpid.util.SystemUtils;
@@ -77,8 +76,8 @@ public class ApplicationRegistry impleme
logStartupMessages(startupLogger);
- BrokerStoreUpgrader upgrader = new BrokerStoreUpgrader(_systemContext);
- _broker = upgrader.upgrade(_store);
+ BrokerStoreUpgraderAndRecoverer upgrader = new BrokerStoreUpgraderAndRecoverer(_systemContext);
+ _broker = upgrader.perform(_store);
_broker.setEventLogger(startupLogger);
_broker.open();
Copied: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/BrokerStoreUpgraderAndRecoverer.java (from r1588966, qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/startup/BrokerStoreUpgrader.java)
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/BrokerStoreUpgraderAndRecoverer.java?p2=qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/BrokerStoreUpgraderAndRecoverer.java&p1=qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/startup/BrokerStoreUpgrader.java&r1=1588966&r2=1589112&rev=1589112&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/startup/BrokerStoreUpgrader.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/BrokerStoreUpgraderAndRecoverer.java Tue Apr 22 12:32:23 2014
@@ -18,42 +18,30 @@
* under the License.
*
*/
-package org.apache.qpid.server.configuration.startup;
+package org.apache.qpid.server.store;
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.Set;
-import java.util.UUID;
-import org.apache.log4j.Logger;
import org.apache.qpid.server.configuration.IllegalConfigurationException;
import org.apache.qpid.server.configuration.store.StoreConfigurationChangeListener;
import org.apache.qpid.server.model.Broker;
-import org.apache.qpid.server.model.BrokerModel;
import org.apache.qpid.server.model.ConfiguredObject;
import org.apache.qpid.server.model.SystemContext;
-import org.apache.qpid.server.store.ConfiguredObjectRecord;
-import org.apache.qpid.server.store.ConfiguredObjectRecordImpl;
-import org.apache.qpid.server.store.DurableConfigurationStore;
-import org.apache.qpid.server.store.DurableConfigurationStoreUpgrader;
-import org.apache.qpid.server.store.NullUpgrader;
-import org.apache.qpid.server.store.handler.ConfiguredObjectRecordHandler;
import org.apache.qpid.server.util.Action;
-public class BrokerStoreUpgrader
+public class BrokerStoreUpgraderAndRecoverer
{
- private final SystemContext _systemContext;
- private Map<String, UpgraderPhaseFactory> _upgraders = new HashMap<String, UpgraderPhaseFactory>();
-
+ private final SystemContext<?> _systemContext;
+ private final Map<String, StoreUpgraderPhase> _upgraders = new HashMap<String, StoreUpgraderPhase>();
// 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
-
- public BrokerStoreUpgrader(SystemContext systemContext)
+ public BrokerStoreUpgraderAndRecoverer(SystemContext<?> systemContext)
{
_systemContext = systemContext;
@@ -63,199 +51,171 @@ public class BrokerStoreUpgrader
register(new Upgrader_1_3_to_1_4());
}
- private void register(UpgraderPhaseFactory factory)
+ private void register(StoreUpgraderPhase upgrader)
{
- _upgraders.put(factory.getFromVersion(), factory);
+ _upgraders.put(upgrader.getFromVersion(), upgrader);
}
- private final class Upgrader_1_0_to_1_1 extends UpgraderPhaseFactory
+ private static final class Upgrader_1_0_to_1_1 extends StoreUpgraderPhase
{
private Upgrader_1_0_to_1_1()
{
- super("1.0", "1.1");
+ super("modelVersion", "1.0", "1.1");
}
@Override
- public StoreUpgraderPhase newInstance()
+ public void configuredObject(ConfiguredObjectRecord record)
{
- return new StoreUpgraderPhase(Broker.MODEL_VERSION, getToVersion())
+ if (record.getType().equals("Broker"))
{
- @Override
- public void configuredObject(ConfiguredObjectRecord record)
- {
- if (record.getType().equals("Broker"))
- {
- record = upgradeRootRecord(record);
- }
- else if (record.getType().equals("VirtualHost") && record.getAttributes().containsKey("storeType"))
- {
- Map<String, Object> updatedAttributes = new HashMap<String, Object>(record.getAttributes());
- updatedAttributes.put("type", "STANDARD");
- record = new ConfiguredObjectRecordImpl(record.getId(), record.getType(), updatedAttributes, record.getParents());
- getUpdateMap().put(record.getId(), record);
- }
-
- getNextUpgrader().configuredObject(record);
- }
+ record = upgradeRootRecord(record);
+ }
+ else if (record.getType().equals("VirtualHost") && record.getAttributes().containsKey("storeType"))
+ {
+ Map<String, Object> updatedAttributes = new HashMap<String, Object>(record.getAttributes());
+ updatedAttributes.put("type", "STANDARD");
+ record = new ConfiguredObjectRecordImpl(record.getId(), record.getType(), updatedAttributes, record.getParents());
+ getUpdateMap().put(record.getId(), record);
+ }
+ getNextUpgrader().configuredObject(record);
+ }
- @Override
- public void complete()
- {
- getNextUpgrader().complete();
- }
- };
+ @Override
+ public void complete()
+ {
+ getNextUpgrader().complete();
}
+
}
- private static final class Upgrader_1_1_to_1_2 extends UpgraderPhaseFactory
+ private static final class Upgrader_1_1_to_1_2 extends StoreUpgraderPhase
{
private Upgrader_1_1_to_1_2()
{
- super("1.1", "1.2");
+ super("modelVersion", "1.1", "1.2");
}
@Override
- public StoreUpgraderPhase newInstance()
+ public void configuredObject(ConfiguredObjectRecord record)
{
- return new StoreUpgraderPhase(Broker.MODEL_VERSION, getToVersion())
+ if (record.getType().equals("Broker"))
{
+ record = upgradeRootRecord(record);
+ }
- @Override
- public void configuredObject(ConfiguredObjectRecord record)
- {
- if (record.getType().equals("Broker"))
- {
- record = upgradeRootRecord(record);
- }
-
- getNextUpgrader().configuredObject(record);
+ getNextUpgrader().configuredObject(record);
- }
+ }
- @Override
- public void complete()
- {
- getNextUpgrader().complete();
- }
- };
+ @Override
+ public void complete()
+ {
+ getNextUpgrader().complete();
}
+
}
- private static final class Upgrader_1_2_to_1_3 extends UpgraderPhaseFactory
+ private static final class Upgrader_1_2_to_1_3 extends StoreUpgraderPhase
{
private Upgrader_1_2_to_1_3()
{
- super("1.2", "1.3");
+ super("modelVersion", "1.2", "1.3");
}
@Override
- public StoreUpgraderPhase newInstance()
+ public void configuredObject(ConfiguredObjectRecord record)
{
- return new StoreUpgraderPhase(Broker.MODEL_VERSION, getToVersion())
+ if (record.getType().equals("TrustStore") && record.getAttributes().containsKey("type"))
{
+ Map<String, Object> updatedAttributes = new HashMap<String, Object>(record.getAttributes());
+ updatedAttributes.put("trustStoreType", updatedAttributes.remove("type"));
+ record = new ConfiguredObjectRecordImpl(record.getId(), record.getType(), updatedAttributes, record.getParents());
+ getUpdateMap().put(record.getId(), record);
- @Override
- public void configuredObject(ConfiguredObjectRecord record)
- {
- if (record.getType().equals("TrustStore") && record.getAttributes().containsKey("type"))
- {
- Map<String, Object> updatedAttributes = new HashMap<String, Object>(record.getAttributes());
- updatedAttributes.put("trustStoreType", updatedAttributes.remove("type"));
- record = new ConfiguredObjectRecordImpl(record.getId(), record.getType(), updatedAttributes, record.getParents());
- getUpdateMap().put(record.getId(), record);
-
- }
- else if (record.getType().equals("KeyStore") && record.getAttributes().containsKey("type"))
- {
- Map<String, Object> updatedAttributes = new HashMap<String, Object>(record.getAttributes());
- updatedAttributes.put("keyStoreType", updatedAttributes.remove("type"));
- record = new ConfiguredObjectRecordImpl(record.getId(), record.getType(), updatedAttributes, record.getParents());
- getUpdateMap().put(record.getId(), record);
+ }
+ else if (record.getType().equals("KeyStore") && record.getAttributes().containsKey("type"))
+ {
+ Map<String, Object> updatedAttributes = new HashMap<String, Object>(record.getAttributes());
+ updatedAttributes.put("keyStoreType", updatedAttributes.remove("type"));
+ record = new ConfiguredObjectRecordImpl(record.getId(), record.getType(), updatedAttributes, record.getParents());
+ getUpdateMap().put(record.getId(), record);
- }
- else if (record.getType().equals("Broker"))
- {
- record = upgradeRootRecord(record);
- }
+ }
+ else if (record.getType().equals("Broker"))
+ {
+ record = upgradeRootRecord(record);
+ }
- getNextUpgrader().configuredObject(record);
+ getNextUpgrader().configuredObject(record);
- }
+ }
- @Override
- public void complete()
- {
- getNextUpgrader().complete();
- }
- };
+ @Override
+ public void complete()
+ {
+ getNextUpgrader().complete();
}
+
}
- private static final class Upgrader_1_3_to_1_4 extends UpgraderPhaseFactory
+ private static final class Upgrader_1_3_to_1_4 extends StoreUpgraderPhase
{
private Upgrader_1_3_to_1_4()
{
- super("1.3", "1.4");
+ super("modelVersion", "1.3", "1.4");
}
+ @SuppressWarnings("serial")
+ private Map<String, VirtualHostEntryUpgrader> _vhostUpgraderMap = new HashMap<String, VirtualHostEntryUpgrader>()
+ {{
+ put("BDB_HA", new BdbHaVirtualHostUpgrader());
+ put("STANDARD", new StandardVirtualHostUpgrader());
+ }};
+
@Override
- public StoreUpgraderPhase newInstance()
+ public void configuredObject(ConfiguredObjectRecord record)
{
- return new StoreUpgraderPhase(Broker.MODEL_VERSION, getToVersion())
+ if (record.getType().equals("VirtualHost"))
{
-
- @SuppressWarnings("serial")
- private Map<String, VirtualHostEntryUpgrader> _vhostUpgraderMap = new HashMap<String, VirtualHostEntryUpgrader>()
- {{
- put("BDB_HA", new BdbHaVirtualHostUpgrader());
- put("STANDARD", new StandardVirtualHostUpgrader());
- }};
-
- @Override
- public void configuredObject(ConfiguredObjectRecord record)
+ Map<String, Object> attributes = record.getAttributes();
+ if (attributes.containsKey("configPath"))
{
- if (record.getType().equals("VirtualHost"))
- {
- Map<String, Object> attributes = record.getAttributes();
- if (attributes.containsKey("configPath"))
- {
- throw new IllegalConfigurationException("Auto-upgrade of virtual host " + attributes.get("name") + " having XML configuration is not supported. Virtual host configuration file is " + attributes.get("configPath"));
- }
+ throw new IllegalConfigurationException("Auto-upgrade of virtual host " + attributes.get("name") + " having XML configuration is not supported. Virtual host configuration file is " + attributes.get("configPath"));
+ }
- String type = (String) attributes.get("type");
- VirtualHostEntryUpgrader vhostUpgrader = _vhostUpgraderMap.get(type);
- if (vhostUpgrader == null)
- {
- throw new IllegalConfigurationException("Don't know how to perform an upgrade from version for virtualhost type " + type);
- }
- record = vhostUpgrader.upgrade(record);
- getUpdateMap().put(record.getId(), record);
- }
- else if (record.getType().equals("Plugin") && record.getAttributes().containsKey("pluginType"))
- {
- Map<String, Object> updatedAttributes = new HashMap<String, Object>(record.getAttributes());
- updatedAttributes.put("type", updatedAttributes.remove("pluginType"));
- record = new ConfiguredObjectRecordImpl(record.getId(), record.getType(), updatedAttributes, record.getParents());
- getUpdateMap().put(record.getId(), record);
+ String type = (String) attributes.get("type");
+ VirtualHostEntryUpgrader vhostUpgrader = _vhostUpgraderMap.get(type);
+ if (vhostUpgrader == null)
+ {
+ throw new IllegalConfigurationException("Don't know how to perform an upgrade from version for virtualhost type " + type);
+ }
+ record = vhostUpgrader.upgrade(record);
+ getUpdateMap().put(record.getId(), record);
+ }
+ else if (record.getType().equals("Plugin") && record.getAttributes().containsKey("pluginType"))
+ {
+ Map<String, Object> updatedAttributes = new HashMap<String, Object>(record.getAttributes());
+ updatedAttributes.put("type", updatedAttributes.remove("pluginType"));
+ record = new ConfiguredObjectRecordImpl(record.getId(), record.getType(), updatedAttributes, record.getParents());
+ getUpdateMap().put(record.getId(), record);
- }
- else if (record.getType().equals("Broker"))
- {
- record = upgradeRootRecord(record);
- }
+ }
+ else if (record.getType().equals("Broker"))
+ {
+ record = upgradeRootRecord(record);
+ }
- getNextUpgrader().configuredObject(record);
+ getNextUpgrader().configuredObject(record);
- }
+ }
- @Override
- public void complete()
- {
- getNextUpgrader().complete();
- }
- };
+ @Override
+ public void complete()
+ {
+ getNextUpgrader().complete();
}
+
}
private static interface VirtualHostEntryUpgrader
@@ -560,163 +520,52 @@ public class BrokerStoreUpgrader
}
}
- public Broker<?> upgrade(DurableConfigurationStore store)
- {
- final BrokerStoreRecoveryHandler recoveryHandler = new BrokerStoreRecoveryHandler(_systemContext, store, _upgraders);
- store.openConfigurationStore(_systemContext, Collections.<String,Object>emptyMap());
- store.visitConfiguredObjectRecords(recoveryHandler);
-
- return recoveryHandler.getBroker();
- }
-
-
- private static class BrokerStoreRecoveryHandler implements ConfiguredObjectRecordHandler
+ public Broker<?> perform(final DurableConfigurationStore store)
{
- private static Logger LOGGER = Logger.getLogger(BrokerStoreRecoveryHandler.class);
-
- private DurableConfigurationStoreUpgrader _upgrader;
- private DurableConfigurationStore _store;
- private final Map<UUID, ConfiguredObjectRecord> _records = new HashMap<UUID, ConfiguredObjectRecord>();
- private final SystemContext _systemContext;
- private Map<String, UpgraderPhaseFactory> _upgraders;
-
- private BrokerStoreRecoveryHandler(final SystemContext systemContext, DurableConfigurationStore store, Map<String, UpgraderPhaseFactory> upgraders)
- {
- _systemContext = systemContext;
- _store = store;
- _upgraders = upgraders;
- }
-
+ final String brokerCategory = Broker.class.getSimpleName();
+ final GenericStoreUpgrader upgrader = new GenericStoreUpgrader(brokerCategory, Broker.MODEL_VERSION, store, _upgraders);
+ upgrader.upgrade();
- @Override
- public void begin()
- {
- }
+ new GenericRecoverer(_systemContext, brokerCategory).recover(upgrader.getRecords());
- @Override
- public boolean handle(final ConfiguredObjectRecord object)
+ final StoreConfigurationChangeListener configChangeListener = new StoreConfigurationChangeListener(store);
+ applyRecursively(_systemContext.getBroker(), new Action<ConfiguredObject<?>>()
{
- _records.put(object.getId(), object);
- return true;
- }
-
- @Override
- public void end()
- {
- String version = getCurrentVersion();
-
- while(!BrokerModel.MODEL_VERSION.equals(version))
- {
- LOGGER.debug("Adding broker store upgrader from model version: " + version);
- final UpgraderPhaseFactory upgraderPhaseFactory = _upgraders.get(version);
- StoreUpgraderPhase upgrader = upgraderPhaseFactory.newInstance();
- if(_upgrader == null)
- {
- _upgrader = upgrader;
- }
- else
- {
- _upgrader.setNextUpgrader(upgrader);
- }
- version = upgraderPhaseFactory.getToVersion();
- }
-
- if(_upgrader == null)
- {
- _upgrader = new NullUpgrader();
- }
- else
+ @Override
+ public void performAction(final ConfiguredObject<?> object)
{
- _upgrader.setNextUpgrader(new NullUpgrader());
+ object.addChangeListener(configChangeListener);
}
+ });
- for(ConfiguredObjectRecord record : _records.values())
- {
- _upgrader.configuredObject(record);
- }
-
- Map<UUID, ConfiguredObjectRecord> deletedRecords = _upgrader.getDeletedRecords();
- Map<UUID, ConfiguredObjectRecord> updatedRecords = _upgrader.getUpdatedRecords();
-
- LOGGER.debug("Broker store upgrade: " + deletedRecords.size() + " records deleted");
- LOGGER.debug("Broker store upgrade: " + updatedRecords.size() + " records updated");
- LOGGER.debug("Broker store upgrade: " + _records.size() + " total records");
-
- _store.update(true, updatedRecords.values().toArray(new ConfiguredObjectRecord[updatedRecords.size()]));
- _store.remove(deletedRecords.values().toArray(new ConfiguredObjectRecord[deletedRecords.size()]));
-
-
-
-
- _records.keySet().removeAll(deletedRecords.keySet());
- _records.putAll(updatedRecords);
-
- _systemContext.resolveObjects(_records.values().toArray(new ConfiguredObjectRecord[_records.size()]));
-
- final StoreConfigurationChangeListener configChangeListener = new StoreConfigurationChangeListener(_store);
- applyRecursively(_systemContext.getBroker(),
- new Action<ConfiguredObject<?>>()
- {
- @Override
- public void performAction(final ConfiguredObject<?> object)
- {
- object.addChangeListener(configChangeListener);
- }
-
-
- });
-
- }
-
- private void applyRecursively(final ConfiguredObject<?> object, final Action<ConfiguredObject<?>> action)
- {
- applyRecursively(object, action, new HashSet<ConfiguredObject<?>>());
- }
+ return _systemContext.getBroker();
+ }
- private void applyRecursively(final ConfiguredObject<?> object,
- final Action<ConfiguredObject<?>> action,
- final HashSet<ConfiguredObject<?>> visited)
- {
- if(!visited.contains(object))
- {
- visited.add(object);
- action.performAction(object);
- for(Class<? extends ConfiguredObject> childClass : object.getModel().getChildTypes(object.getCategoryClass()))
- {
- Collection<? extends ConfiguredObject> children = object.getChildren(childClass);
- if(children != null)
- {
- for(ConfiguredObject<?> child : children)
- {
- applyRecursively(child, action, visited);
- }
- }
- }
- }
- }
+ private void applyRecursively(final ConfiguredObject<?> object, final Action<ConfiguredObject<?>> action)
+ {
+ applyRecursively(object, action, new HashSet<ConfiguredObject<?>>());
+ }
- private String getCurrentVersion()
+ private void applyRecursively(final ConfiguredObject<?> object,
+ final Action<ConfiguredObject<?>> action,
+ final HashSet<ConfiguredObject<?>> visited)
+ {
+ if(!visited.contains(object))
{
- for(ConfiguredObjectRecord record : _records.values())
+ visited.add(object);
+ action.performAction(object);
+ for(Class<? extends ConfiguredObject> childClass : object.getModel().getChildTypes(object.getCategoryClass()))
{
- if(record.getType().equals("Broker"))
+ Collection<? extends ConfiguredObject> children = object.getChildren(childClass);
+ if(children != null)
{
- String version = (String) record.getAttributes().get(Broker.MODEL_VERSION);
- if(version == null)
+ for(ConfiguredObject<?> child : children)
{
- version = "1.0";
+ applyRecursively(child, action, visited);
}
- return version;
}
}
- return BrokerModel.MODEL_VERSION;
- }
-
- public Broker getBroker()
- {
- return _systemContext.getBroker();
}
}
-
}
Added: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/GenericRecoverer.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/GenericRecoverer.java?rev=1589112&view=auto
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/GenericRecoverer.java (added)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/GenericRecoverer.java Tue Apr 22 12:32:23 2014
@@ -0,0 +1,218 @@
+/*
+ *
+ * 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.
+ *
+ */
+package org.apache.qpid.server.store;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+
+import org.apache.log4j.Logger;
+import org.apache.qpid.server.configuration.updater.TaskExecutor;
+import org.apache.qpid.server.model.ConfiguredObject;
+import org.apache.qpid.server.model.ConfiguredObjectFactory;
+import org.apache.qpid.server.util.ServerScopedRuntimeException;
+
+public class GenericRecoverer
+{
+ private static final Logger LOGGER = Logger.getLogger(GenericRecoverer.class);
+
+ private final ConfiguredObject<?> _parentOfRoot;
+ private final String _rootCategory;
+
+ public GenericRecoverer(ConfiguredObject<?> parentOfRoot, String rootCategory)
+ {
+ _parentOfRoot = parentOfRoot;
+ _rootCategory = rootCategory;
+ }
+
+ public void recover(final List<ConfiguredObjectRecord> records)
+ {
+ _parentOfRoot.getTaskExecutor().run(new TaskExecutor.VoidTask()
+ {
+ @Override
+ public void execute()
+ {
+ performRecover(records);
+ }
+
+ @Override
+ public String toString()
+ {
+ return _rootCategory + " recovery";
+ }
+ });
+
+ }
+
+ private void performRecover(List<ConfiguredObjectRecord> records)
+ {
+ ConfiguredObjectRecord rootRecord = null;
+ for (ConfiguredObjectRecord record : records)
+ {
+ if (_rootCategory.equals(record.getType()))
+ {
+ rootRecord = record;
+ break;
+ }
+ }
+
+ if (LOGGER.isDebugEnabled())
+ {
+ LOGGER.debug("Root record " + rootRecord);
+ }
+
+ if (rootRecord != null)
+ {
+
+ if (rootRecord.getParents() == null || rootRecord.getParents().isEmpty())
+ {
+ records = new ArrayList<ConfiguredObjectRecord>(records);
+
+ String parentOfRootCategory = _parentOfRoot.getCategoryClass().getSimpleName();
+ ConfiguredObjectRecord parentRecord = new ConfiguredObjectRecordImpl(_parentOfRoot.getId(), parentOfRootCategory, Collections.<String, Object>emptyMap());
+ Map<String, ConfiguredObjectRecord> rootParents = Collections.<String, ConfiguredObjectRecord>singletonMap(parentOfRootCategory, parentRecord);
+ records.remove(rootRecord);
+ records.add(new ConfiguredObjectRecordImpl(rootRecord.getId(), _rootCategory, rootRecord.getAttributes(), rootParents));
+ }
+
+ resolveObjects(_parentOfRoot, records);
+ }
+ }
+
+ private void resolveObjects(ConfiguredObject<?> parentObject, List<ConfiguredObjectRecord> records)
+ {
+ ConfiguredObjectFactory factory = parentObject.getObjectFactory();
+ Map<UUID, ConfiguredObject<?>> resolvedObjects = new HashMap<UUID, ConfiguredObject<?>>();
+ resolvedObjects.put(parentObject.getId(), parentObject);
+
+ Collection<ConfiguredObjectRecord> recordsWithUnresolvedParents = new ArrayList<ConfiguredObjectRecord>(records);
+ Collection<UnresolvedConfiguredObject<? extends ConfiguredObject>> recordsWithUnresolvedDependencies =
+ new ArrayList<UnresolvedConfiguredObject<? extends ConfiguredObject>>();
+
+ boolean updatesMade;
+
+ do
+ {
+ updatesMade = false;
+ Iterator<ConfiguredObjectRecord> iter = recordsWithUnresolvedParents.iterator();
+ while (iter.hasNext())
+ {
+ ConfiguredObjectRecord record = iter.next();
+ Collection<ConfiguredObject<?>> parents = new ArrayList<ConfiguredObject<?>>();
+ boolean foundParents = true;
+ for (ConfiguredObjectRecord parent : record.getParents().values())
+ {
+ if (!resolvedObjects.containsKey(parent.getId()))
+ {
+ foundParents = false;
+ break;
+ }
+ else
+ {
+ parents.add(resolvedObjects.get(parent.getId()));
+ }
+ }
+ if (foundParents)
+ {
+ iter.remove();
+ ConfiguredObject<?>[] parentArray = parents.toArray(new ConfiguredObject<?>[parents.size()]);
+ UnresolvedConfiguredObject<? extends ConfiguredObject> recovered = factory.recover(record, parentArray);
+ Collection<ConfiguredObjectDependency<?>> dependencies = recovered.getUnresolvedDependencies();
+ if (dependencies.isEmpty())
+ {
+ updatesMade = true;
+ ConfiguredObject<?> resolved = recovered.resolve();
+ resolvedObjects.put(resolved.getId(), resolved);
+ }
+ else
+ {
+ recordsWithUnresolvedDependencies.add(recovered);
+ }
+ }
+
+ }
+
+ Iterator<UnresolvedConfiguredObject<? extends ConfiguredObject>> unresolvedIter = recordsWithUnresolvedDependencies.iterator();
+
+ while(unresolvedIter.hasNext())
+ {
+ UnresolvedConfiguredObject<? extends ConfiguredObject> unresolvedObject = unresolvedIter.next();
+ Collection<ConfiguredObjectDependency<?>> dependencies =
+ new ArrayList<ConfiguredObjectDependency<?>>(unresolvedObject.getUnresolvedDependencies());
+
+ for(ConfiguredObjectDependency dependency : dependencies)
+ {
+ if(dependency instanceof ConfiguredObjectIdDependency)
+ {
+ UUID id = ((ConfiguredObjectIdDependency)dependency).getId();
+ if(resolvedObjects.containsKey(id))
+ {
+ dependency.resolve(resolvedObjects.get(id));
+ }
+ }
+ else if(dependency instanceof ConfiguredObjectNameDependency)
+ {
+ ConfiguredObject<?> dependentObject = null;
+ for(ConfiguredObject<?> parent : unresolvedObject.getParents())
+ {
+ dependentObject = parent.findConfiguredObject(dependency.getCategoryClass(), ((ConfiguredObjectNameDependency)dependency).getName());
+ if(dependentObject != null)
+ {
+ break;
+ }
+ }
+ if(dependentObject != null)
+ {
+ dependency.resolve(dependentObject);
+ }
+ }
+ else
+ {
+ throw new ServerScopedRuntimeException("Unknown dependency type " + dependency.getClass().getSimpleName());
+ }
+ }
+ if(unresolvedObject.getUnresolvedDependencies().isEmpty())
+ {
+ updatesMade = true;
+ unresolvedIter.remove();
+ ConfiguredObject<?> resolved = unresolvedObject.resolve();
+ resolvedObjects.put(resolved.getId(), resolved);
+ }
+ }
+
+ } while(updatesMade && !(recordsWithUnresolvedDependencies.isEmpty() && recordsWithUnresolvedParents.isEmpty()));
+
+ if(!recordsWithUnresolvedDependencies.isEmpty())
+ {
+ throw new IllegalArgumentException("Cannot resolve some objects: " + recordsWithUnresolvedDependencies);
+ }
+ if(!recordsWithUnresolvedParents.isEmpty())
+ {
+ throw new IllegalArgumentException("Cannot resolve object because their parents cannot be found" + recordsWithUnresolvedParents);
+ }
+ }
+
+}
\ No newline at end of file
Added: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/GenericStoreUpgrader.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/GenericStoreUpgrader.java?rev=1589112&view=auto
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/GenericStoreUpgrader.java (added)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/GenericStoreUpgrader.java Tue Apr 22 12:32:23 2014
@@ -0,0 +1,170 @@
+/*
+ *
+ * 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.
+ *
+ */
+package org.apache.qpid.server.store;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+
+import org.apache.log4j.Logger;
+import org.apache.qpid.server.configuration.IllegalConfigurationException;
+import org.apache.qpid.server.model.BrokerModel;
+import org.apache.qpid.server.store.handler.ConfiguredObjectRecordHandler;
+
+public class GenericStoreUpgrader
+{
+ private static final Logger LOGGER = Logger.getLogger(GenericStoreUpgrader.class);
+
+ private final Map<UUID, ConfiguredObjectRecord> _records = new HashMap<UUID, ConfiguredObjectRecord>();
+ private final Map<String, StoreUpgraderPhase> _upgraders;
+ private final DurableConfigurationStore _store;
+ private final String _rootCategory;
+ private final String _modelVersionAttributeName;
+
+ public GenericStoreUpgrader(String rootCategory, String rootModelVersionAttributeName, DurableConfigurationStore configurationStore, Map<String, StoreUpgraderPhase> upgraders)
+ {
+ super();
+ _upgraders = upgraders;
+ _store = configurationStore;
+ _rootCategory = rootCategory;
+ _modelVersionAttributeName = rootModelVersionAttributeName;
+ }
+
+
+ public List<ConfiguredObjectRecord> getRecords()
+ {
+ return new ArrayList<ConfiguredObjectRecord>(_records.values());
+ }
+
+ public void upgrade()
+ {
+ ConfiguredObjectRecordHandler handler = new ConfiguredObjectRecordHandler()
+ {
+ @Override
+ public void begin()
+ {
+ }
+
+ @Override
+ public boolean handle(final ConfiguredObjectRecord record)
+ {
+ _records.put(record.getId(), record);
+ return true;
+ }
+
+ @Override
+ public void end()
+ {
+ performUpgrade();
+ }
+ };
+
+ _store.visitConfiguredObjectRecords(handler);
+ }
+
+ private void performUpgrade()
+ {
+ String version = getCurrentVersion();
+
+ if (LOGGER.isInfoEnabled())
+ {
+ LOGGER.info(_rootCategory + " store has model version " + version + ". Number of record(s) " + _records.size());
+ }
+
+ DurableConfigurationStoreUpgrader upgrader = buildUpgraderChain(version);
+
+ for(ConfiguredObjectRecord record : _records.values())
+ {
+ upgrader.configuredObject(record);
+ }
+
+ upgrader.complete();
+
+ Map<UUID, ConfiguredObjectRecord> deletedRecords = upgrader.getDeletedRecords();
+ Map<UUID, ConfiguredObjectRecord> updatedRecords = upgrader.getUpdatedRecords();
+
+ if (LOGGER.isDebugEnabled())
+ {
+ LOGGER.debug(_rootCategory + " store upgrade is about to complete. " + _records.size() + " total record(s)."
+ + " Records to update " + updatedRecords.size()
+ + " Records to delete " + deletedRecords.size());
+ }
+
+ _store.update(true, updatedRecords.values().toArray(new ConfiguredObjectRecord[updatedRecords.size()]));
+ _store.remove(deletedRecords.values().toArray(new ConfiguredObjectRecord[deletedRecords.size()]));
+
+ _records.keySet().removeAll(deletedRecords.keySet());
+ _records.putAll(updatedRecords);
+ }
+
+ private DurableConfigurationStoreUpgrader buildUpgraderChain(String version)
+ {
+ DurableConfigurationStoreUpgrader head = null;
+ while(!BrokerModel.MODEL_VERSION.equals(version))
+ {
+ if (LOGGER.isDebugEnabled())
+ {
+ LOGGER.debug("Adding " + _rootCategory + " store upgrader from model version: " + version);
+ }
+
+ StoreUpgraderPhase upgrader = _upgraders.get(version);
+ if (upgrader == null)
+ {
+ throw new IllegalConfigurationException("No phase upgrader for version " + version);
+ }
+
+ if(head == null)
+ {
+ head = upgrader;
+ }
+ else
+ {
+ head.setNextUpgrader(upgrader);
+ }
+ version = upgrader.getToVersion();
+ }
+
+ if(head == null)
+ {
+ head = new NullUpgrader();
+ }
+ else
+ {
+ head.setNextUpgrader(new NullUpgrader());
+ }
+
+ return head;
+ }
+
+ private String getCurrentVersion()
+ {
+ for(ConfiguredObjectRecord record : _records.values())
+ {
+ if(_rootCategory.equals(record.getType()))
+ {
+ return (String) record.getAttributes().get(_modelVersionAttributeName);
+ }
+ }
+ return BrokerModel.MODEL_VERSION;
+ }
+}
\ No newline at end of file
Copied: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/StoreUpgraderPhase.java (from r1588966, qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/startup/StoreUpgraderPhase.java)
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/StoreUpgraderPhase.java?p2=qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/StoreUpgraderPhase.java&p1=qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/startup/StoreUpgraderPhase.java&r1=1588966&r2=1589112&rev=1589112&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/startup/StoreUpgraderPhase.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/StoreUpgraderPhase.java Tue Apr 22 12:32:23 2014
@@ -18,23 +18,21 @@
* under the License.
*
*/
-package org.apache.qpid.server.configuration.startup;
+package org.apache.qpid.server.store;
import java.util.HashMap;
import java.util.Map;
-import org.apache.qpid.server.store.ConfiguredObjectRecord;
-import org.apache.qpid.server.store.ConfiguredObjectRecordImpl;
-import org.apache.qpid.server.store.NonNullUpgrader;
-
public abstract class StoreUpgraderPhase extends NonNullUpgrader
{
+ private final String _fromVersion;
private final String _toVersion;
private final String _versionAttributeName;
- protected StoreUpgraderPhase(String versionAttributeName, String toVersion)
+ public StoreUpgraderPhase(String versionAttributeName, String fromVersion, String toVersion)
{
_toVersion = toVersion;
+ _fromVersion = fromVersion;
_versionAttributeName = versionAttributeName;
}
@@ -46,4 +44,15 @@ public abstract class StoreUpgraderPhase
getUpdateMap().put(record.getId(), record);
return record;
}
+
+ public String getFromVersion()
+ {
+ return _fromVersion;
+ }
+
+ public String getToVersion()
+ {
+ return _toVersion;
+ }
+
}
\ 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