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