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]

Reply via email to