Author: lquack
Date: Thu Jul 14 16:01:43 2016
New Revision: 1752684
URL: http://svn.apache.org/viewvc?rev=1752684&view=rev
Log:
QPID-7330: [Java Broker] delete PreferenceStore when VirtualHost is deleted
Modified:
qpid/java/trunk/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/AbstractBDBPreferenceStore.java
qpid/java/trunk/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/BDBConfigurationStore.java
qpid/java/trunk/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/BDBPreferenceStore.java
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/store/preferences/AbstractJDBCPreferenceStore.java
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/store/preferences/JsonFilePreferenceStore.java
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/store/preferences/NoopPreferenceStoreFactoryService.java
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/store/preferences/PreferenceStore.java
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java
qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/VirtualHostTest.java
qpid/java/trunk/broker-plugins/derby-store/src/main/java/org/apache/qpid/server/store/derby/DerbyConfigurationStore.java
qpid/java/trunk/broker-plugins/derby-store/src/test/java/org/apache/qpid/server/store/derby/DerbyPreferenceStoreTest.java
qpid/java/trunk/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/GenericJDBCConfigurationStore.java
Modified:
qpid/java/trunk/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/AbstractBDBPreferenceStore.java
URL:
http://svn.apache.org/viewvc/qpid/java/trunk/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/AbstractBDBPreferenceStore.java?rev=1752684&r1=1752683&r2=1752684&view=diff
==============================================================================
---
qpid/java/trunk/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/AbstractBDBPreferenceStore.java
(original)
+++
qpid/java/trunk/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/AbstractBDBPreferenceStore.java
Thu Jul 14 16:01:43 2016
@@ -35,7 +35,6 @@ import com.sleepycat.je.Cursor;
import com.sleepycat.je.Database;
import com.sleepycat.je.DatabaseConfig;
import com.sleepycat.je.DatabaseEntry;
-import com.sleepycat.je.DatabaseException;
import com.sleepycat.je.DatabaseNotFoundException;
import com.sleepycat.je.LockMode;
import com.sleepycat.je.OperationStatus;
@@ -190,6 +189,15 @@ abstract class AbstractBDBPreferenceStor
}
}
+ @Override
+ public void onDelete()
+ {
+ close();
+ doDelete();
+ }
+
+ protected abstract void doDelete();
+
protected abstract EnvironmentFacade getEnvironmentFacade();
protected abstract Logger getLogger();
Modified:
qpid/java/trunk/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/BDBConfigurationStore.java
URL:
http://svn.apache.org/viewvc/qpid/java/trunk/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/BDBConfigurationStore.java?rev=1752684&r1=1752683&r2=1752684&view=diff
==============================================================================
---
qpid/java/trunk/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/BDBConfigurationStore.java
(original)
+++
qpid/java/trunk/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/BDBConfigurationStore.java
Thu Jul 14 16:01:43 2016
@@ -626,6 +626,12 @@ public class BDBConfigurationStore imple
}
@Override
+ protected void doDelete()
+ {
+ // noop
+ }
+
+ @Override
public void close()
{
closeInternal();
Modified:
qpid/java/trunk/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/BDBPreferenceStore.java
URL:
http://svn.apache.org/viewvc/qpid/java/trunk/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/BDBPreferenceStore.java?rev=1752684&r1=1752683&r2=1752684&view=diff
==============================================================================
---
qpid/java/trunk/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/BDBPreferenceStore.java
(original)
+++
qpid/java/trunk/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/BDBPreferenceStore.java
Thu Jul 14 16:01:43 2016
@@ -19,6 +19,7 @@
package org.apache.qpid.server.store.berkeleydb;
+import java.io.File;
import java.util.Collection;
import java.util.Map;
@@ -30,16 +31,19 @@ import org.apache.qpid.server.model.Conf
import org.apache.qpid.server.store.StoreException;
import org.apache.qpid.server.store.preferences.PreferenceRecord;
import org.apache.qpid.server.store.preferences.PreferenceStoreUpdater;
+import org.apache.qpid.util.FileUtils;
public class BDBPreferenceStore extends AbstractBDBPreferenceStore
{
private static final Logger LOGGER =
LoggerFactory.getLogger(BDBPreferenceStore.class);
+ private final String _storePath;
private final EnvironmentFacadeFactory _environmentFactory;
private volatile EnvironmentFacade _environmentFacade;
public BDBPreferenceStore(final ConfiguredObject<?> parent, final String
storePath)
{
+ _storePath = storePath;
_environmentFactory = new EnvironmentFacadeFactory()
{
@Override
@@ -95,6 +99,24 @@ public class BDBPreferenceStore extends
}
@Override
+ protected void doDelete()
+ {
+ if (_storePath != null)
+ {
+ if (LOGGER.isDebugEnabled())
+ {
+ LOGGER.debug("Deleting preference store " + _storePath);
+ }
+
+ File preferenceStoreFile = new File(_storePath);
+ if (!FileUtils.delete(preferenceStoreFile, true))
+ {
+ LOGGER.info("Failed to delete the preference store at location
" + _storePath);
+ }
+ }
+ }
+
+ @Override
public void close()
{
if (closeInternal())
Modified:
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/store/preferences/AbstractJDBCPreferenceStore.java
URL:
http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/store/preferences/AbstractJDBCPreferenceStore.java?rev=1752684&r1=1752683&r2=1752684&view=diff
==============================================================================
---
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/store/preferences/AbstractJDBCPreferenceStore.java
(original)
+++
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/store/preferences/AbstractJDBCPreferenceStore.java
Thu Jul 14 16:01:43 2016
@@ -188,6 +188,19 @@ public abstract class AbstractJDBCPrefer
_storeState.set(StoreState.CLOSED);
}
+ protected void dropTables(final Connection connection) throws SQLException
+ {
+ try (Statement dropTableStatement = connection.createStatement())
+ {
+ dropTableStatement.execute("DROP TABLE " + PREFERENCES_TABLE_NAME);
+ dropTableStatement.execute("DROP TABLE " +
PREFERENCES_VERSION_TABLE_NAME);
+ }
+ catch (SQLException e)
+ {
+ getLogger().warn("Failed to drop preferences table", e);
+ }
+ }
+
protected abstract void doClose();
protected abstract Logger getLogger();
Modified:
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/store/preferences/JsonFilePreferenceStore.java
URL:
http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/store/preferences/JsonFilePreferenceStore.java?rev=1752684&r1=1752683&r2=1752684&view=diff
==============================================================================
---
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/store/preferences/JsonFilePreferenceStore.java
(original)
+++
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/store/preferences/JsonFilePreferenceStore.java
Thu Jul 14 16:01:43 2016
@@ -176,6 +176,13 @@ public class JsonFilePreferenceStore ext
}
@Override
+ public void onDelete()
+ {
+ close();
+ delete(_storePath);
+ }
+
+ @Override
protected ObjectMapper getSerialisationObjectMapper()
{
return _objectMapper;
Modified:
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/store/preferences/NoopPreferenceStoreFactoryService.java
URL:
http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/store/preferences/NoopPreferenceStoreFactoryService.java?rev=1752684&r1=1752683&r2=1752684&view=diff
==============================================================================
---
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/store/preferences/NoopPreferenceStoreFactoryService.java
(original)
+++
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/store/preferences/NoopPreferenceStoreFactoryService.java
Thu Jul 14 16:01:43 2016
@@ -64,6 +64,12 @@ public class NoopPreferenceStoreFactoryS
{
}
+
+ @Override
+ public void onDelete()
+ {
+
+ }
};
}
Modified:
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/store/preferences/PreferenceStore.java
URL:
http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/store/preferences/PreferenceStore.java?rev=1752684&r1=1752683&r2=1752684&view=diff
==============================================================================
---
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/store/preferences/PreferenceStore.java
(original)
+++
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/store/preferences/PreferenceStore.java
Thu Jul 14 16:01:43 2016
@@ -33,4 +33,6 @@ public interface PreferenceStore
void updateOrCreate(Collection<PreferenceRecord> preferenceRecords);
void replace(Collection<UUID> preferenceRecordsToRemove,
Collection<PreferenceRecord> preferenceRecordsToAdd);
+
+ void onDelete();
}
Modified:
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java
URL:
http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java?rev=1752684&r1=1752683&r2=1752684&view=diff
==============================================================================
---
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java
(original)
+++
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java
Thu Jul 14 16:01:43 2016
@@ -1073,13 +1073,9 @@ public abstract class AbstractVirtualHos
@Override
protected void onClose()
{
- if (_preferenceStore != null)
- {
- _preferenceStore.close();
- }
-
_dtxRegistry.close();
closeMessageStore();
+ closePreferenceStore();
shutdownHouseKeeping();
closeNetworkConnectionScheduler();
_eventLogger.message(VirtualHostMessages.CLOSED(getName()));
@@ -1660,7 +1656,7 @@ public abstract class AbstractVirtualHos
shutdownHouseKeeping();
closeNetworkConnectionScheduler();
closeMessageStore();
- _preferenceStore.close();
+ closePreferenceStore();
setState(State.STOPPED);
stopLogging(loggers);
@@ -1668,6 +1664,15 @@ public abstract class AbstractVirtualHos
});
}
+ private void closePreferenceStore()
+ {
+ PreferenceStore ps = _preferenceStore;
+ if (ps != null)
+ {
+ ps.close();
+ }
+ }
+
private void stopLogging(Collection<VirtualHostLogger> loggers)
{
for (VirtualHostLogger logger : loggers)
@@ -1697,6 +1702,18 @@ public abstract class AbstractVirtualHos
_logger.warn("Exception occurred on message
store deletion", e);
}
}
+ PreferenceStore ps = _preferenceStore;
+ if (ps != null)
+ {
+ try
+ {
+ ps.onDelete();
+ }
+ catch (Exception e)
+ {
+ _logger.warn("Exception occurred on preference
store deletion", e);
+ }
+ }
deleted();
setState(State.DELETED);
}
Modified:
qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/VirtualHostTest.java
URL:
http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/VirtualHostTest.java?rev=1752684&r1=1752683&r2=1752684&view=diff
==============================================================================
---
qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/VirtualHostTest.java
(original)
+++
qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/VirtualHostTest.java
Thu Jul 14 16:01:43 2016
@@ -65,6 +65,7 @@ import org.apache.qpid.server.store.Even
import org.apache.qpid.server.store.EventListener;
import org.apache.qpid.server.store.handler.ConfiguredObjectRecordHandler;
import org.apache.qpid.server.store.preferences.PreferenceStore;
+import org.apache.qpid.server.store.preferences.PreferenceStoreUpdater;
import org.apache.qpid.server.transport.AMQPConnection;
import org.apache.qpid.server.transport.AbstractAMQPConnection;
import org.apache.qpid.server.util.Action;
@@ -81,6 +82,7 @@ public class VirtualHostTest extends Qpi
private DurableConfigurationStore _configStore;
private VirtualHost<?> _virtualHost;
private StoreConfigurationChangeListener _storeConfigurationChangeListener;
+ private PreferenceStore _preferenceStore;
@Override
protected void setUp() throws Exception
@@ -114,7 +116,8 @@ public class VirtualHostTest extends Qpi
when(_virtualHostNode.getModel()).thenReturn(objectFactory.getModel());
when(_virtualHostNode.getTaskExecutor()).thenReturn(_taskExecutor);
when(_virtualHostNode.getChildExecutor()).thenReturn(_taskExecutor);
-
when(_virtualHostNode.createPreferenceStore()).thenReturn(mock(PreferenceStore.class));
+ _preferenceStore = mock(PreferenceStore.class);
+
when(_virtualHostNode.createPreferenceStore()).thenReturn(_preferenceStore);
}
@Override
@@ -161,6 +164,7 @@ public class VirtualHostTest extends Qpi
assertEquals("Unexpected state", State.DELETED,
virtualHost.getState());
verify(_configStore).remove(matchesRecord(virtualHost.getId(),
virtualHost.getType()));
+ verify(_preferenceStore).onDelete();
}
public void testStopAndStartVirtualHost()
@@ -172,12 +176,14 @@ public class VirtualHostTest extends Qpi
virtualHost.stop();
assertEquals("Unexpected state", State.STOPPED,
virtualHost.getState());
+ verify(_preferenceStore).close();
virtualHost.start();
assertEquals("Unexpected state", State.ACTIVE, virtualHost.getState());
verify(_configStore, times(1)).update(eq(true),
matchesRecord(virtualHost.getId(), virtualHost.getType()));
verify(_configStore, times(2)).update(eq(false),
matchesRecord(virtualHost.getId(), virtualHost.getType()));
+ verify(_preferenceStore,
times(2)).openAndLoad(any(PreferenceStoreUpdater.class));
}
public void testRestartingVirtualHostRecoversChildren()
Modified:
qpid/java/trunk/broker-plugins/derby-store/src/main/java/org/apache/qpid/server/store/derby/DerbyConfigurationStore.java
URL:
http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/derby-store/src/main/java/org/apache/qpid/server/store/derby/DerbyConfigurationStore.java?rev=1752684&r1=1752683&r2=1752684&view=diff
==============================================================================
---
qpid/java/trunk/broker-plugins/derby-store/src/main/java/org/apache/qpid/server/store/derby/DerbyConfigurationStore.java
(original)
+++
qpid/java/trunk/broker-plugins/derby-store/src/main/java/org/apache/qpid/server/store/derby/DerbyConfigurationStore.java
Thu Jul 14 16:01:43 2016
@@ -268,6 +268,19 @@ public class DerbyConfigurationStore ext
}
@Override
+ public void onDelete()
+ {
+ try
+ {
+ dropTables(DerbyConfigurationStore.this.getConnection());
+ }
+ catch (SQLException e)
+ {
+ getLogger().warn("Could not drop preference database tables on
deletion", e);
+ }
+ }
+
+ @Override
public void doClose()
{
// noop
Modified:
qpid/java/trunk/broker-plugins/derby-store/src/test/java/org/apache/qpid/server/store/derby/DerbyPreferenceStoreTest.java
URL:
http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/derby-store/src/test/java/org/apache/qpid/server/store/derby/DerbyPreferenceStoreTest.java?rev=1752684&r1=1752683&r2=1752684&view=diff
==============================================================================
---
qpid/java/trunk/broker-plugins/derby-store/src/test/java/org/apache/qpid/server/store/derby/DerbyPreferenceStoreTest.java
(original)
+++
qpid/java/trunk/broker-plugins/derby-store/src/test/java/org/apache/qpid/server/store/derby/DerbyPreferenceStoreTest.java
Thu Jul 14 16:01:43 2016
@@ -304,6 +304,12 @@ public class DerbyPreferenceStoreTest ex
}
@Override
+ public void onDelete()
+ {
+ // noop
+ }
+
+ @Override
protected void doClose()
{
// noop
Modified:
qpid/java/trunk/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/GenericJDBCConfigurationStore.java
URL:
http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/GenericJDBCConfigurationStore.java?rev=1752684&r1=1752683&r2=1752684&view=diff
==============================================================================
---
qpid/java/trunk/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/GenericJDBCConfigurationStore.java
(original)
+++
qpid/java/trunk/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/GenericJDBCConfigurationStore.java
Thu Jul 14 16:01:43 2016
@@ -346,6 +346,19 @@ public class GenericJDBCConfigurationSto
}
@Override
+ public void onDelete()
+ {
+ try
+ {
+ dropTables(GenericJDBCConfigurationStore.this.getConnection());
+ }
+ catch (SQLException e)
+ {
+ getLogger().warn("Could not drop preference database tables on
deletion", e);
+ }
+ }
+
+ @Override
public void doClose()
{
// noop
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]