diff options
| author | Keith Wall <kwall@apache.org> | 2014-03-14 16:39:47 +0000 |
|---|---|---|
| committer | Keith Wall <kwall@apache.org> | 2014-03-14 16:39:47 +0000 |
| commit | ec486999608568e37a55dc9c81d9be133d95ebc3 (patch) | |
| tree | 87d6446e97cfdca321b1faff6f24a3010df4cdff /qpid/java/broker-core/src | |
| parent | db26915f9b2edfa410c094162bec78b9d2010b24 (diff) | |
| download | qpid-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')
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); |
