wcfs: Provide isolation to clients
Via custom isolation protocol that both server and clients must cooperatively follow. This is the core change that enables file cache to be practically shared while each client can still be provided with isolated view of the database. This patch brings only server changes, tests + the minimum client bits to support the tests. The client library, that will implement isolation protocol on client side, will come next. This patch is organized as follows: - wcfs.go brings in description of the protocol, overview of how server implements that protocol and the implementation itself. See also notes.txt - wcfs_test.py brings in tests for server implementation. tWCFS._abort_ontimeout had to be moved into nogil mode into wcfs_test.pyx to avoid deadlock on the GIL (see comments in wcfs_test.pyx for details). - files added in wcfs/client/ are needed to provide client-side implementation of WatchLink - the message exchange protocol over opened head/watch file - for tests. Client-side watchlink implementation lives in wcfs/client/wcfs_watchlink.{h,cpp}. The other additions in wcfs/client/ are to support that and to expose the WatchLink to Python. Client-side bits are done right in C++ because upcoming WCFS client library will be implemented in C++ to work in nogil mode in order to avoid deadlock on the GIL because client-side pinner thread might be woken-up synchronously by WCFS server at any moment, including when another client thread already holds the GIL and is paused by WCFS. Some preliminary history: 9b4a42a3 X invalidation design draftly settled 27d91d47 X δFtail settled c27c1940 X mmap over under pagefault to this mmapping works d36b171f X ptrace when client is under pagefault or syscall won't work c1f5bb19 X notes on why lazy-invalidate approach was taken 4fbdd270 X Proof that that it is possible to change mmapping while under pagefault to it 33e0dfce X ΔTail draftly done 12628943 X make sure "bye" is always processed immediately - even if a handleWatch is currently blocked af0a64cb X test for "bye" canceling blocked handlers 996dc6a8 X Fix race in test 43915fe9 X wcfs: Don't forbid simultaneous watch requests 941dc54b X wcfs: threading.Lock -> sync.Mutex d75b2304 X wcfs: Move _abort_ontimeout to pyx/nogil 79234659 X Notes on why eagier invalidation was rejected f05271b1 X Test that sysread(/head/watch) can be interrupted 5ba816da X restore test_wcfs_watch_robust after f05271b1. 4bd88564 X "Invalidation protocol" -> "Isolation protocol" f7b54ca4 X avoid fmt::vsprintf (now compils again with latest pygolang@master) 0a8fcd9d X wcfs/client: Move EOF -> pygolang 153e02e6 X test_wcfs_watch_setup and test_wcfs_watch_setup_ahead work again 17f98edc X wcfs: client: os: Factor syserr -> string into _sysErrString 7b0c301c X wcfs: tests: Fix tFile.assertBlk not to segfault on a test failure b74dda09 X Start switching Track from Track(key) to Track(keycov) 8b5d8523 X Move tracking of which blocks were accessed from wcfs to ΔFtail
Showing
wcfs/client/.gitignore
0 → 100644
wcfs/client/__init__.py
0 → 100644
wcfs/client/_wcfs.pxd
0 → 100644
wcfs/client/_wcfs.pyx
0 → 100644
wcfs/client/wcfs.cpp
0 → 100644
wcfs/client/wcfs.h
0 → 100644
wcfs/client/wcfs_misc.cpp
0 → 100644
wcfs/client/wcfs_misc.h
0 → 100644
wcfs/client/wcfs_watchlink.h
0 → 100644