You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by lq...@apache.org on 2015/10/14 18:05:39 UTC

svn commit: r1708637 - in /qpid/java/trunk/broker-core/src: main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java test/java/org/apache/qpid/server/virtualhost/AbstractVirtualHostTest.java

Author: lquack
Date: Wed Oct 14 16:05:39 2015
New Revision: 1708637

URL: http://svn.apache.org/viewvc?rev=1708637&view=rev
Log:
QPID-6283: [Java Broker] Prevent the FileSystemSpaceChecker from throwing java.lang.ArithmeticException / by zero when someone deletes the store.

Modified:
    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/virtualhost/AbstractVirtualHostTest.java

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=1708637&r1=1708636&r2=1708637&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 Wed Oct 14 16:05:39 2015
@@ -2086,6 +2086,11 @@ public abstract class AbstractVirtualHos
         @Override
         public void execute()
         {
+            if (!_fileSystem.exists())
+            {
+                _logger.warn("Cannot check file system for disk space because store path '{}' does not exist", _fileSystem.getPath());
+                return;
+            }
             long totalSpace = _fileSystem.getTotalSpace();
             long freeSpace = _fileSystem.getFreeSpace();
 

Modified: qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/virtualhost/AbstractVirtualHostTest.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/virtualhost/AbstractVirtualHostTest.java?rev=1708637&r1=1708636&r2=1708637&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/virtualhost/AbstractVirtualHostTest.java (original)
+++ qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/virtualhost/AbstractVirtualHostTest.java Wed Oct 14 16:05:39 2015
@@ -28,8 +28,19 @@ import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
+import java.io.File;
 import java.util.Collections;
 import java.util.Map;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+
+import ch.qos.logback.classic.Level;
+import ch.qos.logback.classic.spi.ILoggingEvent;
+import ch.qos.logback.core.filter.Filter;
+import ch.qos.logback.core.read.ListAppender;
+import ch.qos.logback.core.spi.FilterReply;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import org.apache.qpid.server.configuration.IllegalConfigurationException;
 import org.apache.qpid.server.configuration.updater.TaskExecutor;
@@ -46,6 +57,8 @@ import org.apache.qpid.server.security.S
 import org.apache.qpid.server.store.DurableConfigurationStore;
 import org.apache.qpid.server.store.MessageStore;
 import org.apache.qpid.test.utils.QpidTestCase;
+import org.apache.qpid.test.utils.TestFileUtils;
+import org.apache.qpid.util.FileUtils;
 
 public class AbstractVirtualHostTest extends QpidTestCase
 {
@@ -257,4 +270,55 @@ public class AbstractVirtualHostTest ext
         assertEquals("Unexpected state", State.ACTIVE, host.getState());
         host.close();
     }
+
+    // This indirectly tests QPID-6283
+    public void testFileSystemCheckWarnsWhenFileSystemDoesNotExist() throws Exception
+    {
+        Map<String,Object> attributes = Collections.<String, Object>singletonMap(AbstractVirtualHost.NAME,
+                                                                                 getTestName());
+        final MessageStore store = mock(MessageStore.class);
+        when(store.newMessageStoreReader()).thenReturn(mock(MessageStore.MessageStoreReader.class));
+        File nonExistingFile = TestFileUtils.createTempFile(this);
+        FileUtils.delete(nonExistingFile, false);
+        when(store.getStoreLocationAsFile()).thenReturn(nonExistingFile);
+        setTestSystemProperty("virtualhost.housekeepingCheckPeriod", "1");
+
+        AbstractVirtualHost host = new AbstractVirtualHost(attributes, _node)
+        {
+            @Override
+            protected MessageStore createMessageStore()
+            {
+                return  store;
+            }
+        };
+
+        final CountDownLatch warningReceivedLatch = new CountDownLatch(1);
+        String loggerName = AbstractVirtualHost.class.getName();
+        Level logLevel = Level.WARN;
+        watchForLogMessage(warningReceivedLatch, loggerName, logLevel);
+        host.open();
+        assertTrue("Did not receive warning", warningReceivedLatch.await(2, TimeUnit.SECONDS));
+    }
+
+    private void watchForLogMessage(final CountDownLatch warningReceivedLatch,
+                                    final String loggerName,
+                                    final Level logLevel)
+    {
+        ch.qos.logback.classic.Logger rootLogger = (ch.qos.logback.classic.Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME);
+        ListAppender<ILoggingEvent> appender = new ListAppender<>();
+        appender.addFilter(new Filter<ILoggingEvent>()
+        {
+            @Override
+            public FilterReply decide(final ILoggingEvent event)
+            {
+                if (event.getLoggerName().equals(loggerName) && event.getLevel().equals(logLevel))
+                {
+                    warningReceivedLatch.countDown();
+                }
+                return FilterReply.NEUTRAL;
+            }
+        });
+        appender.start();
+        rootLogger.addAppender(appender);
+    }
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org