RFR: 8285956: (fs) Excessive default poll interval in PollingWatchService

Brian Burkhalter bpb at openjdk.java.net
Mon May 2 19:59:23 UTC 2022


On Sat, 30 Apr 2022 00:14:29 GMT, Tyler Steele <duke at openjdk.java.net> wrote:

> PollingWatchService.java contains the WatchService and WatchKey implementation for AIX and BSD. When a Path is [register](https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/nio/file/Path.html#register(java.nio.file.WatchService,java.nio.file.WatchEvent.Kind...))ed this implementation creates a  polling thread to monitor for file system changes. Currently, this thread waits 10 seconds before it's first poll, and then waits 10 seconds between subsequent polls. This interval leads to sluggish performance.
> 
> This PR makes the following changes:
> - Sets the initial interval to 1 second regardless of the period.
> - Change the default period to 1 second.
> 
> All tests in `test/jdk/java/nio/file/WatchService` passing.

src/java.base/share/classes/sun/nio/fs/PollingWatchService.java line 118:

> 116: 
> 117:         // Extended modifiers may be used to specify the sensitivity level
> 118:         int sensitivity = 1;

Perhaps a (static final) constant such as `DEFAULT_SENSITIVITY` should be defined and used here and at line 311?

src/java.base/share/classes/sun/nio/fs/PollingWatchService.java line 311:

> 309:                 Runnable thunk = new Runnable() { public void run() { poll(); }};
> 310:                 this.poller = scheduledExecutor
> 311:                     .scheduleAtFixedRate(thunk, 1 /*init wait*/, period, TimeUnit.SECONDS);

Maybe delete this `/*init wait*/` embedded comment and change the comment at line 308 to something like
```// create the periodic task with initialDelay set to the default sensitivity```? (The hard-coded 1 would of course be changed to the new constant.)

-------------

PR: https://git.openjdk.java.net/jdk/pull/8479


More information about the nio-dev mailing list