Skip to content

Conversation

@tul
Copy link

@tul tul commented Feb 7, 2020

This PR builds on #94

Sometimes the watcher would not detect file changes if successive changes to a file happened very quickly, specifically within the min resolution that the underlying file system could represent for mod time stamps. In my case, I was testing on a file system which had 1 second mod time stamp resolution. If I edited a file twice in 1 second, then the second write event was lost.

This was principally visible in some unit tests where a series of quick modifications to files happened to occur, but it could happen in real situations also I guess, hence this fix.

The fix simply emits a Write event if the mod time changes OR if the size changes.

tul added 2 commits January 10, 2020 17:44
ScanNow() causes the file watch loop to run once, and ensures
all events have been posted before returning. It allows the
caller to "synchronize" with the pending watcher events, so
is useful for batch updating after it is known file events
have probably occurred.
On some file systems, multiple changes to the same file within
the file system's mod time resolution would be missed. This
issue can be ameliorated by triggering `Write` events if a
size change is detected, even if no corresponding mod time
change occurs.

Changes to the file content without a change to the size or
mod time will still go unnoticed.
@tul
Copy link
Author

tul commented Feb 7, 2020

Note, although this PR builds on #94, it only needs it because the unit test uses ScanNow(). If you want to take this without #94 that is possible, but you'll have to just take the change to watcher.go and leave the tests behind.

dideler added a commit to dideler/watcher that referenced this pull request Apr 21, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant