Repository: qpid-broker-j Updated Branches: refs/heads/master dbcbed940 -> bc46f8b37
QPID-7873: [Broker-J] Make sure that link store structure and preferences store structure are deleted on deletion of the virtual host node Project: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/repo Commit: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/commit/bc46f8b3 Tree: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/tree/bc46f8b3 Diff: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/diff/bc46f8b3 Branch: refs/heads/master Commit: bc46f8b37eef8db31779acaf59225e8001f7a479 Parents: dbcbed9 Author: Alex Rudyy <oru...@apache.org> Authored: Tue Mar 6 13:48:29 2018 +0000 Committer: Alex Rudyy <oru...@apache.org> Committed: Tue Mar 6 13:48:29 2018 +0000 ---------------------------------------------------------------------- .../AbstractStandardVirtualHostNode.java | 11 ++++++ .../protocol/v1_0/store/jdbc/JDBCLinkStore.java | 18 +++++++--- .../virtualhost/derby/DerbyVirtualHostImpl.java | 13 +++++++ .../derby/DerbyVirtualHostNodeImpl.java | 22 ++++++++++-- .../jdbc/AbstractJDBCConfigurationStore.java | 36 +++++++++++++++++--- .../store/jdbc/AbstractJDBCMessageStore.java | 26 +++++++++++++- .../qpid/server/store/jdbc/JDBCContainer.java | 5 +++ .../qpid/server/store/jdbc/JdbcUtils.java | 2 +- .../virtualhost/jdbc/JDBCVirtualHostImpl.java | 20 ++++++++++- .../jdbc/JDBCVirtualHostNodeImpl.java | 22 ++++++++++-- .../jdbc/GenericJDBCConfigurationStoreTest.java | 12 +++++++ .../server/store/jdbc/JDBCMessageStoreTest.java | 12 +++++++ .../qpid/server/store/jdbc/TestJdbcUtils.java | 4 +-- .../virtualhost/jdbc/JDBCVirtualHostTest.java | 27 +++++++++++++++ .../jdbc/JDBCVirtualHostNodeTest.java | 30 ++++++++++++++++ 15 files changed, 241 insertions(+), 19 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/bc46f8b3/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/AbstractStandardVirtualHostNode.java ---------------------------------------------------------------------- diff --git a/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/AbstractStandardVirtualHostNode.java b/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/AbstractStandardVirtualHostNode.java index d7de6fd..aaa436b 100644 --- a/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/AbstractStandardVirtualHostNode.java +++ b/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/AbstractStandardVirtualHostNode.java @@ -46,6 +46,8 @@ import org.apache.qpid.server.store.ConfiguredObjectRecordImpl; import org.apache.qpid.server.store.DurableConfigurationStore; import org.apache.qpid.server.store.MessageStore; import org.apache.qpid.server.store.VirtualHostStoreUpgraderAndRecoverer; +import org.apache.qpid.server.store.preferences.PreferenceStore; +import org.apache.qpid.server.store.preferences.PreferenceStoreProvider; import org.apache.qpid.server.virtualhost.QueueManagingVirtualHost; public abstract class AbstractStandardVirtualHostNode<X extends AbstractStandardVirtualHostNode<X>> extends AbstractVirtualHostNode<X> @@ -136,6 +138,15 @@ public abstract class AbstractStandardVirtualHostNode<X extends AbstractStandard messageStore.onDelete(virtualHost); } + if (AbstractStandardVirtualHostNode.this instanceof PreferenceStoreProvider) + { + PreferenceStore preferenceStore = + ((PreferenceStoreProvider) AbstractStandardVirtualHostNode.this).getPreferenceStore(); + if (preferenceStore != null) + { + preferenceStore.onDelete(); + } + } DurableConfigurationStore configurationStore = getConfigurationStore(); if (configurationStore != null) { http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/bc46f8b3/broker-plugins/amqp-1-0-jdbc-store/src/main/java/org/apache/qpid/server/protocol/v1_0/store/jdbc/JDBCLinkStore.java ---------------------------------------------------------------------- diff --git a/broker-plugins/amqp-1-0-jdbc-store/src/main/java/org/apache/qpid/server/protocol/v1_0/store/jdbc/JDBCLinkStore.java b/broker-plugins/amqp-1-0-jdbc-store/src/main/java/org/apache/qpid/server/protocol/v1_0/store/jdbc/JDBCLinkStore.java index 94de03c..4441d6a 100644 --- a/broker-plugins/amqp-1-0-jdbc-store/src/main/java/org/apache/qpid/server/protocol/v1_0/store/jdbc/JDBCLinkStore.java +++ b/broker-plugins/amqp-1-0-jdbc-store/src/main/java/org/apache/qpid/server/protocol/v1_0/store/jdbc/JDBCLinkStore.java @@ -36,6 +36,7 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; +import java.util.Arrays; import java.util.Base64; import java.util.Collection; @@ -62,6 +63,7 @@ import org.apache.qpid.server.store.StoreException; import org.apache.qpid.server.store.jdbc.JDBCContainer; import org.apache.qpid.server.store.jdbc.JDBCDetails; import org.apache.qpid.server.store.jdbc.JdbcUtils; +import org.apache.qpid.server.util.Action; public class JDBCLinkStore extends AbstractLinkStore { @@ -72,6 +74,7 @@ public class JDBCLinkStore extends AbstractLinkStore private final String _tableNamePrefix; private final String _sqlBlobType; private final boolean _isUseBytesMethodsForBlob; + private final Action<Connection> _cleanUpAction; JDBCLinkStore(final JDBCContainer jdbcContainer) { @@ -80,6 +83,8 @@ public class JDBCLinkStore extends AbstractLinkStore JDBCDetails jdbcDetails = jdbcContainer.getJDBCDetails(); _sqlBlobType = jdbcDetails.getBlobType(); _isUseBytesMethodsForBlob = jdbcDetails.isUseBytesMethodsForBlob(); + _cleanUpAction = this::cleanUp; + jdbcContainer.addDeleteAction(_cleanUpAction); } @Override @@ -186,12 +191,10 @@ public class JDBCLinkStore extends AbstractLinkStore @Override protected void doDelete() { - try (Connection connection = getConnection(); - Statement dropLinksStatement = connection.createStatement(); - Statement dropVersionsStatement = connection.createStatement()) + _jdbcContainer.removeDeleteAction(_cleanUpAction); + try (Connection connection = getConnection()) { - dropLinksStatement.execute(String.format("DROP TABLE %s", getLinksTableName())); - dropVersionsStatement.execute(String.format("DROP TABLE %s", getVersionTableName())); + cleanUp(connection); } catch (IllegalStateException e) { @@ -203,6 +206,11 @@ public class JDBCLinkStore extends AbstractLinkStore } } + private void cleanUp(final Connection connection) + { + JdbcUtils.dropTables(connection, LOGGER, Arrays.asList(getLinksTableName(), getVersionTableName())); + } + @Override public TerminusDurability getHighestSupportedTerminusDurability() { http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/bc46f8b3/broker-plugins/derby-store/src/main/java/org/apache/qpid/server/virtualhost/derby/DerbyVirtualHostImpl.java ---------------------------------------------------------------------- diff --git a/broker-plugins/derby-store/src/main/java/org/apache/qpid/server/virtualhost/derby/DerbyVirtualHostImpl.java b/broker-plugins/derby-store/src/main/java/org/apache/qpid/server/virtualhost/derby/DerbyVirtualHostImpl.java index 39085c8..5985f51 100644 --- a/broker-plugins/derby-store/src/main/java/org/apache/qpid/server/virtualhost/derby/DerbyVirtualHostImpl.java +++ b/broker-plugins/derby-store/src/main/java/org/apache/qpid/server/virtualhost/derby/DerbyVirtualHostImpl.java @@ -33,6 +33,7 @@ import org.apache.qpid.server.store.derby.DerbyMessageStore; import org.apache.qpid.server.store.derby.DerbyUtils; import org.apache.qpid.server.store.jdbc.JDBCContainer; import org.apache.qpid.server.store.jdbc.JDBCDetails; +import org.apache.qpid.server.util.Action; import org.apache.qpid.server.util.ConnectionScopedRuntimeException; import org.apache.qpid.server.util.FileHelper; import org.apache.qpid.server.virtualhost.AbstractVirtualHost; @@ -122,4 +123,16 @@ public class DerbyVirtualHostImpl extends AbstractVirtualHost<DerbyVirtualHostIm { return ""; } + + @Override + public void addDeleteAction(final Action<Connection> action) + { + ((DerbyMessageStore) getMessageStore()).addDeleteAction(action); + } + + @Override + public void removeDeleteAction(final Action<Connection> action) + { + ((DerbyMessageStore) getMessageStore()).removeDeleteAction(action); + } } http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/bc46f8b3/broker-plugins/derby-store/src/main/java/org/apache/qpid/server/virtualhostnode/derby/DerbyVirtualHostNodeImpl.java ---------------------------------------------------------------------- diff --git a/broker-plugins/derby-store/src/main/java/org/apache/qpid/server/virtualhostnode/derby/DerbyVirtualHostNodeImpl.java b/broker-plugins/derby-store/src/main/java/org/apache/qpid/server/virtualhostnode/derby/DerbyVirtualHostNodeImpl.java index 8eba861..cdd90e8 100644 --- a/broker-plugins/derby-store/src/main/java/org/apache/qpid/server/virtualhostnode/derby/DerbyVirtualHostNodeImpl.java +++ b/broker-plugins/derby-store/src/main/java/org/apache/qpid/server/virtualhostnode/derby/DerbyVirtualHostNodeImpl.java @@ -40,6 +40,7 @@ import org.apache.qpid.server.store.derby.DerbyUtils; import org.apache.qpid.server.store.jdbc.JDBCContainer; import org.apache.qpid.server.store.jdbc.JDBCDetails; import org.apache.qpid.server.store.preferences.PreferenceStore; +import org.apache.qpid.server.util.Action; import org.apache.qpid.server.util.ConnectionScopedRuntimeException; import org.apache.qpid.server.util.FileHelper; import org.apache.qpid.server.virtualhostnode.AbstractStandardVirtualHostNode; @@ -108,7 +109,7 @@ public class DerbyVirtualHostNodeImpl extends AbstractStandardVirtualHostNode<De @Override public PreferenceStore getPreferenceStore() { - return ((DerbyConfigurationStore)getConfigurationStore()).getPreferenceStore(); + return getStore().getPreferenceStore(); } @Override @@ -122,7 +123,7 @@ public class DerbyVirtualHostNodeImpl extends AbstractStandardVirtualHostNode<De { try { - return ((DerbyConfigurationStore) getConfigurationStore()).getConnection(); + return getStore().getConnection(); } catch (SQLException e) { @@ -137,4 +138,21 @@ public class DerbyVirtualHostNodeImpl extends AbstractStandardVirtualHostNode<De { return ""; } + + @Override + public void addDeleteAction(final Action<Connection> action) + { + getStore().addDeleteAction(action); + } + + @Override + public void removeDeleteAction(final Action<Connection> action) + { + getStore().removeDeleteAction(action); + } + + private DerbyConfigurationStore getStore() + { + return (DerbyConfigurationStore) getConfigurationStore(); + } } http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/bc46f8b3/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/AbstractJDBCConfigurationStore.java ---------------------------------------------------------------------- diff --git a/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/AbstractJDBCConfigurationStore.java b/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/AbstractJDBCConfigurationStore.java index 1aac9c7..c87d719 100644 --- a/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/AbstractJDBCConfigurationStore.java +++ b/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/AbstractJDBCConfigurationStore.java @@ -38,7 +38,9 @@ import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.UUID; +import java.util.concurrent.ConcurrentHashMap; import com.fasterxml.jackson.databind.ObjectMapper; import org.slf4j.Logger; @@ -51,6 +53,7 @@ import org.apache.qpid.server.store.DurableConfigurationStore; import org.apache.qpid.server.store.MessageStoreProvider; import org.apache.qpid.server.store.StoreException; import org.apache.qpid.server.store.handler.ConfiguredObjectRecordHandler; +import org.apache.qpid.server.util.Action; public abstract class AbstractJDBCConfigurationStore implements MessageStoreProvider, DurableConfigurationStore { @@ -59,7 +62,7 @@ public abstract class AbstractJDBCConfigurationStore implements MessageStoreProv private final static String CONFIGURED_OBJECT_HIERARCHY_TABLE_NAME_SUFFIX = "QPID_CONFIGURED_OBJECT_HIERARCHY"; private static final int DEFAULT_CONFIG_VERSION = 0; - + private final Set<Action<Connection>> _deleteActions = Collections.newSetFromMap(new ConcurrentHashMap<>());; public enum State { CLOSED, CONFIGURED, OPEN }; private State _state = State.CLOSED; @@ -78,6 +81,7 @@ public abstract class AbstractJDBCConfigurationStore implements MessageStoreProv final ConfiguredObjectRecord... initialRecords) { changeState(CONFIGURED, OPEN); + _deleteActions.clear(); try { Collection<? extends ConfiguredObjectRecord> records = doVisitAllConfiguredObjectRecords(handler); @@ -734,6 +738,16 @@ public abstract class AbstractJDBCConfigurationStore implements MessageStoreProv } } + public void addDeleteAction(final Action<Connection> action) + { + _deleteActions.add(action); + } + + public void removeDeleteAction(final Action<Connection> action) + { + _deleteActions.remove(action); + } + private void updateConfiguredObject(ConfiguredObjectRecord configuredObject, boolean createIfNecessary, Connection conn) @@ -819,11 +833,23 @@ public abstract class AbstractJDBCConfigurationStore implements MessageStoreProv protected abstract String getBlobAsString(ResultSet rs, int col) throws SQLException; - void onDelete(final Connection conn) throws SQLException + void onDelete(final Connection conn) { - JdbcUtils.dropTables(conn, - getLogger(), - Arrays.asList(getConfiguredObjectsTableName(), getConfiguredObjectHierarchyTableName())); + try + { + for (Action<Connection> deleteAction : _deleteActions) + { + deleteAction.performAction(conn); + } + _deleteActions.clear(); + } + finally + { + JdbcUtils.dropTables(conn, + getLogger(), + Arrays.asList(getConfiguredObjectsTableName(), + getConfiguredObjectHierarchyTableName())); + } } private static final class ConfiguredObjectRecordImpl implements ConfiguredObjectRecord http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/bc46f8b3/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/AbstractJDBCMessageStore.java ---------------------------------------------------------------------- diff --git a/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/AbstractJDBCMessageStore.java b/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/AbstractJDBCMessageStore.java index c12e223..0ad638c 100644 --- a/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/AbstractJDBCMessageStore.java +++ b/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/AbstractJDBCMessageStore.java @@ -67,6 +67,7 @@ import org.apache.qpid.server.store.handler.DistributedTransactionHandler; import org.apache.qpid.server.store.handler.MessageHandler; import org.apache.qpid.server.store.handler.MessageInstanceHandler; import org.apache.qpid.server.txn.Xid; +import org.apache.qpid.server.util.Action; import org.apache.qpid.server.util.CachingUUIDFactory; public abstract class AbstractJDBCMessageStore implements MessageStore @@ -90,6 +91,7 @@ public abstract class AbstractJDBCMessageStore implements MessageStore private final AtomicLong _bytesEvacuatedFromMemory = new AtomicLong(); private final Set<StoredJDBCMessage<?>> _messages = Collections.newSetFromMap(new ConcurrentHashMap<>()); private final Set<MessageDeleteListener> _messageDeleteListeners = Collections.newSetFromMap(new ConcurrentHashMap<>()); + private final Set<Action<Connection>> _deleteActions = Collections.newSetFromMap(new ConcurrentHashMap<>()); protected abstract boolean isMessageStoreOpen(); @@ -247,6 +249,7 @@ public abstract class AbstractJDBCMessageStore implements MessageStore protected void createOrOpenMessageStoreDatabase() throws StoreException { + _deleteActions.clear(); try(Connection conn = newAutoCommitConnection()) { createVersionTable(conn); @@ -735,6 +738,16 @@ public abstract class AbstractJDBCMessageStore implements MessageStore return _tablePrefix + XID_ACTIONS_TABLE_NAME_SUFFIX; } + public void addDeleteAction(final Action<Connection> action) + { + _deleteActions.add(action); + } + + public void removeDeleteAction(final Action<Connection> action) + { + _deleteActions.remove(action); + } + private static final class ConnectionWrapper { private final Connection _connection; @@ -1816,7 +1829,18 @@ public abstract class AbstractJDBCMessageStore implements MessageStore protected void onDelete(final Connection conn) { - JdbcUtils.dropTables(conn, getLogger(), getTableNames()); + try + { + for (Action<Connection> deleteAction: _deleteActions) + { + deleteAction.performAction(conn); + } + _deleteActions.clear(); + } + finally + { + JdbcUtils.dropTables(conn, getLogger(), getTableNames()); + } } public List<String> getTableNames() http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/bc46f8b3/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/JDBCContainer.java ---------------------------------------------------------------------- diff --git a/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/JDBCContainer.java b/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/JDBCContainer.java index 2634a14..1566f3f 100644 --- a/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/JDBCContainer.java +++ b/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/JDBCContainer.java @@ -21,6 +21,8 @@ package org.apache.qpid.server.store.jdbc; import java.sql.Connection; +import org.apache.qpid.server.util.Action; + public interface JDBCContainer { JDBCDetails getJDBCDetails(); @@ -28,4 +30,7 @@ public interface JDBCContainer Connection getConnection(); String getTableNamePrefix(); + + void addDeleteAction(Action<Connection> action); + void removeDeleteAction(Action<Connection> action); } http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/bc46f8b3/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/JdbcUtils.java ---------------------------------------------------------------------- diff --git a/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/JdbcUtils.java b/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/JdbcUtils.java index b6d9f22..d3df9ae 100644 --- a/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/JdbcUtils.java +++ b/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/JdbcUtils.java @@ -119,7 +119,7 @@ public class JdbcUtils } } - static void dropTables(final Connection connection, final Logger logger, Collection<String> tableNames) + public static void dropTables(final Connection connection, final Logger logger, Collection<String> tableNames) { for (String tableName : tableNames) { http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/bc46f8b3/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/virtualhost/jdbc/JDBCVirtualHostImpl.java ---------------------------------------------------------------------- diff --git a/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/virtualhost/jdbc/JDBCVirtualHostImpl.java b/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/virtualhost/jdbc/JDBCVirtualHostImpl.java index 497f1eb..33ff899 100644 --- a/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/virtualhost/jdbc/JDBCVirtualHostImpl.java +++ b/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/virtualhost/jdbc/JDBCVirtualHostImpl.java @@ -33,6 +33,7 @@ import org.apache.qpid.server.store.jdbc.AbstractJDBCMessageStore; import org.apache.qpid.server.store.jdbc.GenericJDBCMessageStore; import org.apache.qpid.server.store.jdbc.JDBCContainer; import org.apache.qpid.server.store.jdbc.JDBCDetails; +import org.apache.qpid.server.util.Action; import org.apache.qpid.server.util.ConnectionScopedRuntimeException; import org.apache.qpid.server.virtualhost.AbstractVirtualHost; @@ -111,7 +112,7 @@ public class JDBCVirtualHostImpl extends AbstractVirtualHost<JDBCVirtualHostImpl { try { - return ((AbstractJDBCMessageStore) getMessageStore()).getConnection(); + return getStore().getConnection(); } catch (SQLException e) { @@ -129,4 +130,21 @@ public class JDBCVirtualHostImpl extends AbstractVirtualHost<JDBCVirtualHostImpl ", connectionPoolType=" + getConnectionPoolType() + ", username=" + getUsername() + "]"; } + + @Override + public void addDeleteAction(final Action<Connection> action) + { + getStore().addDeleteAction(action); + } + + @Override + public void removeDeleteAction(final Action<Connection> action) + { + getStore().removeDeleteAction(action); + } + + private AbstractJDBCMessageStore getStore() + { + return (AbstractJDBCMessageStore) getMessageStore(); + } } http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/bc46f8b3/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/virtualhostnode/jdbc/JDBCVirtualHostNodeImpl.java ---------------------------------------------------------------------- diff --git a/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/virtualhostnode/jdbc/JDBCVirtualHostNodeImpl.java b/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/virtualhostnode/jdbc/JDBCVirtualHostNodeImpl.java index 77f20f4..7c4efd4 100644 --- a/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/virtualhostnode/jdbc/JDBCVirtualHostNodeImpl.java +++ b/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/virtualhostnode/jdbc/JDBCVirtualHostNodeImpl.java @@ -36,6 +36,7 @@ import org.apache.qpid.server.store.jdbc.GenericJDBCConfigurationStore; import org.apache.qpid.server.store.jdbc.JDBCContainer; import org.apache.qpid.server.store.jdbc.JDBCDetails; import org.apache.qpid.server.store.preferences.PreferenceStore; +import org.apache.qpid.server.util.Action; import org.apache.qpid.server.util.ConnectionScopedRuntimeException; import org.apache.qpid.server.virtualhostnode.AbstractStandardVirtualHostNode; @@ -119,7 +120,7 @@ public class JDBCVirtualHostNodeImpl extends AbstractStandardVirtualHostNode<JDB { try { - return ((GenericJDBCConfigurationStore) getConfigurationStore()).getConnection(); + return getStore().getConnection(); } catch (SQLException e) { @@ -147,6 +148,23 @@ public class JDBCVirtualHostNodeImpl extends AbstractStandardVirtualHostNode<JDB @Override public PreferenceStore getPreferenceStore() { - return ((GenericJDBCConfigurationStore) getConfigurationStore()).getPreferenceStore(); + return getStore().getPreferenceStore(); + } + + @Override + public void addDeleteAction(final Action<Connection> action) + { + getStore().addDeleteAction(action); + } + + @Override + public void removeDeleteAction(final Action<Connection> action) + { + getStore().removeDeleteAction(action); + } + + private GenericJDBCConfigurationStore getStore() + { + return (GenericJDBCConfigurationStore) getConfigurationStore(); } } http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/bc46f8b3/broker-plugins/jdbc-store/src/test/java/org/apache/qpid/server/store/jdbc/GenericJDBCConfigurationStoreTest.java ---------------------------------------------------------------------- diff --git a/broker-plugins/jdbc-store/src/test/java/org/apache/qpid/server/store/jdbc/GenericJDBCConfigurationStoreTest.java b/broker-plugins/jdbc-store/src/test/java/org/apache/qpid/server/store/jdbc/GenericJDBCConfigurationStoreTest.java index c5d7de4..aca3d9c 100644 --- a/broker-plugins/jdbc-store/src/test/java/org/apache/qpid/server/store/jdbc/GenericJDBCConfigurationStoreTest.java +++ b/broker-plugins/jdbc-store/src/test/java/org/apache/qpid/server/store/jdbc/GenericJDBCConfigurationStoreTest.java @@ -30,6 +30,7 @@ import java.sql.Connection; import java.sql.SQLException; import java.util.Arrays; import java.util.Collection; +import java.util.concurrent.atomic.AtomicBoolean; import org.apache.qpid.server.model.ConfiguredObjectFactory; import org.apache.qpid.server.model.VirtualHost; @@ -74,6 +75,17 @@ public class GenericJDBCConfigurationStoreTest extends AbstractDurableConfigurat } } + public void testDeleteAction() + { + GenericJDBCConfigurationStore store = (GenericJDBCConfigurationStore) getConfigurationStore(); + AtomicBoolean deleted = new AtomicBoolean(); + store.addDeleteAction(object -> deleted.set(true)); + + store.closeConfigurationStore(); + store.onDelete(getVirtualHostNode()); + assertEquals("Delete action was not invoked", true, deleted.get()); + } + @Override protected VirtualHostNode createVirtualHostNode(final String storeLocation, final ConfiguredObjectFactory factory) { http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/bc46f8b3/broker-plugins/jdbc-store/src/test/java/org/apache/qpid/server/store/jdbc/JDBCMessageStoreTest.java ---------------------------------------------------------------------- diff --git a/broker-plugins/jdbc-store/src/test/java/org/apache/qpid/server/store/jdbc/JDBCMessageStoreTest.java b/broker-plugins/jdbc-store/src/test/java/org/apache/qpid/server/store/jdbc/JDBCMessageStoreTest.java index a2636a2..e392109 100644 --- a/broker-plugins/jdbc-store/src/test/java/org/apache/qpid/server/store/jdbc/JDBCMessageStoreTest.java +++ b/broker-plugins/jdbc-store/src/test/java/org/apache/qpid/server/store/jdbc/JDBCMessageStoreTest.java @@ -30,6 +30,7 @@ import java.sql.SQLException; import java.util.Collection; import java.util.UUID; import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicBoolean; import com.google.common.util.concurrent.ListenableFuture; @@ -146,6 +147,17 @@ public class JDBCMessageStoreTest extends MessageStoreTestCase future.get(1000, TimeUnit.MILLISECONDS); } + public void testDeleteAction() + { + GenericJDBCMessageStore store = (GenericJDBCMessageStore) getStore(); + AtomicBoolean deleted = new AtomicBoolean(); + store.addDeleteAction(object -> deleted.set(true)); + + store.closeMessageStore(); + store.onDelete(getVirtualHost()); + assertEquals("Delete action was not invoked", true, deleted.get()); + } + private InternalMessage addTestMessage(final MessageStore store, final String transactionalLogName, final String messageContent) http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/bc46f8b3/broker-plugins/jdbc-store/src/test/java/org/apache/qpid/server/store/jdbc/TestJdbcUtils.java ---------------------------------------------------------------------- diff --git a/broker-plugins/jdbc-store/src/test/java/org/apache/qpid/server/store/jdbc/TestJdbcUtils.java b/broker-plugins/jdbc-store/src/test/java/org/apache/qpid/server/store/jdbc/TestJdbcUtils.java index e1ee362..e0af00a 100644 --- a/broker-plugins/jdbc-store/src/test/java/org/apache/qpid/server/store/jdbc/TestJdbcUtils.java +++ b/broker-plugins/jdbc-store/src/test/java/org/apache/qpid/server/store/jdbc/TestJdbcUtils.java @@ -31,7 +31,7 @@ import java.util.Collection; import java.util.HashSet; import java.util.Set; -class TestJdbcUtils +public class TestJdbcUtils { static void assertTablesExistence(Collection<String> expectedTables, @@ -60,7 +60,7 @@ class TestJdbcUtils return tableNames; } - static void shutdownDerby(String connectionURL) throws SQLException + public static void shutdownDerby(String connectionURL) throws SQLException { Connection connection = null; try http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/bc46f8b3/broker-plugins/jdbc-store/src/test/java/org/apache/qpid/server/virtualhost/jdbc/JDBCVirtualHostTest.java ---------------------------------------------------------------------- diff --git a/broker-plugins/jdbc-store/src/test/java/org/apache/qpid/server/virtualhost/jdbc/JDBCVirtualHostTest.java b/broker-plugins/jdbc-store/src/test/java/org/apache/qpid/server/virtualhost/jdbc/JDBCVirtualHostTest.java index 3af9000..3ceda39 100644 --- a/broker-plugins/jdbc-store/src/test/java/org/apache/qpid/server/virtualhost/jdbc/JDBCVirtualHostTest.java +++ b/broker-plugins/jdbc-store/src/test/java/org/apache/qpid/server/virtualhost/jdbc/JDBCVirtualHostTest.java @@ -27,21 +27,27 @@ import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.concurrent.atomic.AtomicBoolean; import org.apache.qpid.server.configuration.IllegalConfigurationException; import org.apache.qpid.server.configuration.updater.CurrentThreadTaskExecutor; import org.apache.qpid.server.logging.EventLogger; import org.apache.qpid.server.model.Broker; import org.apache.qpid.server.model.BrokerModel; +import org.apache.qpid.server.model.BrokerTestHelper; import org.apache.qpid.server.model.ConfiguredObject; import org.apache.qpid.server.model.ConfiguredObjectFactoryImpl; import org.apache.qpid.server.model.SystemConfig; +import org.apache.qpid.server.model.VirtualHost; import org.apache.qpid.server.model.VirtualHostNode; +import org.apache.qpid.server.store.jdbc.JDBCContainer; +import org.apache.qpid.server.store.jdbc.TestJdbcUtils; import org.apache.qpid.test.utils.QpidTestCase; public class JDBCVirtualHostTest extends QpidTestCase { private CurrentThreadTaskExecutor _taskExecutor; + private String _connectionURL; @Override public void setUp() throws Exception @@ -56,6 +62,10 @@ public class JDBCVirtualHostTest extends QpidTestCase { super.tearDown(); _taskExecutor.stopImmediately(); + if (_connectionURL != null) + { + TestJdbcUtils.shutdownDerby(_connectionURL); + } } public void testInvalidTableNamePrefix() throws Exception @@ -108,4 +118,21 @@ public class JDBCVirtualHostTest extends QpidTestCase } } } + + public void testDeleteAction() + { + _connectionURL = "jdbc:derby:memory:/" + getTestName(); + Map<String, Object> attributes = new HashMap<>(); + attributes.put(ConfiguredObject.NAME, getTestName()); + attributes.put(ConfiguredObject.TYPE, JDBCVirtualHostImpl.VIRTUAL_HOST_TYPE); + attributes.put("connectionUrl", _connectionURL + ";create=true"); + + final VirtualHost vh = BrokerTestHelper.createVirtualHost(attributes); + + AtomicBoolean deleted = new AtomicBoolean(); + ((JDBCContainer)vh).addDeleteAction(object -> deleted.set(true)); + + vh.delete(); + assertEquals("Delete action was not invoked", true, deleted.get()); + } } http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/bc46f8b3/broker-plugins/jdbc-store/src/test/java/org/apache/qpid/server/virtualhostnode/jdbc/JDBCVirtualHostNodeTest.java ---------------------------------------------------------------------- diff --git a/broker-plugins/jdbc-store/src/test/java/org/apache/qpid/server/virtualhostnode/jdbc/JDBCVirtualHostNodeTest.java b/broker-plugins/jdbc-store/src/test/java/org/apache/qpid/server/virtualhostnode/jdbc/JDBCVirtualHostNodeTest.java index 6160dee..b911a51 100644 --- a/broker-plugins/jdbc-store/src/test/java/org/apache/qpid/server/virtualhostnode/jdbc/JDBCVirtualHostNodeTest.java +++ b/broker-plugins/jdbc-store/src/test/java/org/apache/qpid/server/virtualhostnode/jdbc/JDBCVirtualHostNodeTest.java @@ -27,19 +27,25 @@ import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.concurrent.atomic.AtomicBoolean; import org.apache.qpid.server.configuration.IllegalConfigurationException; import org.apache.qpid.server.configuration.updater.CurrentThreadTaskExecutor; import org.apache.qpid.server.model.Broker; import org.apache.qpid.server.model.BrokerModel; +import org.apache.qpid.server.model.BrokerTestHelper; import org.apache.qpid.server.model.ConfiguredObject; import org.apache.qpid.server.model.ConfiguredObjectFactoryImpl; import org.apache.qpid.server.model.SystemConfig; +import org.apache.qpid.server.model.VirtualHostNode; +import org.apache.qpid.server.store.jdbc.JDBCContainer; +import org.apache.qpid.server.store.jdbc.TestJdbcUtils; import org.apache.qpid.test.utils.QpidTestCase; public class JDBCVirtualHostNodeTest extends QpidTestCase { private CurrentThreadTaskExecutor _taskExecutor; + private String _connectionURL; @Override public void setUp() throws Exception @@ -47,6 +53,10 @@ public class JDBCVirtualHostNodeTest extends QpidTestCase super.setUp(); _taskExecutor = new CurrentThreadTaskExecutor(); _taskExecutor.start(); + if (_connectionURL != null) + { + TestJdbcUtils.shutdownDerby(_connectionURL); + } } @Override @@ -100,4 +110,24 @@ public class JDBCVirtualHostNodeTest extends QpidTestCase } } } + + public void testDeleteAction() + { + _connectionURL = "jdbc:derby:memory:/" + getTestName(); + Map<String, Object> attributes = new HashMap<>(); + attributes.put(ConfiguredObject.NAME, getTestName()); + attributes.put(ConfiguredObject.TYPE, JDBCVirtualHostNodeImpl.VIRTUAL_HOST_NODE_TYPE); + attributes.put("connectionUrl", _connectionURL + ";create=true"); + + Broker<?> broker = BrokerTestHelper.createBrokerMock(); + final VirtualHostNode virtualHostNode = + broker.getObjectFactory().create(VirtualHostNode.class, attributes, broker); + virtualHostNode.start(); + + AtomicBoolean deleted = new AtomicBoolean(); + ((JDBCContainer) virtualHostNode).addDeleteAction(object -> deleted.set(true)); + + virtualHostNode.delete(); + assertEquals("Delete action was not invoked", true, deleted.get()); + } } --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org