go/zodb/fs1: Teach it to support notifications on database change
Following-up on 4d2c8b1d (go/zodb: Require drivers to provide notifications for database change events) let's teach FileStorage to support watching for database changes: - add watcher who observes changes to data file via fsnotify. - when we see that the file was updated - there is a tricky case to distinguish in-progress writes from just some garbage added at tail. See comments in _watcher for details. - if the watcher sees there is indeed new transactions, the watcher updates index & txnh{Min,Max} and sends corresponding event to watchq. - since index / txnh{Min,Max} can now be changed (by watcher) -> they are now protected by mu. - consequently operations like LastTid, LastOid, Load, ... are all taught to observe index / txnh{Min,Max} state in read-snapshot way. - add down & friends to indicate that the storage is no longer operational, if watcher sees there is a problem with data file. - Open is reworked to start from loading/rebuilding index first, and then tail to watcher to detect whether what's after found topPos is garbage or another in-progress transaction. Consequently it is now possible to correctly open filestorage that is being currently written to and has in-progress transaction at tail. The patch is a bit big, but the changes here are all tightly interrelated.
Showing
This diff is collapsed.
File added
Please register or sign in to comment