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/16 12:09:09 UTC

svn commit: r1708943 - 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: Fri Oct 16 10:09:09 2015
New Revision: 1708943

URL: http://svn.apache.org/viewvc?rev=1708943&view=rev
Log:
QPID-6283: [Java Broker] Close possibility for DivByZero in FileSystemSizeChecker

Addressed review comments from Keith Wall.
This closes the possibility of a DivByZero in the unlucky case where the store gets deleted just before the call to getTotalSpace()

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=1708943&r1=1708942&r2=1708943&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 Fri Oct 16 10:09:09 2015
@@ -2086,13 +2086,14 @@ public abstract class AbstractVirtualHos
         @Override
         public void execute()
         {
-            if (!_fileSystem.exists())
+            long totalSpace = _fileSystem.getTotalSpace();
+            long freeSpace = _fileSystem.getFreeSpace();
+
+            if (totalSpace == 0)
             {
-                _logger.warn("Cannot check file system for disk space because store path '{}' does not exist", _fileSystem.getPath());
+                _logger.warn("Cannot check file system for disk space because store path '{}' is not valid", _fileSystem.getPath());
                 return;
             }
-            long totalSpace = _fileSystem.getTotalSpace();
-            long freeSpace = _fileSystem.getFreeSpace();
 
             long usagePercent = (100l * (totalSpace - freeSpace)) / totalSpace;
 

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=1708943&r1=1708942&r2=1708943&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 Fri Oct 16 10:09:09 2015
@@ -281,9 +281,9 @@ public class AbstractVirtualHostTest ext
         File nonExistingFile = TestFileUtils.createTempFile(this);
         FileUtils.delete(nonExistingFile, false);
         when(store.getStoreLocationAsFile()).thenReturn(nonExistingFile);
-        setTestSystemProperty("virtualhost.housekeepingCheckPeriod", "1");
+        setTestSystemProperty("virtualhost.housekeepingCheckPeriod", "100");
 
-        AbstractVirtualHost host = new AbstractVirtualHost(attributes, _node)
+        final AbstractVirtualHost host = new AbstractVirtualHost(attributes, _node)
         {
             @Override
             protected MessageStore createMessageStore()
@@ -292,18 +292,21 @@ public class AbstractVirtualHostTest ext
             }
         };
 
-        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));
+        assertActionProducesLogMessage(new Runnable()
+        {
+            @Override
+            public void run()
+            {
+                host.open();
+            }
+        }, loggerName, Level.WARN, "Cannot check file system for disk space");
     }
 
-    private void watchForLogMessage(final CountDownLatch warningReceivedLatch,
-                                    final String loggerName,
-                                    final Level logLevel)
+    private void assertActionProducesLogMessage(final Runnable action, final String loggerName,
+                                                final Level logLevel, final String message) throws Exception
     {
+        final CountDownLatch logMessageReceivedLatch = new CountDownLatch(1);
         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>()
@@ -311,14 +314,18 @@ public class AbstractVirtualHostTest ext
             @Override
             public FilterReply decide(final ILoggingEvent event)
             {
-                if (event.getLoggerName().equals(loggerName) && event.getLevel().equals(logLevel))
+                if (event.getLoggerName().equals(loggerName) && event.getLevel().equals(logLevel) && event.getFormattedMessage().contains(message))
                 {
-                    warningReceivedLatch.countDown();
+                    logMessageReceivedLatch.countDown();
                 }
                 return FilterReply.NEUTRAL;
             }
         });
+        appender.setContext(rootLogger.getLoggerContext());
         appender.start();
         rootLogger.addAppender(appender);
+
+        action.run();
+        assertTrue("Did not receive expected log message", logMessageReceivedLatch.await(2, TimeUnit.SECONDS));
     }
 }



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