INT-3989: WatchServiceDirectoryScanner Improvement
JIRA: https://jira.spring.io/browse/INT-3989, https://jira.spring.io/browse/INT-3990, https://jira.spring.io/browse/INT-3988 INT-3989: Add `FileReadingMessageSource.WatchServiceDirectoryScanner` * Deprecate top-level `WatchServiceDirectoryScanner` because of inconsistency around `Lifecycle` and shared `directory` property * Copy/paste its logic into the `FileReadingMessageSource.WatchServiceDirectoryScanner` to hide that inconsistency, but still get a gain from the `WatchService` benefits * Add support for the `StandardWatchEventKinds.ENTRY_MODIFY` and `StandardWatchEventKinds.ENTRY_DELETE` events in the `FileReadingMessageSource.WatchServiceDirectoryScanner` * Introduce `useWatchService` option to switch to the internal `FileReadingMessageSource.WatchServiceDirectoryScanner` * Make `CompositeFileListFilter` also as `ResettableFileListFilter` * Deprecate weird `FileReadingMessageSource.onSend()` method and remove its usage from tests * Modify `WatchServiceDirectoryScannerTests` for the new logic * Document changes Add `MODIFY` and `DELETE` test coverage Optimize the `filesFromEvents()` logic replacing item with the fresh event sources. Remove the item from the result set in case of `DELETE` event, because file removal generates both `MODIFY` and `DELETE` events. * Add `FileReadingMessageSource.setWatchEvents` to allow to listen to the specific events, not only `CREATE` or all of them. * Modify tests and docs to reflect the new API Address PR comments * Improve `FileReadingMessageSource.setWatchEvents()` * Add `file.exists()` before adding file from event. Add more DEBUG logs into the `WatchServiceDirectoryScanner` With the fact of those logs provide more optimizations: * Don't register the same directory for watching: - use the `ConcurrentMap<Path, WatchKey> pathKeys` to track registrations - any modification within the directory causes the `ENTRY_MODIFY` for the directory as well. So, skip such an event exactly for the directory during `walkDirectory` * Add debug logs in case of `ENTRY_DELETE`
This commit is contained in:
committed by
Gary Russell
parent
379a8a2d0b
commit
7b1f77ac1f
@@ -203,7 +203,7 @@ public class AsyncAmqpGatewayTests {
|
||||
Message<?> returned = returnChannel.receive(10000);
|
||||
assertNotNull(returned);
|
||||
assertEquals("fiz", returned.getPayload());
|
||||
|
||||
ackChannel.receive(10000);
|
||||
ackChannel.purge(null);
|
||||
|
||||
// Simulate a nack - it's hard to get Rabbit to generate one
|
||||
|
||||
Reference in New Issue
Block a user