You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by or...@apache.org on 2013/04/29 16:44:11 UTC
svn commit: r1477110 - in /qpid/trunk/qpid/java:
bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/
bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/
broker/src/main/java/org/apache/qpid/server/model/adapter/
broker/src/main/...
Author: orudyy
Date: Mon Apr 29 14:44:11 2013
New Revision: 1477110
URL: http://svn.apache.org/r1477110
Log:
QPID-4639: Improve functionality to delete store on virtual host deletion
Added:
qpid/trunk/qpid/java/broker/src/test/java/org/apache/qpid/server/store/MessageStoreTestCase.java
qpid/trunk/qpid/java/broker/src/test/java/org/apache/qpid/server/store/derby/DerbyMessageStoreTest.java
qpid/trunk/qpid/java/broker/src/test/java/org/apache/qpid/server/store/jdbc/
qpid/trunk/qpid/java/broker/src/test/java/org/apache/qpid/server/store/jdbc/JDBCMessageStoreTest.java
Modified:
qpid/trunk/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/AbstractBDBMessageStore.java
qpid/trunk/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/BDBMessageStoreTest.java
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAdapter.java
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/store/AbstractJDBCMessageStore.java
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/store/MessageStore.java
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/store/NullMessageStore.java
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/store/derby/DerbyMessageStore.java
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/store/jdbc/JDBCMessageStore.java
qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/server/store/SlowMessageStore.java
Modified: qpid/trunk/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/AbstractBDBMessageStore.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/AbstractBDBMessageStore.java?rev=1477110&r1=1477109&r2=1477110&view=diff
==============================================================================
--- qpid/trunk/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/AbstractBDBMessageStore.java (original)
+++ qpid/trunk/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/AbstractBDBMessageStore.java Mon Apr 29 14:44:11 2013
@@ -73,6 +73,7 @@ import org.apache.qpid.server.store.berk
import org.apache.qpid.server.store.berkeleydb.tuple.UUIDTupleBinding;
import org.apache.qpid.server.store.berkeleydb.tuple.XidBinding;
import org.apache.qpid.server.store.berkeleydb.upgrade.Upgrader;
+import org.apache.qpid.util.FileUtils;
public abstract class AbstractBDBMessageStore implements MessageStore
{
@@ -1801,4 +1802,25 @@ public abstract class AbstractBDBMessage
+ event.getThreadName() + "'", event.getException());
}
}
+
+ @Override
+ public void onDelete()
+ {
+ if (LOGGER.isDebugEnabled())
+ {
+ LOGGER.debug("Deleting store " + _storeLocation);
+ }
+
+ if (_storeLocation != null)
+ {
+ File location = new File(_storeLocation);
+ if (location.exists())
+ {
+ if (!FileUtils.delete(location, true))
+ {
+ LOGGER.error("Cannot delete " + _storeLocation);
+ }
+ }
+ }
+ }
}
Modified: qpid/trunk/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/BDBMessageStoreTest.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/BDBMessageStoreTest.java?rev=1477110&r1=1477109&r2=1477110&view=diff
==============================================================================
--- qpid/trunk/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/BDBMessageStoreTest.java (original)
+++ qpid/trunk/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/BDBMessageStoreTest.java Mon Apr 29 14:44:11 2013
@@ -20,6 +20,7 @@
*/
package org.apache.qpid.server.store.berkeleydb;
+import java.io.File;
import java.nio.ByteBuffer;
import java.util.Arrays;
import java.util.List;
@@ -474,6 +475,22 @@ public class BDBMessageStoreTest extends
assertEquals("Second Message is incorrect", 23L, val.longValue());
}
+ public void testOnDelete() throws Exception
+ {
+ MessageStore log = getVirtualHost().getMessageStore();
+ AbstractBDBMessageStore bdbStore = assertBDBStore(log);
+ String storeLocation = bdbStore.getStoreLocation();
+
+ File location = new File(storeLocation);
+ assertTrue("Store does not exist at " + storeLocation, location.exists());
+
+ bdbStore.close();
+ assertTrue("Store does not exist at " + storeLocation, location.exists());
+
+ bdbStore.onDelete();
+ assertFalse("Store exists at " + storeLocation, location.exists());
+ }
+
/**
* Tests transaction rollback after a commit has occurred by utilising the
* enqueue and dequeue methods available in the TransactionLog interface
Modified: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAdapter.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAdapter.java?rev=1477110&r1=1477109&r2=1477110&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAdapter.java (original)
+++ qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAdapter.java Mon Apr 29 14:44:11 2013
@@ -80,13 +80,11 @@ import org.apache.qpid.server.txn.Server
import org.apache.qpid.server.util.MapValueConverter;
import org.apache.qpid.server.virtualhost.VirtualHostImpl;
import org.apache.qpid.server.virtualhost.VirtualHostRegistry;
-import org.apache.qpid.util.FileUtils;
public final class VirtualHostAdapter extends AbstractAdapter implements VirtualHost, ExchangeRegistry.RegistryChangeListener,
QueueRegistry.RegistryChangeListener,
IConnectionRegistry.RegistryChangeListener
{
-
private static final Logger LOGGER = Logger.getLogger(VirtualHostAdapter.class);
@SuppressWarnings("serial")
@@ -1004,24 +1002,21 @@ public final class VirtualHostAdapter ex
{
throw new IntegrityViolationException("Cannot delete default virtual host '" + hostName + "'");
}
- String storePath = (String)getAttribute(STORE_PATH);
if (_virtualHost != null && _virtualHost.getState() == org.apache.qpid.server.virtualhost.State.ACTIVE)
{
setDesiredState(currentState, State.STOPPED);
}
+ MessageStore ms = _virtualHost.getMessageStore();
_virtualHost = null;
- setAttribute(VirtualHost.STATE, getActualState(), State.DELETED);
- if (storePath != null)
+ try
{
- if (LOGGER.isDebugEnabled())
- {
- LOGGER.debug("Deleting store at " + storePath);
- }
- if (!FileUtils.delete(new File(storePath), true))
- {
- LOGGER.warn("Cannot delete " + storePath);
- }
+ ms.onDelete();
}
+ catch(Exception e)
+ {
+ LOGGER.warn("Exception occured on store deletion", e);
+ }
+ setAttribute(VirtualHost.STATE, getActualState(), State.DELETED);
return true;
}
return false;
Modified: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/store/AbstractJDBCMessageStore.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/store/AbstractJDBCMessageStore.java?rev=1477110&r1=1477109&r2=1477110&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/store/AbstractJDBCMessageStore.java (original)
+++ qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/store/AbstractJDBCMessageStore.java Mon Apr 29 14:44:11 2013
@@ -72,6 +72,9 @@ abstract public class AbstractJDBCMessag
private static final String CONFIGURED_OBJECTS_TABLE_NAME = "QPID_CONFIGURED_OBJECTS";
+ public static String[] ALL_TABLES = new String[] { DB_VERSION_TABLE_NAME, LINKS_TABLE_NAME, BRIDGES_TABLE_NAME, XID_ACTIONS_TABLE_NAME,
+ XID_TABLE_NAME, QUEUE_ENTRY_TABLE_NAME, MESSAGE_CONTENT_TABLE_NAME, META_DATA_TABLE_NAME, CONFIGURED_OBJECTS_TABLE_NAME };
+
private static final int DB_VERSION = 6;
private final AtomicLong _messageId = new AtomicLong(0);
@@ -167,6 +170,7 @@ abstract public class AbstractJDBCMessag
private ConfiguredObjectHelper _configuredObjectHelper = new ConfiguredObjectHelper();
+
@Override
public void configureConfigStore(String name,
ConfigurationRecoveryHandler configRecoveryHandler,
@@ -2037,4 +2041,37 @@ abstract public class AbstractJDBCMessag
protected abstract void storedSizeChange(int storeSizeIncrease);
+
+ @Override
+ public void onDelete()
+ {
+ try
+ {
+ Connection conn = newAutoCommitConnection();
+ try
+ {
+ for (String tableName : ALL_TABLES)
+ {
+ Statement stmt = conn.createStatement();
+ try
+ {
+ stmt.execute("DROP TABLE " + tableName);
+ }
+ finally
+ {
+ stmt.close();
+ }
+ }
+ }
+ finally
+ {
+ conn.close();
+ }
+ }
+ catch(SQLException e)
+ {
+ getLogger().error("Exception while deleting store tables", e);
+ }
+ }
+
}
Modified: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/store/MessageStore.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/store/MessageStore.java?rev=1477110&r1=1477109&r2=1477110&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/store/MessageStore.java (original)
+++ qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/store/MessageStore.java Mon Apr 29 14:44:11 2013
@@ -69,4 +69,6 @@ public interface MessageStore extends Du
String getStoreLocation();
String getStoreType();
+
+ void onDelete();
}
Modified: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/store/NullMessageStore.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/store/NullMessageStore.java?rev=1477110&r1=1477109&r2=1477110&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/store/NullMessageStore.java (original)
+++ qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/store/NullMessageStore.java Mon Apr 29 14:44:11 2013
@@ -121,4 +121,8 @@ public abstract class NullMessageStore i
return null;
}
+ @Override
+ public void onDelete()
+ {
+ }
}
\ No newline at end of file
Modified: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/store/derby/DerbyMessageStore.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/store/derby/DerbyMessageStore.java?rev=1477110&r1=1477109&r2=1477110&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/store/derby/DerbyMessageStore.java (original)
+++ qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/store/derby/DerbyMessageStore.java Mon Apr 29 14:44:11 2013
@@ -39,6 +39,7 @@ import org.apache.qpid.server.store.Even
import org.apache.qpid.server.store.EventListener;
import org.apache.qpid.server.store.MessageStore;
import org.apache.qpid.server.store.MessageStoreConstants;
+import org.apache.qpid.util.FileUtils;
/**
* An implementation of a {@link MessageStore} that uses Apache Derby as the persistence
@@ -56,7 +57,7 @@ public class DerbyMessageStore extends A
private static final String TABLE_EXISTANCE_QUERY = "SELECT 1 FROM SYS.SYSTABLES WHERE TABLENAME = ?";
- private static final String DERBY_SINGLE_DB_SHUTDOWN_CODE = "08006";
+ public static final String DERBY_SINGLE_DB_SHUTDOWN_CODE = "08006";
public static final String TYPE = "DERBY";
@@ -418,4 +419,29 @@ public class DerbyMessageStore extends A
return TYPE;
}
+ @Override
+ public void onDelete()
+ {
+ if (_logger.isDebugEnabled())
+ {
+ _logger.debug("Deleting store " + _storeLocation);
+ }
+
+ if (MEMORY_STORE_LOCATION.equals(_storeLocation))
+ {
+ return;
+ }
+
+ if (_storeLocation != null)
+ {
+ File location = new File(_storeLocation);
+ if (location.exists())
+ {
+ if (!FileUtils.delete(location, true))
+ {
+ _logger.error("Cannot delete " + _storeLocation);
+ }
+ }
+ }
+ }
}
Modified: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/store/jdbc/JDBCMessageStore.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/store/jdbc/JDBCMessageStore.java?rev=1477110&r1=1477109&r2=1477110&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/store/jdbc/JDBCMessageStore.java (original)
+++ qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/store/jdbc/JDBCMessageStore.java Mon Apr 29 14:44:11 2013
@@ -24,7 +24,6 @@ package org.apache.qpid.server.store.jdb
import java.sql.Blob;
import java.sql.ResultSet;
import java.sql.SQLException;
-import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
Added: qpid/trunk/qpid/java/broker/src/test/java/org/apache/qpid/server/store/MessageStoreTestCase.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/test/java/org/apache/qpid/server/store/MessageStoreTestCase.java?rev=1477110&view=auto
==============================================================================
--- qpid/trunk/qpid/java/broker/src/test/java/org/apache/qpid/server/store/MessageStoreTestCase.java (added)
+++ qpid/trunk/qpid/java/broker/src/test/java/org/apache/qpid/server/store/MessageStoreTestCase.java Mon Apr 29 14:44:11 2013
@@ -0,0 +1,93 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.qpid.server.store;
+
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.isA;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import org.apache.commons.configuration.Configuration;
+import org.apache.commons.configuration.PropertiesConfiguration;
+import org.apache.qpid.server.store.ConfigurationRecoveryHandler.BindingRecoveryHandler;
+import org.apache.qpid.server.store.ConfigurationRecoveryHandler.ExchangeRecoveryHandler;
+import org.apache.qpid.server.store.ConfigurationRecoveryHandler.QueueRecoveryHandler;
+import org.apache.qpid.server.store.MessageStoreRecoveryHandler.StoredMessageRecoveryHandler;
+import org.apache.qpid.test.utils.QpidTestCase;
+
+public abstract class MessageStoreTestCase extends QpidTestCase
+{
+ private ConfigurationRecoveryHandler _recoveryHandler;
+ private QueueRecoveryHandler _queueRecoveryHandler;
+ private ExchangeRecoveryHandler _exchangeRecoveryHandler;
+ private BindingRecoveryHandler _bindingRecoveryHandler;
+ private MessageStoreRecoveryHandler _messageStoreRecoveryHandler;
+ private StoredMessageRecoveryHandler _storedMessageRecoveryHandler;
+ private TransactionLogRecoveryHandler _logRecoveryHandler;
+ private TransactionLogRecoveryHandler.QueueEntryRecoveryHandler _queueEntryRecoveryHandler;
+ private TransactionLogRecoveryHandler.DtxRecordRecoveryHandler _dtxRecordRecoveryHandler;
+
+ private MessageStore _store;
+ private Configuration _storeConfiguration;
+
+ public void setUp() throws Exception
+ {
+ super.setUp();
+
+ _recoveryHandler = mock(ConfigurationRecoveryHandler.class);
+ _queueRecoveryHandler = mock(QueueRecoveryHandler.class);
+ _exchangeRecoveryHandler = mock(ExchangeRecoveryHandler.class);
+ _bindingRecoveryHandler = mock(BindingRecoveryHandler.class);
+ _storedMessageRecoveryHandler = mock(StoredMessageRecoveryHandler.class);
+ _logRecoveryHandler = mock(TransactionLogRecoveryHandler.class);
+ _messageStoreRecoveryHandler = mock(MessageStoreRecoveryHandler.class);
+ _queueEntryRecoveryHandler = mock(TransactionLogRecoveryHandler.QueueEntryRecoveryHandler.class);
+ _dtxRecordRecoveryHandler = mock(TransactionLogRecoveryHandler.DtxRecordRecoveryHandler.class);
+
+ when(_messageStoreRecoveryHandler.begin()).thenReturn(_storedMessageRecoveryHandler);
+ when(_recoveryHandler.begin(isA(MessageStore.class))).thenReturn(_exchangeRecoveryHandler);
+ when(_exchangeRecoveryHandler.completeExchangeRecovery()).thenReturn(_queueRecoveryHandler);
+ when(_queueRecoveryHandler.completeQueueRecovery()).thenReturn(_bindingRecoveryHandler);
+ when(_logRecoveryHandler.begin(any(MessageStore.class))).thenReturn(_queueEntryRecoveryHandler);
+ when(_queueEntryRecoveryHandler.completeQueueEntryRecovery()).thenReturn(_dtxRecordRecoveryHandler);
+
+ _storeConfiguration = new PropertiesConfiguration();
+ setUpStoreConfiguration(_storeConfiguration);
+
+ _store = createMessageStore();
+ _store.configureConfigStore(getTestName(), _recoveryHandler, _storeConfiguration);
+ _store.configureMessageStore(getTestName(), _messageStoreRecoveryHandler, _logRecoveryHandler, _storeConfiguration);
+ }
+
+ protected abstract void setUpStoreConfiguration(Configuration storeConfiguration) throws Exception;
+
+ protected abstract MessageStore createMessageStore();
+
+ public MessageStore getStore()
+ {
+ return _store;
+ }
+
+ public Configuration getStoreConfiguration()
+ {
+ return _storeConfiguration;
+ }
+}
Added: qpid/trunk/qpid/java/broker/src/test/java/org/apache/qpid/server/store/derby/DerbyMessageStoreTest.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/test/java/org/apache/qpid/server/store/derby/DerbyMessageStoreTest.java?rev=1477110&view=auto
==============================================================================
--- qpid/trunk/qpid/java/broker/src/test/java/org/apache/qpid/server/store/derby/DerbyMessageStoreTest.java (added)
+++ qpid/trunk/qpid/java/broker/src/test/java/org/apache/qpid/server/store/derby/DerbyMessageStoreTest.java Mon Apr 29 14:44:11 2013
@@ -0,0 +1,82 @@
+/*
+ *
+ * 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.derby;
+
+import java.io.File;
+
+import org.apache.commons.configuration.Configuration;
+import org.apache.qpid.server.store.MessageStore;
+import org.apache.qpid.server.store.MessageStoreTestCase;
+import org.apache.qpid.util.FileUtils;
+
+public class DerbyMessageStoreTest extends MessageStoreTestCase
+{
+ private String _storeLocation;
+
+ @Override
+ public void tearDown() throws Exception
+ {
+ try
+ {
+ deleteStoreIfExists();
+ }
+ finally
+ {
+ super.tearDown();
+ }
+ }
+
+ public void testOnDelete() throws Exception
+ {
+ File location = new File(_storeLocation);
+ assertTrue("Store does not exist at " + _storeLocation, location.exists());
+
+ getStore().close();
+ assertTrue("Store does not exist at " + _storeLocation, location.exists());
+
+ getStore().onDelete();
+ assertFalse("Store exists at " + _storeLocation, location.exists());
+ }
+
+ @Override
+ protected void setUpStoreConfiguration(Configuration storeConfiguration) throws Exception
+ {
+ _storeLocation = TMP_FOLDER + File.separator + getTestName();
+ storeConfiguration.setProperty("environment-path", _storeLocation);
+ deleteStoreIfExists();
+ }
+
+ private void deleteStoreIfExists()
+ {
+ File location = new File(_storeLocation);
+ if (location.exists())
+ {
+ FileUtils.delete(location, true);
+ }
+ }
+
+ @Override
+ protected MessageStore createMessageStore()
+ {
+ return new DerbyMessageStore();
+ }
+
+}
Added: qpid/trunk/qpid/java/broker/src/test/java/org/apache/qpid/server/store/jdbc/JDBCMessageStoreTest.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/test/java/org/apache/qpid/server/store/jdbc/JDBCMessageStoreTest.java?rev=1477110&view=auto
==============================================================================
--- qpid/trunk/qpid/java/broker/src/test/java/org/apache/qpid/server/store/jdbc/JDBCMessageStoreTest.java (added)
+++ qpid/trunk/qpid/java/broker/src/test/java/org/apache/qpid/server/store/jdbc/JDBCMessageStoreTest.java Mon Apr 29 14:44:11 2013
@@ -0,0 +1,149 @@
+/*
+ *
+ * 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.jdbc;
+
+import java.sql.Connection;
+import java.sql.DatabaseMetaData;
+import java.sql.DriverManager;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.apache.commons.configuration.Configuration;
+import org.apache.qpid.server.store.MessageStore;
+import org.apache.qpid.server.store.MessageStoreTestCase;
+import org.apache.qpid.server.store.derby.DerbyMessageStore;
+
+public class JDBCMessageStoreTest extends MessageStoreTestCase
+{
+ private String _connectionURL;
+
+ @Override
+ public void tearDown() throws Exception
+ {
+ try
+ {
+ shutdownDerby();
+ }
+ finally
+ {
+ super.tearDown();
+ }
+ }
+
+ public void testOnDelete() throws Exception
+ {
+ String[] expectedTables = JDBCMessageStore.ALL_TABLES;
+ assertTablesExist(expectedTables, true);
+ getStore().close();
+ assertTablesExist(expectedTables, true);
+ getStore().onDelete();
+ assertTablesExist(expectedTables, false);
+ }
+
+ @Override
+ protected void setUpStoreConfiguration(Configuration storeConfiguration) throws Exception
+ {
+ _connectionURL = "jdbc:derby:memory:/" + getTestName() + ";create=true";
+ storeConfiguration.addProperty("connectionUrl", _connectionURL);
+ }
+
+ @Override
+ protected MessageStore createMessageStore()
+ {
+ return new JDBCMessageStore();
+ }
+
+ private void assertTablesExist(String[] expectedTables, boolean exists) throws SQLException
+ {
+ Set<String> existingTables = getTableNames();
+ for (String tableName : expectedTables)
+ {
+ assertEquals("Table " + tableName + (exists ? " is not found" : " actually exist"), exists,
+ existingTables.contains(tableName));
+ }
+ }
+
+ private Set<String> getTableNames() throws SQLException
+ {
+ Set<String> tableNames = new HashSet<String>();
+ Connection conn = null;
+ try
+ {
+ conn = openConnection();
+ DatabaseMetaData metaData = conn.getMetaData();
+ ResultSet tables = metaData.getTables(null, null, null, new String[] { "TABLE" });
+ try
+ {
+ while (tables.next())
+ {
+ tableNames.add(tables.getString("TABLE_NAME"));
+ }
+ }
+ finally
+ {
+ tables.close();
+ }
+ }
+ finally
+ {
+ if (conn != null)
+ {
+ conn.close();
+ }
+ }
+ return tableNames;
+ }
+
+ private Connection openConnection() throws SQLException
+ {
+ return DriverManager.getConnection(_connectionURL);
+ }
+
+
+ private void shutdownDerby() throws SQLException
+ {
+ Connection connection = null;
+ try
+ {
+ connection = DriverManager.getConnection("jdbc:derby:memory:/" + getTestName() + ";shutdown=true");
+ }
+ catch(SQLException e)
+ {
+ if (e.getSQLState().equalsIgnoreCase(DerbyMessageStore.DERBY_SINGLE_DB_SHUTDOWN_CODE))
+ {
+ //expected and represents a clean shutdown of this database only, do nothing.
+ }
+ else
+ {
+ throw e;
+ }
+ }
+ finally
+ {
+ if (connection != null)
+ {
+ connection.close();
+ }
+ }
+ }
+}
Modified: qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/server/store/SlowMessageStore.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/server/store/SlowMessageStore.java?rev=1477110&r1=1477109&r2=1477110&view=diff
==============================================================================
--- qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/server/store/SlowMessageStore.java (original)
+++ qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/server/store/SlowMessageStore.java Mon Apr 29 14:44:11 2013
@@ -344,4 +344,10 @@ public class SlowMessageStore implements
return "SLOW";
}
+ @Override
+ public void onDelete()
+ {
+ _realStore.onDelete();
+ }
+
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org