mirror of
https://github.com/facebook/sapling.git
synced 2024-10-10 00:45:18 +03:00
7f5439da0e
Summary: When running `edenfsctl prefetch **/BUCK` with an empty hgcache, EdenFS ends up asking mercurial for every manifest one by one. Unfortunately, every manifest fetched also causes the packfile to be flushed to disk, which then leads EdenFS to rescan the filesystem for the new packfile. Once too many packfiles are present on disk, Mercurial triggers a repack. Effectively, that means we have a quadratic complexity both on Mercurial, and on EdenFS's side. While this has been a long standing issue, we've so far avoided falling into this complexity for a number of reason. The main one being that the hgcache is very rarely empty, and thus the quadratic complexity is usually on low number of files. Users also rarely run a prefetch of all the files for the entire repo. However, on repositories with long standing branches, the hgcache is effectively cold and thus any prefetch would trigger the pathological behavior. To solve this, we take the same approach taken for files: sending the raw manifest to EdenFS, which will then take care of deserializing it properly. Reviewed By: DurhamG Differential Revision: D23035335 fbshipit-source-id: 855e6fb4fabf81c427fad6c9f17d05f95c47e9ae |
||
---|---|---|
.. | ||
contrib | ||
distutils_rust | ||
doc | ||
edenscm | ||
edenscmnative | ||
exec | ||
i18n | ||
lib | ||
newdoc | ||
pystubs | ||
slides | ||
tests | ||
.editorconfig | ||
.flake8 | ||
.gitignore | ||
COPYING | ||
gen_version.py | ||
hgeditor | ||
Makefile | ||
README.rst | ||
setup3.py | ||
setup.py |
Mercurial ========= Mercurial is a fast, easy to use, distributed revision control tool for software developers. Basic install:: $ make # see install targets $ make install # do a system-wide install $ hg debuginstall # sanity-check setup $ hg # see help Running without installing:: $ make local # build for inplace usage $ ./hg --version # should show the latest version See https://mercurial-scm.org/ for detailed installation instructions, platform-specific notes, and Mercurial user information.