This is an automated email from the ASF dual-hosted git repository.

mattyb149 pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/nifi.git


The following commit(s) were added to refs/heads/main by this push:
     new 1449325027 NIFI-12019 bugfix for SynchronousFileWatcher time check 
interval
1449325027 is described below

commit 1449325027a9fb19348a54d4c1853284e567091c
Author: Mike Moser <mose...@apache.org>
AuthorDate: Fri Sep 1 20:03:39 2023 +0000

    NIFI-12019 bugfix for SynchronousFileWatcher time check interval
    
    Signed-off-by: Matt Burgess <mattyb...@apache.org>
    
    This closes #7664
---
 .../nifi/util/file/monitor/SynchronousFileWatcher.java | 17 ++++++-----------
 .../util/file/monitor/TestSynchronousFileWatcher.java  | 18 ++++++++----------
 2 files changed, 14 insertions(+), 21 deletions(-)

diff --git 
a/nifi-commons/nifi-utils/src/main/java/org/apache/nifi/util/file/monitor/SynchronousFileWatcher.java
 
b/nifi-commons/nifi-utils/src/main/java/org/apache/nifi/util/file/monitor/SynchronousFileWatcher.java
index 0040037ca6..34bbdbfb97 100644
--- 
a/nifi-commons/nifi-utils/src/main/java/org/apache/nifi/util/file/monitor/SynchronousFileWatcher.java
+++ 
b/nifi-commons/nifi-utils/src/main/java/org/apache/nifi/util/file/monitor/SynchronousFileWatcher.java
@@ -59,7 +59,7 @@ public class SynchronousFileWatcher {
     /**
      * Checks if the file has been updated according to the configured {@link 
UpdateMonitor} and resets the state
      *
-     * @return true if updated; false otherwise
+     * @return true if updated; false if not updated or if not yet time to 
check
      * @throws IOException if failure occurs checking for changes
      */
     public boolean checkAndReset() throws IOException {
@@ -77,21 +77,16 @@ public class SynchronousFileWatcher {
     private boolean checkForUpdate() throws IOException {
         if (resourceLock.tryLock()) {
             try {
-                final StateWrapper wrapper = lastState.get();
+                final Object oldState = lastState.get().getState();
                 final Object newState = monitor.getCurrentState(path);
-                if (newState == null && wrapper.getState() == null) {
+                if (newState == null && oldState == null) {
                     return false;
                 }
-                if (newState == null || wrapper.getState() == null) {
-                    lastState.set(new StateWrapper(newState));
+                lastState.set(new StateWrapper(newState));
+                if (newState == null || oldState == null) {
                     return true;
                 }
-
-                final boolean unmodified = newState.equals(wrapper.getState());
-                if (!unmodified) {
-                    lastState.set(new StateWrapper(newState));
-                }
-                return !unmodified;
+                return !newState.equals(oldState);
             } finally {
                 resourceLock.unlock();
             }
diff --git 
a/nifi-commons/nifi-utils/src/test/java/org/apache/nifi/util/file/monitor/TestSynchronousFileWatcher.java
 
b/nifi-commons/nifi-utils/src/test/java/org/apache/nifi/util/file/monitor/TestSynchronousFileWatcher.java
index 0dead15c90..4f348f2246 100644
--- 
a/nifi-commons/nifi-utils/src/test/java/org/apache/nifi/util/file/monitor/TestSynchronousFileWatcher.java
+++ 
b/nifi-commons/nifi-utils/src/test/java/org/apache/nifi/util/file/monitor/TestSynchronousFileWatcher.java
@@ -21,7 +21,6 @@ import org.junit.jupiter.api.Test;
 import java.io.ByteArrayInputStream;
 import java.io.FileOutputStream;
 import java.io.IOException;
-import java.io.UnsupportedEncodingException;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
@@ -33,28 +32,27 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
 public class TestSynchronousFileWatcher {
 
     @Test
-    public void testIt() throws UnsupportedEncodingException, IOException, 
InterruptedException {
+    public void testIt() throws IOException, InterruptedException {
         final Path path = Paths.get("target/1.txt");
         Files.copy(new ByteArrayInputStream("Hello, 
World!".getBytes("UTF-8")), path, StandardCopyOption.REPLACE_EXISTING);
         final UpdateMonitor monitor = new DigestUpdateMonitor();
 
-        final SynchronousFileWatcher watcher = new 
SynchronousFileWatcher(path, monitor, 10L);
+        final SynchronousFileWatcher watcher = new 
SynchronousFileWatcher(path, monitor, 40L);
         assertFalse(watcher.checkAndReset());
-        Thread.sleep(30L);
+        Thread.sleep(41L);
         assertFalse(watcher.checkAndReset());
 
-        final FileOutputStream fos = new FileOutputStream(path.toFile());
-        try {
+        try (FileOutputStream fos = new FileOutputStream(path.toFile())) {
             fos.write("Good-bye, World!".getBytes("UTF-8"));
             fos.getFD().sync();
-        } finally {
-            fos.close();
         }
 
-        assertTrue(watcher.checkAndReset());
+        // immediately after file changes, but before the next check time is 
reached, answer should be false
         assertFalse(watcher.checkAndReset());
 
-        Thread.sleep(30L);
+        // after check time has passed, answer should be true
+        Thread.sleep(41L);
+        assertTrue(watcher.checkAndReset());
         assertFalse(watcher.checkAndReset());
     }
 }

Reply via email to