summaryrefslogtreecommitdiff
path: root/qpid/java/broker-core/src
diff options
context:
space:
mode:
authorKeith Wall <kwall@apache.org>2014-03-14 16:39:47 +0000
committerKeith Wall <kwall@apache.org>2014-03-14 16:39:47 +0000
commitec486999608568e37a55dc9c81d9be133d95ebc3 (patch)
tree87d6446e97cfdca321b1faff6f24a3010df4cdff /qpid/java/broker-core/src
parentdb26915f9b2edfa410c094162bec78b9d2010b24 (diff)
downloadqpid-python-ec486999608568e37a55dc9c81d9be133d95ebc3.tar.gz
QPID-5624: Introduce messageStoreSettings VH attribute and move all message store related attributes into messageStoreSettings map
git-svn-id: https://svn.apache.org/repos/asf/qpid/branches/java-broker-bdb-ha2@1577606 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/java/broker-core/src')
-rw-r--r--qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/startup/StoreUpgrader.java106
-rw-r--r--qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/store/MemoryConfigurationEntryStore.java5
-rw-r--r--qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Model.java5
-rw-r--r--qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHost.java32
-rw-r--r--qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAdapter.java47
-rw-r--r--qpid/java/broker-core/src/main/java/org/apache/qpid/server/plugin/JDBCConnectionProviderFactory.java3
-rw-r--r--qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/MessageStore.java5
-rw-r--r--qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/MessageStoreConstants.java31
-rw-r--r--qpid/java/broker-core/src/main/java/org/apache/qpid/server/util/MapValueConverter.java78
-rw-r--r--qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/StandardVirtualHost.java11
-rw-r--r--qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/StandardVirtualHostFactory.java18
-rw-r--r--qpid/java/broker-core/src/main/resources/initial-config.json8
-rw-r--r--qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/startup/StoreUpgraderTest.java217
-rw-r--r--qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/startup/VirtualHostRecovererTest.java17
-rw-r--r--qpid/java/broker-core/src/test/java/org/apache/qpid/server/model/VirtualHostTest.java5
-rw-r--r--qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/AbstractDurableConfigurationStoreTestCase.java5
-rw-r--r--qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/MessageStoreQuotaEventsTestBase.java18
-rw-r--r--qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/StateManagerTest.java13
-rw-r--r--qpid/java/broker-core/src/test/java/org/apache/qpid/server/util/BrokerTestHelper.java7
-rw-r--r--qpid/java/broker-core/src/test/java/org/apache/qpid/server/virtualhost/StandardVirtualHostTest.java10
20 files changed, 501 insertions, 140 deletions
diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/startup/StoreUpgrader.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/startup/StoreUpgrader.java
index 124584e99c..16da78c988 100644
--- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/startup/StoreUpgrader.java
+++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/startup/StoreUpgrader.java
@@ -19,10 +19,12 @@ package org.apache.qpid.server.configuration.startup;/*
*
*/
+import java.util.ArrayList;
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;
@@ -134,6 +136,110 @@ public abstract class StoreUpgrader
}
};
+ final static StoreUpgrader UPGRADE_1_3 = new StoreUpgrader("1.3")
+ {
+ private final String[] HA_ATTRIBUTES = {"haNodeName", "haGroupName", "haHelperAddress", "haCoalescingSync", "haNodeAddress","haDurability","haDesignatedPrimary","haReplicationConfig","bdbEnvironmentConfig"};
+ private final String[] JDBC_ATTRIBUTES = {"connectionURL", "connectionPool", "jdbcBigIntType", "jdbcBytesForBlob", "jdbcVarbinaryType", "jdbcBlobType", "partitionCount", "maxConnectionsPerPartition", "minConnectionsPerPartition"};
+ private final String[] STORE_TYPES = {"BDB", "BDB-HA", "JDBC", "Memory", "DERBY"};
+
+ @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 ArrayList<ConfigurationEntry>();
+ for(ConfigurationEntry vhost : vhosts)
+ {
+ Map<String, Object> attributes = vhost.getAttributes();
+ Map<String, Object> newAttributes = new HashMap<String, Object>(attributes);
+ Map<String, Object> messageStoreSettings = new HashMap<String, Object>();
+ String storeType = (String) attributes.get("storeType");
+ String realStoreType = storeType;
+ for (String type : STORE_TYPES)
+ {
+ if (type.equalsIgnoreCase(storeType))
+ {
+ realStoreType = type;
+ break;
+ }
+ }
+ if(attributes.containsKey("storeType"))
+ {
+ newAttributes.remove("storeType");
+ messageStoreSettings.put("storeType", realStoreType);
+ }
+ if (attributes.containsKey("storePath"))
+ {
+ messageStoreSettings.put("storePath", newAttributes.remove("storePath"));
+ }
+ if (attributes.containsKey("storeUnderfullSize"))
+ {
+ messageStoreSettings.put("storeUnderfullSize", newAttributes.remove("storeUnderfullSize"));
+ }
+ if (attributes.containsKey("storeOverfullSize"))
+ {
+ messageStoreSettings.put("storeOverfullSize", newAttributes.remove("storeOverfullSize"));
+ }
+
+ if ("BDB_HA".equals(attributes.get("type")))
+ {
+ for (String haAttribute : HA_ATTRIBUTES)
+ {
+ if(attributes.containsKey(haAttribute))
+ {
+ messageStoreSettings.put(haAttribute, newAttributes.remove(haAttribute));
+ }
+ }
+ messageStoreSettings.remove("storeType");
+ }
+ else
+ {
+
+ if ("JDBC".equalsIgnoreCase(realStoreType))
+ {
+ boolean removeAttribute = !"JDBC".equals(attributes.get("configStoreType"));
+ for (String jdbcAttribute : JDBC_ATTRIBUTES)
+ {
+ if(attributes.containsKey(jdbcAttribute))
+ {
+ Object value = null;
+ if (removeAttribute)
+ {
+ value = newAttributes.remove(jdbcAttribute);
+ }
+ else
+ {
+ value = newAttributes.get(jdbcAttribute);
+ }
+ messageStoreSettings.put(jdbcAttribute, value);
+ }
+ }
+ }
+ else if ("BDB".equals(realStoreType))
+ {
+ if(attributes.containsKey("bdbEnvironmentConfig"))
+ {
+ messageStoreSettings.put("bdbEnvironmentConfig", newAttributes.remove("bdbEnvironmentConfig"));
+ }
+ }
+ }
+
+ if (!messageStoreSettings.isEmpty())
+ {
+ newAttributes.put("messageStoreSettings", messageStoreSettings);
+ changed.add(new ConfigurationEntry(vhost.getId(),vhost.getType(), newAttributes, vhost.getChildrenIds(), store));
+ }
+ }
+ Map<String, Object> attributes = new HashMap<String, Object>(root.getAttributes());
+ attributes.put(Broker.MODEL_VERSION, "1.4");
+ 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);
diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/store/MemoryConfigurationEntryStore.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/store/MemoryConfigurationEntryStore.java
index 010d74eb7f..7b03946680 100644
--- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/store/MemoryConfigurationEntryStore.java
+++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/store/MemoryConfigurationEntryStore.java
@@ -60,6 +60,7 @@ import org.codehaus.jackson.node.ArrayNode;
public class MemoryConfigurationEntryStore implements ConfigurationEntryStore
{
+
public static final String STORE_TYPE = "memory";
private static final String DEFAULT_BROKER_NAME = "Broker";
@@ -545,6 +546,10 @@ public class MemoryConfigurationEntryStore implements ConfigurationEntryStore
}
else if (fieldNode.isObject())
{
+ if (attributes == null)
+ {
+ attributes = new HashMap<String, Object>();
+ }
attributes.put(fieldName, toObject(fieldNode) );
}
else
diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Model.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Model.java
index f940b323be..c48c7bb7f6 100644
--- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Model.java
+++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Model.java
@@ -34,10 +34,11 @@ public class Model
*
* 1.0 Initial version
* 1.1 Addition of mandatory virtual host type / different types of virtual host
- *
+ * 1.3 Truststore/Keystore type => trustStoreType / type => keyStoreType
+ * 1.4 Separate messageStoreSettings from virtualhost
*/
public static final int MODEL_MAJOR_VERSION = 1;
- public static final int MODEL_MINOR_VERSION = 3;
+ public static final int MODEL_MINOR_VERSION = 4;
public static final String MODEL_VERSION = MODEL_MAJOR_VERSION + "." + MODEL_MINOR_VERSION;
private static final Model MODEL_INSTANCE = new Model();
diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHost.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHost.java
index 827c01f70f..46aa8dcc8e 100644
--- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHost.java
+++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHost.java
@@ -20,15 +20,15 @@
*/
package org.apache.qpid.server.model;
+import java.security.AccessControlException;
+import java.util.Collection;
+import java.util.Map;
+
import org.apache.qpid.server.configuration.updater.TaskExecutor;
import org.apache.qpid.server.message.MessageInstance;
import org.apache.qpid.server.security.SecurityManager;
import org.apache.qpid.server.store.MessageStore;
-import java.security.AccessControlException;
-import java.util.Collection;
-import java.util.Map;
-
@ManagedObject( managesChildren = true )
public interface VirtualHost<X extends VirtualHost<X>> extends ConfiguredObject<X>
{
@@ -48,17 +48,19 @@ public interface VirtualHost<X extends VirtualHost<X>> extends ConfiguredObject<
String STORE_TRANSACTION_IDLE_TIMEOUT_WARN = "storeTransactionIdleTimeoutWarn";
String STORE_TRANSACTION_OPEN_TIMEOUT_CLOSE = "storeTransactionOpenTimeoutClose";
String STORE_TRANSACTION_OPEN_TIMEOUT_WARN = "storeTransactionOpenTimeoutWarn";
- String STORE_TYPE = "storeType";
- String STORE_PATH = "storePath";
- String CONFIG_STORE_TYPE = "configStoreType";
- String CONFIG_STORE_PATH = "configStorePath";
String SUPPORTED_EXCHANGE_TYPES = "supportedExchangeTypes";
String SUPPORTED_QUEUE_TYPES = "supportedQueueTypes";
String DURABLE = "durable";
String LIFETIME_POLICY = "lifetimePolicy";
String SECURITY_ACL = "securityAcl";
String HOUSE_KEEPING_THREAD_COUNT = "houseKeepingThreadCount";
+ String CONFIGURATION_STORE_SETTINGS = "configurationStoreSettings";
+ String MESSAGE_STORE_SETTINGS = "messageStoreSettings";
+ @Deprecated
+ String CONFIG_STORE_TYPE = "configStoreType";
+ @Deprecated
+ String CONFIG_STORE_PATH = "configStorePath";
// Attributes
int CURRENT_CONFIG_VERSION = 4;
@@ -85,18 +87,14 @@ public interface VirtualHost<X extends VirtualHost<X>> extends ConfiguredObject<
long getQueue_flowResumeSizeBytes();
@ManagedAttribute
+ @Deprecated
String getConfigStoreType();
@ManagedAttribute
+ @Deprecated
String getConfigStorePath();
@ManagedAttribute
- String getStoreType();
-
- @ManagedAttribute
- String getStorePath();
-
- @ManagedAttribute
long getStoreTransactionIdleTimeoutClose();
@ManagedAttribute
@@ -129,6 +127,12 @@ public interface VirtualHost<X extends VirtualHost<X>> extends ConfiguredObject<
@ManagedAttribute
int getHouseKeepingThreadCount();
+ @ManagedAttribute
+ Map<String, Object> getMessageStoreSettings();
+
+ @ManagedAttribute
+ Map<String, Object> getConfigurationStoreSettings();
+
@ManagedStatistic
long getQueueCount();
diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAdapter.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAdapter.java
index 82051c3a41..0060703792 100644
--- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAdapter.java
+++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAdapter.java
@@ -49,6 +49,7 @@ import org.apache.qpid.server.store.MessageStore;
import org.apache.qpid.server.txn.LocalTransaction;
import org.apache.qpid.server.txn.ServerTransaction;
import org.apache.qpid.server.util.MapValueConverter;
+import org.apache.qpid.server.util.ParameterizedTypeImpl;
import org.apache.qpid.server.plugin.VirtualHostFactory;
import org.apache.qpid.server.util.ServerScopedRuntimeException;
import org.apache.qpid.server.virtualhost.ExchangeExistsException;
@@ -66,8 +67,6 @@ public final class VirtualHostAdapter extends AbstractConfiguredObject<VirtualHo
public static final Map<String, Type> ATTRIBUTE_TYPES = Collections.unmodifiableMap(new HashMap<String, Type>(){{
put(NAME, String.class);
put(TYPE, String.class);
- put(STORE_PATH, String.class);
- put(STORE_TYPE, String.class);
put(STATE, State.class);
put(QUEUE_ALERT_REPEAT_GAP, Long.class);
@@ -86,6 +85,9 @@ public final class VirtualHostAdapter extends AbstractConfiguredObject<VirtualHo
put(STORE_TRANSACTION_OPEN_TIMEOUT_CLOSE, Long.class);
put(STORE_TRANSACTION_OPEN_TIMEOUT_WARN, Long.class);
+ put(MESSAGE_STORE_SETTINGS, new ParameterizedTypeImpl(Map.class, String.class, Object.class));
+ put(CONFIGURATION_STORE_SETTINGS, new ParameterizedTypeImpl(Map.class, String.class, Object.class));
+
put(CONFIG_STORE_TYPE, String.class);
put(CONFIG_STORE_PATH, String.class);
@@ -126,20 +128,14 @@ public final class VirtualHostAdapter extends AbstractConfiguredObject<VirtualHo
{
throw new IllegalConfigurationException("Virtual host type must be specified");
}
- }
-
- private void validateAttributes(String type)
- {
final VirtualHostFactory factory = VirtualHostFactory.FACTORIES.get(type);
if(factory == null)
{
throw new IllegalArgumentException("Unknown virtual host type '"+ type +"'. Valid types are: " + VirtualHostFactory.TYPES.get());
}
factory.validateAttributes(getActualAttributes());
-
}
-
public Collection<VirtualHostAlias> getAliases()
{
return Collections.unmodifiableCollection(_aliases);
@@ -737,14 +733,6 @@ public final class VirtualHostAdapter extends AbstractConfiguredObject<VirtualHo
{
// TODO
}
- else if(STORE_TYPE.equals(name))
- {
- return _virtualHost.getMessageStore().getStoreType();
- }
- else if(STORE_PATH.equals(name))
- {
- return _virtualHost.getMessageStore().getStoreLocation();
- }
}
return super.getAttribute(name);
}
@@ -832,18 +820,6 @@ public final class VirtualHostAdapter extends AbstractConfiguredObject<VirtualHo
}
@Override
- public String getStoreType()
- {
- return _virtualHost.getMessageStore().getStoreType();
- }
-
- @Override
- public String getStorePath()
- {
- return _virtualHost.getMessageStore().getStoreLocation();
- }
-
- @Override
public long getStoreTransactionIdleTimeoutClose()
{
return (Long)getAttribute(VirtualHost.STORE_TRANSACTION_IDLE_TIMEOUT_CLOSE);
@@ -897,6 +873,20 @@ public final class VirtualHostAdapter extends AbstractConfiguredObject<VirtualHo
return (Long)getAttribute(VirtualHost.QUEUE_ALERT_THRESHOLD_QUEUE_DEPTH_MESSAGES);
}
+ @SuppressWarnings("unchecked")
+ @Override
+ public Map<String, Object> getMessageStoreSettings()
+ {
+ return (Map<String, Object>)getAttribute(VirtualHost.MESSAGE_STORE_SETTINGS);
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public Map<String, Object> getConfigurationStoreSettings()
+ {
+ return (Map<String, Object>)getAttribute(VirtualHost.CONFIGURATION_STORE_SETTINGS);
+ }
+
@Override
public long getQueueCount()
{
@@ -1118,4 +1108,5 @@ public final class VirtualHostAdapter extends AbstractConfiguredObject<VirtualHo
{
return super.getTaskExecutor();
}
+
}
diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/plugin/JDBCConnectionProviderFactory.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/plugin/JDBCConnectionProviderFactory.java
index 546f2fa05d..eb981bdd02 100644
--- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/plugin/JDBCConnectionProviderFactory.java
+++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/plugin/JDBCConnectionProviderFactory.java
@@ -25,6 +25,7 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
+
import org.apache.qpid.server.model.VirtualHost;
import org.apache.qpid.server.store.jdbc.ConnectionProvider;
@@ -32,7 +33,7 @@ public interface JDBCConnectionProviderFactory extends Pluggable
{
String getType();
- ConnectionProvider getConnectionProvider(String connectionUrl, VirtualHost virtualHost)
+ ConnectionProvider getConnectionProvider(String connectionUrl, VirtualHost virtualHost, boolean configStoreOnly)
throws SQLException;
static final class TYPES
diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/MessageStore.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/MessageStore.java
index 626b999d72..b3a6216c84 100644
--- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/MessageStore.java
+++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/MessageStore.java
@@ -28,6 +28,11 @@ import org.apache.qpid.server.model.VirtualHost;
*/
public interface MessageStore
{
+ String STORE_TYPE = "storeType";
+ String STORE_PATH = "storePath";
+ String UNDERFULL_SIZE = "storeUnderfullSize";
+ String OVERFULL_SIZE = "storeOverfullSize";
+
/**
* Called after instantiation in order to configure the message store. A particular implementation can define
* whatever parameters it wants.
diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/MessageStoreConstants.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/MessageStoreConstants.java
deleted file mode 100644
index 93b669e6e4..0000000000
--- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/MessageStoreConstants.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * 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;
-
-public class MessageStoreConstants
-{
-
- public static final String ENVIRONMENT_PATH_PROPERTY = "environment-path";
- public static final String OVERFULL_SIZE_PROPERTY = "overfull-size";
- public static final String UNDERFULL_SIZE_PROPERTY = "underfull-size";
- public static final String OVERFULL_SIZE_ATTRIBUTE = "storeOverfullSize";
- public static final String UNDERFULL_SIZE_ATTRIBUTE = "storeUnderfullSize";
-
-}
diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/util/MapValueConverter.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/util/MapValueConverter.java
index 3543ce3bcf..b759bd5dc4 100644
--- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/util/MapValueConverter.java
+++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/util/MapValueConverter.java
@@ -321,21 +321,7 @@ public class MapValueConverter
else if (typeObject instanceof ParameterizedType)
{
ParameterizedType parameterizedType= (ParameterizedType)typeObject;
- Type type = parameterizedType.getRawType();
- if (type == Set.class)
- {
- Type[] actualTypeArguments = parameterizedType.getActualTypeArguments();
- if (actualTypeArguments.length != 1)
- {
- throw new IllegalArgumentException("Set type argument is not specified");
- }
- Class<?> classObject = (Class<?>)actualTypeArguments[0];
- value = toSet(rawValue, classObject, attributeName);
- }
- else
- {
- throw new IllegalArgumentException("Conversion into " + parameterizedType + " is not yet supported");
- }
+ value = convertParameterizedType(rawValue, parameterizedType, attributeName);
}
else
{
@@ -352,6 +338,62 @@ public class MapValueConverter
return attributes;
}
+ private static Object convertParameterizedType(Object rawValue, ParameterizedType parameterizedType, String attributeName)
+ {
+ Type type = parameterizedType.getRawType();
+ Type[] actualTypeArguments = parameterizedType.getActualTypeArguments();
+ Object convertedValue;
+ if (type == Set.class)
+ {
+ if (actualTypeArguments.length != 1)
+ {
+ throw new IllegalArgumentException("Unexpected number of Set type arguments " + actualTypeArguments.length);
+ }
+ Class<?> classObject = (Class<?>)actualTypeArguments[0];
+ convertedValue = toSet(rawValue, classObject, attributeName);
+ }
+ else if (type == Map.class)
+ {
+ if (actualTypeArguments.length != 2)
+ {
+ throw new IllegalArgumentException("Unexpected number of Map type arguments " + actualTypeArguments.length);
+ }
+ Class<?> keyClassObject = (Class<?>)actualTypeArguments[0];
+ Class<?> valueClassObject = (Class<?>)actualTypeArguments[1];
+ convertedValue = toMap(rawValue, keyClassObject, valueClassObject, attributeName);
+ }
+ else
+ {
+ throw new IllegalArgumentException("Conversion into " + parameterizedType + " is not yet supported");
+ }
+ return convertedValue;
+ }
+
+ private static <K,V> Map<K, V> toMap(Object rawValue, Class<K> keyClassObject, Class<V> valueClassObject, String attributeName)
+ {
+ if (rawValue == null)
+ {
+ return null;
+ }
+ if (rawValue instanceof Map)
+ {
+ Map<K, V> convertedMap = new HashMap<K, V>();
+ Map<?, ?> rawMap = (Map<?,?>)rawValue;
+
+ for (Map.Entry<?, ?> entry : rawMap.entrySet())
+ {
+ K convertedKey = convert(entry.getKey(), keyClassObject, attributeName + " (map key)");
+ V convertedValue = convert(entry.getValue(), valueClassObject, attributeName + " (map value)");
+ convertedMap.put(convertedKey, convertedValue);
+ }
+ return convertedMap;
+ }
+ else
+ {
+ throw new IllegalArgumentException("rawValue is not of unexpected type Map, was : " + rawValue.getClass());
+ }
+ }
+
public static <T> Set<T> toSet(Object rawValue, Class<T> setItemClass, String attributeName)
{
if (rawValue == null)
@@ -361,7 +403,7 @@ public class MapValueConverter
HashSet<T> set = new HashSet<T>();
if (rawValue instanceof Iterable)
{
- Iterable<?> iterable = (Iterable<?>)rawValue;
+ Iterable<?> iterable = (Iterable<?>)rawValue;
for (Object object : iterable)
{
T converted = convert(object, setItemClass, attributeName);
@@ -409,6 +451,10 @@ public class MapValueConverter
{
value = toEnum(attributeName, rawValue, (Class<Enum>) classObject);
}
+ else if (classObject == Object.class)
+ {
+ value = rawValue;
+ }
else
{
throw new IllegalArgumentException("Cannot convert '" + rawValue + "' of type '" + rawValue.getClass()
diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/StandardVirtualHost.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/StandardVirtualHost.java
index da2ef47670..47c50115d3 100644
--- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/StandardVirtualHost.java
+++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/StandardVirtualHost.java
@@ -19,6 +19,8 @@ package org.apache.qpid.server.virtualhost;/*
*
*/
+import java.util.Map;
+
import org.apache.qpid.server.configuration.IllegalConfigurationException;
import org.apache.qpid.server.logging.subjects.MessageStoreLogSubject;
import org.apache.qpid.server.model.VirtualHost;
@@ -46,10 +48,9 @@ public class StandardVirtualHost extends AbstractVirtualHost
- private MessageStore initialiseMessageStore(VirtualHost virtualHost)
+ private MessageStore initialiseMessageStore(String storeType)
{
- final String storeTypeAttr = (String) virtualHost.getAttribute(VirtualHost.STORE_TYPE);
- MessageStore messageStore = MessageStoreFactory.FACTORY_LOADER.get(storeTypeAttr).createMessageStore();
+ MessageStore messageStore = MessageStoreFactory.FACTORY_LOADER.get(storeType).createMessageStore();
MessageStoreLogSubject
storeLogSubject = new MessageStoreLogSubject(getName(), messageStore.getClass().getSimpleName());
@@ -83,7 +84,9 @@ public class StandardVirtualHost extends AbstractVirtualHost
protected void initialiseStorage(VirtualHost virtualHost)
{
- _messageStore = initialiseMessageStore(virtualHost);
+ Map<String, Object> messageStoreSettings = virtualHost.getMessageStoreSettings();
+ String storeType = (String) messageStoreSettings.get(MessageStore.STORE_TYPE);
+ _messageStore = initialiseMessageStore(storeType);
_durableConfigurationStore = initialiseConfigurationStore(virtualHost);
diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/StandardVirtualHostFactory.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/StandardVirtualHostFactory.java
index 9cab87e3b4..7cc8eaa20c 100644
--- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/StandardVirtualHostFactory.java
+++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/StandardVirtualHostFactory.java
@@ -25,6 +25,7 @@ import java.util.Map;
import org.apache.qpid.server.plugin.MessageStoreFactory;
import org.apache.qpid.server.plugin.VirtualHostFactory;
import org.apache.qpid.server.stats.StatisticsGatherer;
+import org.apache.qpid.server.store.MessageStore;
public class StandardVirtualHostFactory implements VirtualHostFactory
{
@@ -50,19 +51,26 @@ public class StandardVirtualHostFactory implements VirtualHostFactory
@Override
public void validateAttributes(Map<String, Object> attributes)
{
+ @SuppressWarnings("unchecked")
+ Map<String, Object> messageStoreSettings = (Map<String, Object>)attributes.get(org.apache.qpid.server.model.VirtualHost.MESSAGE_STORE_SETTINGS);
+ if (messageStoreSettings == null)
+ {
+ throw new IllegalArgumentException("Attribute '"+ org.apache.qpid.server.model.VirtualHost.MESSAGE_STORE_SETTINGS + "' is required.");
+ }
+
+ Object storeType = messageStoreSettings.get(MessageStore.STORE_TYPE);
// need store type and path
Collection<String> knownTypes = MessageStoreFactory.FACTORY_LOADER.getSupportedTypes();
- Object storeType = attributes.get(org.apache.qpid.server.model.VirtualHost.STORE_TYPE);
if (storeType == null)
{
- throw new IllegalArgumentException("Attribute '"+ org.apache.qpid.server.model.VirtualHost.STORE_TYPE
- +"' is required. Known types are : " + knownTypes);
+ throw new IllegalArgumentException("Setting '"+ MessageStore.STORE_TYPE
+ +"' is required in attribute " + org.apache.qpid.server.model.VirtualHost.MESSAGE_STORE_SETTINGS + ". Known types are : " + knownTypes);
}
else if (!(storeType instanceof String))
{
- throw new IllegalArgumentException("Attribute '"+ org.apache.qpid.server.model.VirtualHost.STORE_TYPE
+ throw new IllegalArgumentException("Setting '"+ MessageStore.STORE_TYPE
+"' is required and must be of type String. "
+"Known types are : " + knownTypes);
}
@@ -70,7 +78,7 @@ public class StandardVirtualHostFactory implements VirtualHostFactory
MessageStoreFactory factory = MessageStoreFactory.FACTORY_LOADER.get((String)storeType);
if(factory == null)
{
- throw new IllegalArgumentException("Attribute '"+ org.apache.qpid.server.model.VirtualHost.STORE_TYPE
+ throw new IllegalArgumentException("Setting '"+ MessageStore.STORE_TYPE
+"' has value '" + storeType + "' which is not one of the valid values: "
+ "Known types are : " + knownTypes);
}
diff --git a/qpid/java/broker-core/src/main/resources/initial-config.json b/qpid/java/broker-core/src/main/resources/initial-config.json
index 7173433aa8..efc98f6ac8 100644
--- a/qpid/java/broker-core/src/main/resources/initial-config.json
+++ b/qpid/java/broker-core/src/main/resources/initial-config.json
@@ -21,7 +21,7 @@
{
"name": "Broker",
"storeVersion": 1,
- "modelVersion": "1.2",
+ "modelVersion": "1.4",
"defaultVirtualHost" : "default",
"authenticationproviders" : [ {
"name" : "passwordFile",
@@ -55,8 +55,10 @@
"virtualhosts" : [ {
"name" : "default",
"type" : "STANDARD",
- "storeType" : "DERBY",
- "storePath" : "${qpid.work_dir}/derbystore/default"
+ "messageStoreSettings" : {
+ "storeType" : "DERBY",
+ "storePath" : "${qpid.work_dir}/derbystore/default"
+ }
} ],
"plugins" : [ {
"pluginType" : "MANAGEMENT-HTTP",
diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/startup/StoreUpgraderTest.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/startup/StoreUpgraderTest.java
new file mode 100644
index 0000000000..1f435b502f
--- /dev/null
+++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/startup/StoreUpgraderTest.java
@@ -0,0 +1,217 @@
+/*
+ *
+ * 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.configuration.startup;
+
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.UUID;
+
+import junit.framework.TestCase;
+
+import org.apache.qpid.server.configuration.ConfigurationEntry;
+import org.apache.qpid.server.configuration.ConfigurationEntryStore;
+import org.apache.qpid.server.model.Broker;
+import org.apache.qpid.server.model.VirtualHost;
+
+public class StoreUpgraderTest extends TestCase
+{
+
+ private final UUID _brokerId = UUID.randomUUID();
+ private final UUID _virtualHostId = UUID.randomUUID();
+ private ConfigurationEntryStore _store = mock(ConfigurationEntryStore.class);
+
+ public void testUpgrade13To14_Derby() throws Exception
+ {
+ HashMap<String, Object> virtualHostAttributes = new HashMap<String, Object>();
+ virtualHostAttributes.put("name", "test");
+ virtualHostAttributes.put("type", "STANDARD");
+ virtualHostAttributes.put("storeType", "DERBy");
+ virtualHostAttributes.put("storePath", "/mystorepath");
+ virtualHostAttributes.put("storeUnderfullSize", 1000);
+ virtualHostAttributes.put("storeOverfullSize", 2000);
+
+ doTest(_store, virtualHostAttributes);
+
+ ConfigurationEntry expectNewRoot = new ConfigurationEntry(_brokerId, Broker.class.getSimpleName(), Collections.<String, Object>singletonMap(Broker.MODEL_VERSION, "1.4"), Collections.singleton(_virtualHostId), _store);
+ ConfigurationEntry expectedNewVirtualHost;
+ {
+ Map<String, Object> expectedNewVirtualHostMessageSettings = new HashMap<String, Object>();
+ expectedNewVirtualHostMessageSettings.put("storeType", "DERBY");
+ expectedNewVirtualHostMessageSettings.put("storePath", "/mystorepath");
+ expectedNewVirtualHostMessageSettings.put("storeUnderfullSize", 1000);
+ expectedNewVirtualHostMessageSettings.put("storeOverfullSize", 2000);
+
+ Map<String, Object> expectedNewVirtualHostAttributes = new HashMap<String, Object>();
+ expectedNewVirtualHostAttributes.put(VirtualHost.NAME, "test");
+ expectedNewVirtualHostAttributes.put(VirtualHost.TYPE, "STANDARD");
+ expectedNewVirtualHostAttributes.put(VirtualHost.MESSAGE_STORE_SETTINGS, expectedNewVirtualHostMessageSettings);
+
+ expectedNewVirtualHost = new ConfigurationEntry(_virtualHostId, VirtualHost.class.getSimpleName(), expectedNewVirtualHostAttributes, Collections.<UUID>emptySet(), _store);
+ }
+ verify(_store).save(expectedNewVirtualHost, expectNewRoot);
+ }
+
+ public void testUpgrade13To14_BdbHa() throws Exception
+ {
+ HashMap<String, Object> virtualHostAttributes = new HashMap<String, Object>();
+ virtualHostAttributes.put("name", "test");
+ virtualHostAttributes.put("type", "BDB_HA");
+ virtualHostAttributes.put("storeType", "BdB-HA");
+ virtualHostAttributes.put("storePath", "/mystorepath");
+ virtualHostAttributes.put("storeUnderfullSize", 1000);
+ virtualHostAttributes.put("storeOverfullSize", 2000);
+ virtualHostAttributes.put("haNodeName", "node1");
+ virtualHostAttributes.put("haGroupName", "group1");
+ virtualHostAttributes.put("haHelperAddress", "helper:1000");
+ virtualHostAttributes.put("haCoalescingSync", true);
+ virtualHostAttributes.put("haNodeAddress", "nodeaddr:1000");
+ virtualHostAttributes.put("haDurability", "sync,sync,all");
+ virtualHostAttributes.put("haDesignatedPrimary", true);
+ virtualHostAttributes.put("haReplicationConfig", Collections.singletonMap("hasettings", "havalue"));
+ virtualHostAttributes.put("bdbEnvironmentConfig", Collections.singletonMap("envsettings", "envvalue"));
+
+ doTest(_store, virtualHostAttributes);
+
+ ConfigurationEntry expectNewRoot = new ConfigurationEntry(_brokerId, Broker.class.getSimpleName(), Collections.<String, Object>singletonMap(Broker.MODEL_VERSION, "1.4"), Collections.singleton(_virtualHostId), _store);
+ ConfigurationEntry expectedNewVirtualHost;
+ {
+ Map<String, Object> expectedNewVirtualHostMessageSettings = new HashMap<String, Object>();
+ expectedNewVirtualHostMessageSettings.put("storePath", "/mystorepath");
+ expectedNewVirtualHostMessageSettings.put("storeUnderfullSize", 1000);
+ expectedNewVirtualHostMessageSettings.put("storeOverfullSize", 2000);
+ expectedNewVirtualHostMessageSettings.put("haNodeName", "node1");
+ expectedNewVirtualHostMessageSettings.put("haGroupName", "group1");
+ expectedNewVirtualHostMessageSettings.put("haHelperAddress", "helper:1000");
+ expectedNewVirtualHostMessageSettings.put("haCoalescingSync", true);
+ expectedNewVirtualHostMessageSettings.put("haNodeAddress", "nodeaddr:1000");
+ expectedNewVirtualHostMessageSettings.put("haDurability", "sync,sync,all");
+ expectedNewVirtualHostMessageSettings.put("haDesignatedPrimary", true);
+ expectedNewVirtualHostMessageSettings.put("haReplicationConfig", Collections.singletonMap("hasettings", "havalue"));
+ expectedNewVirtualHostMessageSettings.put("bdbEnvironmentConfig", Collections.singletonMap("envsettings", "envvalue"));
+
+ Map<String, Object> expectedNewVirtualHostAttributes = new HashMap<String, Object>();
+ expectedNewVirtualHostAttributes.put(VirtualHost.NAME, "test");
+ expectedNewVirtualHostAttributes.put(VirtualHost.TYPE, "BDB_HA");
+ expectedNewVirtualHostAttributes.put(VirtualHost.MESSAGE_STORE_SETTINGS, expectedNewVirtualHostMessageSettings);
+
+ expectedNewVirtualHost = new ConfigurationEntry(_virtualHostId, VirtualHost.class.getSimpleName(), expectedNewVirtualHostAttributes, Collections.<UUID>emptySet(), _store);
+ }
+ verify(_store).save(expectedNewVirtualHost, expectNewRoot);
+ }
+
+ public void testUpgrade13To14_Bdb() throws Exception
+ {
+ HashMap<String, Object> virtualHostAttributes = new HashMap<String, Object>();
+ virtualHostAttributes.put("name", "test");
+ virtualHostAttributes.put("type", "STANDARD");
+ virtualHostAttributes.put("storeType", "BdB");
+ virtualHostAttributes.put("storePath", "/mystorepath");
+ virtualHostAttributes.put("storeUnderfullSize", 1000);
+ virtualHostAttributes.put("storeOverfullSize", 2000);
+ virtualHostAttributes.put("bdbEnvironmentConfig", Collections.singletonMap("envsettings", "envvalue"));
+
+ doTest(_store, virtualHostAttributes);
+
+ ConfigurationEntry expectNewRoot = new ConfigurationEntry(_brokerId, Broker.class.getSimpleName(), Collections.<String, Object>singletonMap(Broker.MODEL_VERSION, "1.4"), Collections.singleton(_virtualHostId), _store);
+ ConfigurationEntry expectedNewVirtualHost;
+ {
+ Map<String, Object> expectedNewVirtualHostMessageSettings = new HashMap<String, Object>();
+ expectedNewVirtualHostMessageSettings.put("storeType", "BDB");
+ expectedNewVirtualHostMessageSettings.put("storePath", "/mystorepath");
+ expectedNewVirtualHostMessageSettings.put("storeUnderfullSize", 1000);
+ expectedNewVirtualHostMessageSettings.put("storeOverfullSize", 2000);
+ expectedNewVirtualHostMessageSettings.put("bdbEnvironmentConfig", Collections.singletonMap("envsettings", "envvalue"));
+
+ Map<String, Object> expectedNewVirtualHostAttributes = new HashMap<String, Object>();
+ expectedNewVirtualHostAttributes.put(VirtualHost.NAME, "test");
+ expectedNewVirtualHostAttributes.put(VirtualHost.TYPE, "STANDARD");
+ expectedNewVirtualHostAttributes.put(VirtualHost.MESSAGE_STORE_SETTINGS, expectedNewVirtualHostMessageSettings);
+
+ expectedNewVirtualHost = new ConfigurationEntry(_virtualHostId, VirtualHost.class.getSimpleName(), expectedNewVirtualHostAttributes, Collections.<UUID>emptySet(), _store);
+ }
+ verify(_store).save(expectedNewVirtualHost, expectNewRoot);
+ }
+
+ public void testUpgrade13To14_JDBC() throws Exception
+ {
+ HashMap<String, Object> virtualHostAttributes = new HashMap<String, Object>();
+ virtualHostAttributes.put("name", "test");
+ virtualHostAttributes.put("type", "STANDARD");
+ virtualHostAttributes.put("storeType", "JdBC");
+ virtualHostAttributes.put("connectionURL", "jdbc:test");
+ virtualHostAttributes.put("connectionPool", "BONECP");
+ virtualHostAttributes.put("jdbcBigIntType", "NUMBER");
+ virtualHostAttributes.put("jdbcBytesForBlob", true);
+ virtualHostAttributes.put("jdbcVarbinaryType", "TEST");
+ virtualHostAttributes.put("jdbcBlobType", "BLOB");
+ virtualHostAttributes.put("partitionCount", 10);
+ virtualHostAttributes.put("maxConnectionsPerPartition", 8);
+ virtualHostAttributes.put("minConnectionsPerPartition", 2);
+
+ doTest(_store, virtualHostAttributes);
+
+ ConfigurationEntry expectNewRoot = new ConfigurationEntry(_brokerId, Broker.class.getSimpleName(), Collections.<String, Object>singletonMap(Broker.MODEL_VERSION, "1.4"), Collections.singleton(_virtualHostId), _store);
+ ConfigurationEntry expectedNewVirtualHost;
+ {
+ Map<String, Object> expectedNewVirtualHostMessageSettings = new HashMap<String, Object>();
+ expectedNewVirtualHostMessageSettings.put("storeType", "JDBC");
+ expectedNewVirtualHostMessageSettings.put("connectionURL", "jdbc:test");
+ expectedNewVirtualHostMessageSettings.put("connectionPool", "BONECP");
+ expectedNewVirtualHostMessageSettings.put("jdbcBigIntType", "NUMBER");
+ expectedNewVirtualHostMessageSettings.put("jdbcBytesForBlob", true);
+ expectedNewVirtualHostMessageSettings.put("jdbcVarbinaryType", "TEST");
+ expectedNewVirtualHostMessageSettings.put("jdbcBlobType", "BLOB");
+ expectedNewVirtualHostMessageSettings.put("partitionCount", 10);
+ expectedNewVirtualHostMessageSettings.put("maxConnectionsPerPartition", 8);
+ expectedNewVirtualHostMessageSettings.put("minConnectionsPerPartition", 2);
+
+ Map<String, Object> expectedNewVirtualHostAttributes = new HashMap<String, Object>();
+ expectedNewVirtualHostAttributes.put(VirtualHost.NAME, "test");
+ expectedNewVirtualHostAttributes.put(VirtualHost.TYPE, "STANDARD");
+ expectedNewVirtualHostAttributes.put(VirtualHost.MESSAGE_STORE_SETTINGS, expectedNewVirtualHostMessageSettings);
+
+ expectedNewVirtualHost = new ConfigurationEntry(_virtualHostId, VirtualHost.class.getSimpleName(), expectedNewVirtualHostAttributes, Collections.<UUID>emptySet(), _store);
+ }
+ verify(_store).save(expectedNewVirtualHost, expectNewRoot);
+ }
+
+ private void doTest(ConfigurationEntryStore store, Map<String,Object> virtualHostAttributes)
+ {
+ final ConfigurationEntry virtualHostEntry = new ConfigurationEntry(_virtualHostId, VirtualHost.class.getSimpleName(), virtualHostAttributes, Collections.<UUID>emptySet(), store);
+
+ final ConfigurationEntry rootEntry;
+ {
+ Map<String, Object> rootEntryAttributes = Collections.<String, Object>singletonMap(Broker.MODEL_VERSION, "1.3");
+ rootEntry = new ConfigurationEntry(_brokerId, Broker.class.getSimpleName(), rootEntryAttributes, Collections.singleton(_virtualHostId), store);
+ }
+
+ when(store.getRootEntry()).thenReturn(rootEntry);
+ when(store.getEntry(_virtualHostId)).thenReturn(virtualHostEntry);
+
+ StoreUpgrader.UPGRADE_1_3.doUpgrade(store);
+ }
+
+}
diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/startup/VirtualHostRecovererTest.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/startup/VirtualHostRecovererTest.java
index 80f935a55e..0eea2663fd 100644
--- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/startup/VirtualHostRecovererTest.java
+++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/startup/VirtualHostRecovererTest.java
@@ -23,6 +23,7 @@ package org.apache.qpid.server.configuration.startup;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
+import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
@@ -34,6 +35,7 @@ import org.apache.qpid.server.model.Broker;
import org.apache.qpid.server.model.VirtualHost;
import org.apache.qpid.server.security.SecurityManager;
import org.apache.qpid.server.stats.StatisticsGatherer;
+import org.apache.qpid.server.store.MessageStore;
import org.apache.qpid.server.store.TestMemoryMessageStore;
import org.apache.qpid.server.store.TestableMemoryMessageStore;
import org.apache.qpid.server.virtualhost.StandardVirtualHostFactory;
@@ -54,8 +56,7 @@ public class VirtualHostRecovererTest extends TestCase
Map<String, Object> attributes = new HashMap<String, Object>();
attributes.put(VirtualHost.NAME, getName());
attributes.put(VirtualHost.TYPE, StandardVirtualHostFactory.TYPE);
-
- attributes.put(VirtualHost.STORE_TYPE, TestMemoryMessageStore.TYPE);
+ attributes.put(VirtualHost.MESSAGE_STORE_SETTINGS, Collections.singletonMap(MessageStore.STORE_TYPE, TestMemoryMessageStore.TYPE));
when(entry.getAttributes()).thenReturn(attributes);
VirtualHost host = recoverer.create(null, entry, parent);
@@ -68,15 +69,9 @@ public class VirtualHostRecovererTest extends TestCase
{
Map<String, Object> attributes = new HashMap<String, Object>();
attributes.put(VirtualHost.NAME, getName());
- attributes.put(VirtualHost.TYPE, "STANDARD");
- String[] mandatoryAttributes = {VirtualHost.NAME, VirtualHost.TYPE};
-
- checkMandatoryAttributesAreValidated(mandatoryAttributes, attributes);
-
- attributes = new HashMap<String, Object>();
- attributes.put(VirtualHost.NAME, getName());
- attributes.put(VirtualHost.STORE_TYPE, "MEMORY");
- mandatoryAttributes = new String[]{VirtualHost.NAME, VirtualHost.STORE_TYPE};
+ attributes.put(VirtualHost.TYPE, StandardVirtualHostFactory.TYPE);
+ attributes.put(VirtualHost.MESSAGE_STORE_SETTINGS, Collections.singletonMap(MessageStore.STORE_TYPE, TestMemoryMessageStore.TYPE));
+ String[] mandatoryAttributes = {VirtualHost.NAME, VirtualHost.TYPE, VirtualHost.MESSAGE_STORE_SETTINGS};
checkMandatoryAttributesAreValidated(mandatoryAttributes, attributes);
}
diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/model/VirtualHostTest.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/model/VirtualHostTest.java
index 2410df1fe0..266049e611 100644
--- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/model/VirtualHostTest.java
+++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/model/VirtualHostTest.java
@@ -33,6 +33,7 @@ import org.apache.qpid.server.configuration.RecovererProvider;
import org.apache.qpid.server.configuration.startup.VirtualHostRecoverer;
import org.apache.qpid.server.configuration.updater.TaskExecutor;
import org.apache.qpid.server.stats.StatisticsGatherer;
+import org.apache.qpid.server.store.MessageStore;
import org.apache.qpid.server.store.TestMemoryMessageStore;
import org.apache.qpid.server.util.BrokerTestHelper;
import org.apache.qpid.server.virtualhost.StandardVirtualHostFactory;
@@ -88,7 +89,7 @@ public class VirtualHostTest extends QpidTestCase
Map<String, Object> attributes = new HashMap<String, Object>();
attributes.put(VirtualHost.NAME, getName());
attributes.put(VirtualHost.TYPE, StandardVirtualHostFactory.TYPE);
- attributes.put(VirtualHost.STORE_TYPE, TestMemoryMessageStore.TYPE);
+ attributes.put(VirtualHost.MESSAGE_STORE_SETTINGS, Collections.singletonMap(MessageStore.STORE_TYPE, TestMemoryMessageStore.TYPE));
attributes.put(VirtualHost.STATE, State.QUIESCED);
VirtualHost host = createHost(attributes);
@@ -149,7 +150,7 @@ public class VirtualHostTest extends QpidTestCase
Map<String, Object> attributes = new HashMap<String, Object>();
attributes.put(VirtualHost.NAME, getName());
attributes.put(VirtualHost.TYPE, StandardVirtualHostFactory.TYPE);
- attributes.put(VirtualHost.STORE_TYPE, TestMemoryMessageStore.TYPE);
+ attributes.put(VirtualHost.MESSAGE_STORE_SETTINGS, Collections.singletonMap(MessageStore.STORE_TYPE, TestMemoryMessageStore.TYPE));
VirtualHost host = createHost(attributes);
return host;
diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/AbstractDurableConfigurationStoreTestCase.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/AbstractDurableConfigurationStoreTestCase.java
index a9036a49a4..931fe36d5d 100644
--- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/AbstractDurableConfigurationStoreTestCase.java
+++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/AbstractDurableConfigurationStoreTestCase.java
@@ -84,16 +84,19 @@ public abstract class AbstractDurableConfigurationStoreTestCase extends QpidTest
private UUID _queueId;
private UUID _exchangeId;
private DurableConfigurationStore _configStore;
+ protected Map<String, Object> _messageStoreSettings;
public void setUp() throws Exception
{
super.setUp();
+ _messageStoreSettings = new HashMap<String, Object>();
_queueId = UUIDGenerator.generateRandomUUID();
_exchangeId = UUIDGenerator.generateRandomUUID();
_storeName = getName();
_storePath = TMP_FOLDER + File.separator + _storeName;
+ _messageStoreSettings.put(MessageStore.STORE_PATH, _storePath);
FileUtils.delete(new File(_storePath), true);
setTestSystemProperty("QPID_WORK", TMP_FOLDER);
@@ -114,7 +117,7 @@ public abstract class AbstractDurableConfigurationStoreTestCase extends QpidTest
when(_exchange.getId()).thenReturn(_exchangeId);
when(_exchange.getExchangeType()).thenReturn(mock(ExchangeType.class));
when(_exchange.getEventLogger()).thenReturn(new EventLogger());
- when(_virtualHost.getAttribute(eq(VirtualHost.STORE_PATH))).thenReturn(_storePath);
+ when(_virtualHost.getMessageStoreSettings()).thenReturn(_messageStoreSettings);
_bindingArgs = new HashMap<String, Object>();
String argKey = AMQPFilterTypes.JMS_SELECTOR.toString();
diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/MessageStoreQuotaEventsTestBase.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/MessageStoreQuotaEventsTestBase.java
index 7b29a48d60..908f3fe6e1 100644
--- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/MessageStoreQuotaEventsTestBase.java
+++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/MessageStoreQuotaEventsTestBase.java
@@ -20,6 +20,9 @@
*/
package org.apache.qpid.server.store;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
import java.io.File;
import java.nio.ByteBuffer;
import java.util.ArrayList;
@@ -33,10 +36,6 @@ import org.apache.qpid.server.store.MessageStoreRecoveryHandler.StoredMessageRec
import org.apache.qpid.test.utils.QpidTestCase;
import org.apache.qpid.util.FileUtils;
-import static org.mockito.Matchers.eq;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-
public abstract class MessageStoreQuotaEventsTestBase extends QpidTestCase implements EventListener, TransactionLogResource
{
private static final Logger _logger = Logger.getLogger(MessageStoreQuotaEventsTestBase.class);
@@ -50,9 +49,7 @@ public abstract class MessageStoreQuotaEventsTestBase extends QpidTestCase imple
private UUID _transactionResource;
protected abstract MessageStore createStore() throws Exception;
-
- protected abstract void applyStoreSpecificConfiguration(VirtualHost virtualHost);
-
+ protected abstract VirtualHost<?> createVirtualHost(String storeLocation);
protected abstract int getNumberOfMessagesToFillStore();
@Override
@@ -64,11 +61,7 @@ public abstract class MessageStoreQuotaEventsTestBase extends QpidTestCase imple
FileUtils.delete(_storeLocation, true);
- VirtualHost vhost = mock(VirtualHost.class);
- when(vhost.getAttribute(eq(VirtualHost.STORE_PATH))).thenReturn(_storeLocation.getAbsolutePath());
- when(vhost.getName()).thenReturn("test");
-
- applyStoreSpecificConfiguration(vhost);
+ VirtualHost<?> vhost = createVirtualHost(_storeLocation.getAbsolutePath());
_store = createStore();
((DurableConfigurationStore)_store).configureConfigStore(vhost, null);
@@ -82,6 +75,7 @@ public abstract class MessageStoreQuotaEventsTestBase extends QpidTestCase imple
_store.addEventListener(this, Event.PERSISTENT_MESSAGE_SIZE_OVERFULL, Event.PERSISTENT_MESSAGE_SIZE_UNDERFULL);
}
+
@Override
public void tearDown() throws Exception
{
diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/StateManagerTest.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/StateManagerTest.java
index 3ee98f9a21..1996620950 100644
--- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/StateManagerTest.java
+++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/StateManagerTest.java
@@ -22,6 +22,7 @@ package org.apache.qpid.server.store;
import java.util.EnumSet;
+
import junit.framework.TestCase;
public class StateManagerTest extends TestCase implements EventListener
@@ -115,7 +116,7 @@ public class StateManagerTest extends TestCase implements EventListener
performValidTransition(StateManager.INITIALISE_COMPLETE);
performValidTransition(StateManager.CLOSE_INITIALISED);
performValidTransition(StateManager.CLOSE_COMPLETE);
-
+
_manager = new StateManager(this);
performValidTransition(StateManager.INITIALISE);
performValidTransition(StateManager.INITIALISE_COMPLETE);
@@ -141,13 +142,13 @@ public class StateManagerTest extends TestCase implements EventListener
performInvalidTransitions(StateManager.INITIALISE, State.INITIALISED);
performInvalidTransitions(StateManager.INITIALISE_COMPLETE, State.ACTIVATING, State.CLOSING);
- performInvalidTransitions(StateManager.ACTIVATE, State.ACTIVE);
+ performInvalidTransitions(StateManager.ACTIVATE, State.ACTIVE, State.CLOSING);
performInvalidTransitions(StateManager.ACTIVATE_COMPLETE, State.QUIESCING, State.CLOSING, State.INITIALISED);
performInvalidTransitions(StateManager.QUIESCE, State.QUIESCED);
performInvalidTransitions(StateManager.QUIESCE_COMPLETE, State.ACTIVATING, State.CLOSING);
performInvalidTransitions(StateManager.CLOSE_QUIESCED, State.CLOSED);
performInvalidTransitions(StateManager.CLOSE_COMPLETE);
-
+
}
private void performInvalidTransitions(StateManager.Transition preTransition, State... validEndStates)
@@ -156,7 +157,7 @@ public class StateManagerTest extends TestCase implements EventListener
{
performValidTransition(preTransition);
}
-
+
EnumSet<State> endStates = EnumSet.allOf(State.class);
if(validEndStates != null)
@@ -166,13 +167,13 @@ public class StateManagerTest extends TestCase implements EventListener
endStates.remove(state);
}
}
-
+
for(State invalidEndState : endStates)
{
performInvalidStateTransition(invalidEndState);
}
-
+
}
private void performInvalidStateTransition(State invalidEndState)
diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/util/BrokerTestHelper.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/util/BrokerTestHelper.java
index 0dc25a2ad2..fd56f3fa1c 100644
--- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/util/BrokerTestHelper.java
+++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/util/BrokerTestHelper.java
@@ -42,6 +42,7 @@ import org.apache.qpid.server.queue.AMQQueue;
import org.apache.qpid.server.security.SecurityManager;
import org.apache.qpid.server.security.SubjectCreator;
import org.apache.qpid.server.stats.StatisticsGatherer;
+import org.apache.qpid.server.store.MessageStore;
import org.apache.qpid.server.store.TestMemoryMessageStore;
import org.apache.qpid.server.store.TestableMemoryMessageStore;
import org.apache.qpid.server.virtualhost.StandardVirtualHostFactory;
@@ -108,8 +109,10 @@ public class BrokerTestHelper
when(virtualHost.getType()).thenReturn(StandardVirtualHostFactory.TYPE);
when(virtualHost.getAttribute(org.apache.qpid.server.model.VirtualHost.TYPE)).thenReturn(StandardVirtualHostFactory.TYPE);
- when(virtualHost.getStoreType()).thenReturn(TestableMemoryMessageStore.TYPE);
- when(virtualHost.getAttribute(org.apache.qpid.server.model.VirtualHost.STORE_TYPE)).thenReturn(TestableMemoryMessageStore.TYPE);
+ Map<String, Object> messageStoreSettings = new HashMap<String, Object>();
+ messageStoreSettings.put(MessageStore.STORE_TYPE, TestableMemoryMessageStore.TYPE);
+
+ when(virtualHost.getMessageStoreSettings()).thenReturn(messageStoreSettings);
when(virtualHost.getName()).thenReturn(name);
return createVirtualHost(virtualHostRegistry, virtualHost);
}
diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/virtualhost/StandardVirtualHostTest.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/virtualhost/StandardVirtualHostTest.java
index 570e748d7a..35b4b89bf6 100644
--- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/virtualhost/StandardVirtualHostTest.java
+++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/virtualhost/StandardVirtualHostTest.java
@@ -30,7 +30,6 @@ import java.util.Map;
import java.util.UUID;
import org.apache.qpid.server.binding.BindingImpl;
-
import org.apache.qpid.server.exchange.AbstractExchange;
import org.apache.qpid.server.exchange.ExchangeImpl;
import org.apache.qpid.server.configuration.IllegalConfigurationException;
@@ -42,7 +41,9 @@ import org.apache.qpid.server.security.SecurityManager;
import org.apache.qpid.server.stats.StatisticsGatherer;
import org.apache.qpid.server.store.ConfigurationRecoveryHandler;
import org.apache.qpid.server.store.JsonFileConfigStore;
+import org.apache.qpid.server.store.MessageStore;
import org.apache.qpid.server.store.TestMemoryMessageStore;
+import org.apache.qpid.server.store.TestableMemoryMessageStore;
import org.apache.qpid.server.util.BrokerTestHelper;
import org.apache.qpid.test.utils.QpidTestCase;
import org.apache.qpid.test.utils.TestFileUtils;
@@ -249,13 +250,18 @@ public class StandardVirtualHostTest extends QpidTestCase
private VirtualHost createVirtualHost(String virtualHostName) throws Exception
{
Broker<?> broker = BrokerTestHelper.createBrokerMock();
+
_virtualHostRegistry = broker.getVirtualHostRegistry();
org.apache.qpid.server.model.VirtualHost<?> model = mock(org.apache.qpid.server.model.VirtualHost.class);
when(model.getAttribute(org.apache.qpid.server.model.VirtualHost.CONFIG_STORE_TYPE)).thenReturn(JsonFileConfigStore.TYPE);
when(model.getAttribute(org.apache.qpid.server.model.VirtualHost.CONFIG_STORE_PATH)).thenReturn(_storeFolder.getAbsolutePath());
- when(model.getAttribute(org.apache.qpid.server.model.VirtualHost.STORE_TYPE)).thenReturn(TestMemoryMessageStore.TYPE);
+
+ Map<String, Object> messageStoreSettings = new HashMap<String, Object>();
+ messageStoreSettings.put(MessageStore.STORE_TYPE, TestableMemoryMessageStore.TYPE);
+ when(model.getMessageStoreSettings()).thenReturn(messageStoreSettings);
when(model.getName()).thenReturn(virtualHostName);
+
VirtualHost host = new StandardVirtualHostFactory().createVirtualHost(_virtualHostRegistry, mock(StatisticsGatherer.class),
new SecurityManager(broker, false), model);
_virtualHostRegistry.registerVirtualHost(host);