Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Detect size only change #95

Open
wants to merge 2 commits into
base: master
Choose a base branch
from

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