- 02 Nov, 2020 1 commit
-
-
Kirill Smelkov authored
FUSE puts X as st_dev's minor, which, for minors <= 255 is the same as st_dev. However when there are many connections, and minor goes after 255, minor becomes != st_dev: In [2]: os.makedev(0, 254) Out[2]: 254 In [3]: os.makedev(0, 255) Out[3]: 255 In [5]: os.makedev(0, 256) Out[5]: 1048576 As a result we were constructing wrong patch, and if wcfs was failing we were also failing to kill it with something like: t = <wcfs.wcfs_test.tDB object at 0x7fef78043260> @func def __init__(t): t.root = testdb.dbopen() def _(): # close/unlock db if __init__ fails exc = sys.exc_info()[1] if exc is not None: dbclose(t.root) defer(_) assert not os.path.exists(testmntpt) t.wc = wcfs.join(testzurl, autostart=True) assert os.path.exists(testmntpt) assert is_mountpoint(testmntpt) # force-unmount wcfs on timeout to unstuck current test and let it fail. # Force-unmount can be done reliably only by writing into # /sys/fs/fuse/connections/<X>/abort. For everything else there are # cases, when wcfs, even after receiving `kill -9`, will be stuck in kernel. # ( git.kernel.org/linus/a131de0a482a makes in-kernel FUSE client to # still wait for request completion even after fatal signal ) > t._wcfuseabort = open("/sys/fs/fuse/connections/%d/abort" % os.stat(testmntpt).st_dev, "w") E IOError: [Errno 2] No such file or directory: '/sys/fs/fuse/connections/2097264/abort' wcfs/wcfs_test.py:236: IOError In the above failure st_dev=2097264 corresponds to X=624: In [6]: os.minor(2097264) Out[6]: 624
-
- 01 Nov, 2020 2 commits
-
-
Kirill Smelkov authored
-
Kirill Smelkov authored
-
- 30 Oct, 2020 5 commits
-
-
Kirill Smelkov authored
-
Kirill Smelkov authored
-
Kirill Smelkov authored
Without special care a forked child may interfere in parent-wcfs exchange via Python GC -> PyFileH.__del__ -> FileH.close -> message to WCFS sent from the child. This actually happens for real when running test.py/neo-wcfs because NEO test cluster spawns master and storage nodes with just fork without exec. -> detach from wcfs in child right after fork and deactivate all mappings in order not to provide stale data. See top-level comments added to wcfs/client/wcfs.cpp for details.
-
Kirill Smelkov authored
Currently in wcfs_test.py there is only waiting for a proc (subprocess.Popen instance) to become ready. However in the next patch we'll need to wait via polling for another condition. -> Generalize the pollwait code into waitfor* variants, and make procwait* use waitfor* internally.
-
Kirill Smelkov authored
Currently the code to convert `int err` or errno into string is usde only in _pathError, but in the next patches we'll need it to also handle error from pthread_atfork. -> Factor-out to separate function.
-
- 27 Oct, 2020 1 commit
-
-
Kirill Smelkov authored
-
- 25 Oct, 2020 1 commit
-
-
Kirill Smelkov authored
-
- 23 Oct, 2020 3 commits
-
-
Kirill Smelkov authored
-
Kirill Smelkov authored
-
Kirill Smelkov authored
-
- 22 Oct, 2020 5 commits
-
-
Kirill Smelkov authored
-
Kirill Smelkov authored
-
Kirill Smelkov authored
-
Kirill Smelkov authored
-
Kirill Smelkov authored
-
- 21 Oct, 2020 1 commit
-
-
Kirill Smelkov authored
-
- 18 Oct, 2020 1 commit
-
-
Kirill Smelkov authored
-
- 16 Oct, 2020 6 commits
-
-
Kirill Smelkov authored
-
Kirill Smelkov authored
-
Kirill Smelkov authored
-
Kirill Smelkov authored
-
Kirill Smelkov authored
-
Kirill Smelkov authored
-
- 15 Oct, 2020 1 commit
-
-
Kirill Smelkov authored
-
- 14 Oct, 2020 2 commits
-
-
Kirill Smelkov authored
-
Kirill Smelkov authored
-
- 13 Oct, 2020 2 commits
-
-
Kirill Smelkov authored
-
Kirill Smelkov authored
ZEO4 can have ._addr as either ("host", port) or "path".
-
- 12 Oct, 2020 4 commits
-
-
Kirill Smelkov authored
-
Kirill Smelkov authored
People don't want to raise up soft defaults nexedi/slapos.package!130 (comment 118373) nexedi/slapos.package!130 (comment 118405)
-
Kirill Smelkov authored
-
Kirill Smelkov authored
-
- 11 Oct, 2020 5 commits
-
-
Kirill Smelkov authored
-
Kirill Smelkov authored
-
Kirill Smelkov authored
Previously if an assert or something failed in spawned thread, the main thread was usually spinning indefinitely = tests hang. -> Switch all threading places to use sync.WorkGroup and this way if a thread fails, all other threads are canceled and the exception is reported back to wg.wait in main thread.
-
Kirill Smelkov authored
-
Kirill Smelkov authored
-