You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by oh...@apache.org on 2018/09/16 20:22:14 UTC

svn commit: r1841033 - in /commons/proper/configuration/trunk/src: main/java/org/apache/commons/configuration2/builder/ main/java/org/apache/commons/configuration2/reloading/ test/java/org/apache/commons/configuration2/reloading/

Author: oheger
Date: Sun Sep 16 20:22:14 2018
New Revision: 1841033

URL: http://svn.apache.org/viewvc?rev=1841033&view=rev
Log:
[CONFIGURATION-712] Added a refresh() method to reloading detector.

FileHandlerReloadingDetector had the problem that the first invocation
of the isReloadingRequired() method the file's last-modified date was
initialized. So a changed file could only be recognized on a 2nd
invocation.

Now the class offers a dedicated method to initialize the
last-modified date from the underlying file.
DefaultReloadingDetectorFactory was changed to call this method after
the detector has been created. So reloading checks are active from the
very beginning.

Thanks to Rolland Hobbie for the patch.

Modified:
    commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration2/builder/DefaultReloadingDetectorFactory.java
    commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration2/reloading/FileHandlerReloadingDetector.java
    commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration2/reloading/TestFileHandlerReloadingDetector.java

Modified: commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration2/builder/DefaultReloadingDetectorFactory.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration2/builder/DefaultReloadingDetectorFactory.java?rev=1841033&r1=1841032&r2=1841033&view=diff
==============================================================================
--- commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration2/builder/DefaultReloadingDetectorFactory.java (original)
+++ commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration2/builder/DefaultReloadingDetectorFactory.java Sun Sep 16 20:22:14 2018
@@ -42,8 +42,14 @@ public class DefaultReloadingDetectorFac
             throws ConfigurationException
     {
         Long refreshDelay = params.getReloadingRefreshDelay();
-        return (refreshDelay != null) ? new FileHandlerReloadingDetector(
+
+        FileHandlerReloadingDetector fileHandlerReloadingDetector =
+                (refreshDelay != null) ? new FileHandlerReloadingDetector(
                 handler, refreshDelay) : new FileHandlerReloadingDetector(
                 handler);
+
+        fileHandlerReloadingDetector.refresh();
+
+        return fileHandlerReloadingDetector;
     }
 }

Modified: commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration2/reloading/FileHandlerReloadingDetector.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration2/reloading/FileHandlerReloadingDetector.java?rev=1841033&r1=1841032&r2=1841033&view=diff
==============================================================================
--- commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration2/reloading/FileHandlerReloadingDetector.java (original)
+++ commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration2/reloading/FileHandlerReloadingDetector.java Sun Sep 16 20:22:14 2018
@@ -188,6 +188,16 @@ public class FileHandlerReloadingDetecto
     }
 
     /**
+     * Tells this implementation that the internally stored state should be
+     * refreshed. This method is intended to be called after the creation
+     * of an instance.
+     */
+    public void refresh()
+    {
+        updateLastModified(getLastModificationDate());
+    }
+
+    /**
      * Returns the date of the last modification of the monitored file. A return
      * value of 0 indicates, that the monitored file does not exist.
      *

Modified: commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration2/reloading/TestFileHandlerReloadingDetector.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration2/reloading/TestFileHandlerReloadingDetector.java?rev=1841033&r1=1841032&r2=1841033&view=diff
==============================================================================
--- commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration2/reloading/TestFileHandlerReloadingDetector.java (original)
+++ commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration2/reloading/TestFileHandlerReloadingDetector.java Sun Sep 16 20:22:14 2018
@@ -122,6 +122,46 @@ public class TestFileHandlerReloadingDet
     }
 
     /**
+     * Tests whether a changed file is detected after initialization and invoking
+     * refresh.
+     */
+    @Test
+    public void testRefreshIsReloadingRequiredTrue() throws Exception
+    {
+        File f = EasyMock.createMock(File.class);
+        EasyMock.expect(f.exists()).andReturn(Boolean.TRUE).anyTimes();
+        EasyMock.expect(f.lastModified()).andReturn(LAST_MODIFIED);
+        EasyMock.expect(f.lastModified()).andReturn(LAST_MODIFIED + 1);
+        EasyMock.replay(f);
+        FileHandlerReloadingDetector detector = new FileHandlerReloadingDetectorTestImpl(f);
+        detector.refresh();
+        assertTrue("Reloading not detected", detector.isReloadingRequired());
+    }
+
+    /**
+     * Tests a refresh cycle with a detected reload operation and a notification that
+     * reloading was performed.
+     */
+    @Test
+    public void testRefreshReloadingAndReset() throws Exception
+    {
+        File f = EasyMock.createMock(File.class);
+        EasyMock.expect(f.exists()).andReturn(Boolean.TRUE).anyTimes();
+        EasyMock.expect(f.lastModified()).andReturn(LAST_MODIFIED).times(2);
+        EasyMock.expect(f.lastModified()).andReturn(LAST_MODIFIED + 1).times(3);
+        EasyMock.expect(f.lastModified()).andReturn(LAST_MODIFIED + 2);
+        EasyMock.replay(f);
+        FileHandlerReloadingDetector detector = new FileHandlerReloadingDetectorTestImpl(f);
+        detector.refresh();
+        assertFalse("Reloading required", detector.isReloadingRequired());
+        assertTrue("Reloading not detected", detector.isReloadingRequired());
+        detector.reloadingPerformed();
+        assertFalse("Still reloading required", detector.isReloadingRequired());
+        assertTrue("Next reloading not detected",
+                detector.isReloadingRequired());
+    }
+
+    /**
      * Tests whether the refresh delay is taken into account.
      */
     @Test