mirror of
https://github.com/facebook/sapling.git
synced 2024-10-10 16:57:49 +03:00
385eed0b4e
Summary: Update `edenfsctl restart` so that it does not treat zombie processes as stopped. This effectively reverts the changes added in D9980225. This behavior was causing `edenfsctl restart` to spuriously fail, as it would try to start the new EdenFS process too early, before the kernel had fully cleaned up the old EdenFS process and released all of its locks. In particular, the new process would often fail to acquire the RocksDB lock. Older versions of EdenFS did not always explicitly release this lock during shutdown, and so it would end up being cleaned up by the kernel after the process had exited. I wrote a simple test program to verify this behavior, where one process would acquire a file lock with an `F_SETLK` `fcntl()` call, and then exit without releasing it. Another process that polled for this process to enter zombie state and then try to acquire the lock. It would very reliably receive `EAGAIN` failures if it attempted to acquire the lock immediately after it saw the first process enter a zombie state. In practice we shouldn't normally run into issues with EdenFS being stuck in a zombie state. The situation described in D9980225 sounds like a corner case encountered during development while running EdenFS under sudo. Reviewed By: chadaustin Differential Revision: D20210708 fbshipit-source-id: cd62b47405d7f3e53bd4a1fb4ff2964596ca3536 |
||
---|---|---|
.. | ||
doctor | ||
test | ||
__init__.py | ||
buck.py | ||
CMakeLists.txt | ||
cmd_util.py | ||
config.py | ||
configinterpolator.py | ||
configutil.py | ||
daemon.py | ||
debug_posix.py | ||
debug.py | ||
filesystem.py | ||
fsck.py | ||
hg_util.py | ||
logfile.py | ||
main.py | ||
mtab.py | ||
overlay.py | ||
process_finder.py | ||
rage.py | ||
redirect.py | ||
stats_print.py | ||
stats.py | ||
subcmd.py | ||
systemd.py | ||
tabulate.py | ||
telemetry.py | ||
top.py | ||
trace_cmd.py | ||
trace.py | ||
ui.py | ||
util.py | ||
version.py | ||
win_ui.py | ||
winproc.py |