A Scalable, User-Friendly Source Control System.
Go to file
Katie Mancini 44a352e8e3 Add number of pending Imports to eden top
Summary:
When there is an issue in the import process, there is not an easy way to detect this currently. As a first step towards making it possible to detect when there is an issue here, we expose the number if imports pending to `eden top`.

If there is a problem blocking imports from happening, then they will start to queue up and the number of pending imports will keep growing. When there are a lot of pending imports it indicates that there may be a problem in the import process.

note: there are cases when there are many pending imports under normal operation. It is common to batch fetch a bunch of files at once, and submitting all these prefetches at once will mean a lot of pending imports though there is no problem. Thus number of pending imports only indicates there *may* be an issue in the import process. (Thus we couple it with the duration of the longest import D20627754 for stronger signal)

The other value in showing the number of pending imports is giving users more transparency into eden. When there is a big batch of imports this may leave the user waiting a while, and this gives a way for them to know why. They can see that eden is making progress rather than being stuck.

Reviewed By: fanzeyi

Differential Revision: D20527273

fbshipit-source-id: 59e0fdff6e7b154b409dfab385b4fdb02062b066
2020-04-01 09:54:30 -07:00
.github/workflows revisionstore: feature gate the Mononoke LFS tests 2020-03-30 08:40:43 -07:00
build Updating submodules 2020-04-01 09:34:21 -07:00
CMake use vendored Rust crates 2020-03-23 17:24:35 -07:00
common Factor our hw_port_stats_fb303 lib 2020-02-03 17:37:05 -08:00
eden Add number of pending Imports to eden top 2020-04-01 09:54:30 -07:00
.gitignore mononoke: add README.md and the missing pieces for supporting cargo (#13) 2020-02-13 00:12:36 -08:00
.projectid replace the old getdeps.py script with a build.sh script 2020-03-30 19:27:54 -07:00
.travis.yml Re-sync with internal repository 2020-01-17 14:43:45 +01:00
build.bat add a build.bat file for building on Windows 2020-03-30 19:27:54 -07:00
build.sh replace the old getdeps.py script with a build.sh script 2020-03-30 19:27:54 -07:00
CMakeLists.txt on Windows, also emit a path containing runtime library dirs 2020-03-31 11:34:55 -07:00
CODE_OF_CONDUCT.md mononoke: move the codebase under eden/ directory 2020-02-06 13:46:04 +01:00
CONTRIBUTING.md mononoke: move the codebase under eden/ directory 2020-02-06 13:46:04 +01:00
LICENSE mononoke: move the codebase under eden/ directory 2020-02-06 13:46:04 +01:00
make-client.py Move eden.cli namespace to eden.fs.cli 2020-03-25 11:46:56 -07:00
README.md update the top-level README file 2020-03-30 19:27:54 -07:00
rustfmt.toml Get rustfmt/rls working in fbcode again. 2019-09-19 18:06:23 -07:00

EdenSCM

EdenSCM is a cross-platform, highly scalable source control management system.

It aims to provide both user-friendly and powerful interfaces for users, as well as extreme scalability to deal with repositories containing many millions of files and many millions of commits.

EdenSCM is comprised of three main components:

  • The eden CLI: The client-side command line interface for users to interact with EdenSCM.
  • Mononoke: The server-side part of EdenSCM.
  • EdenFS: A virtual filesystem for efficiently checking out large repositories.

EdenSCM's scalability goals are to ensure that all source control operations scale with the number of files in use by a developer, and not with the size of the repository itself. This enables fast, performant developer experiences even in massive repositories with many long files and very long commit histories.

The eden CLI

The eden CLI was originally based on Mercurial, and shares many aspects of the UI and features of Mercurial.

The CLI code can be found in the eden/scm subdirectory.

Building the eden CLI

The eden CLI currently builds and runs on Linux, Mac, and Windows. The setup.py script is the main interface for building the CLI.

Mononoke

Mononoke is the server-side component of EdenSCM.

Despite having originally evolved from Mercurial, EdenSCM is not a distributed source control system. In order to support massive repositories, not all repository data is downloaded to the client system when checking out a repository. Clients ideally only download the minimal amount of data necessary, and then fetch additional data from the server as it is needed.

Building Mononoke

The Mononoke code lives under eden/mononoke

Mononoke currently builds and runs only on Linux, and is not yet buildable outside of Facebook's internal environment. Work is still in progress to support building Mononoke with Rust's cargo build system.

EdenFS

EdenFS is a virtual file system for managing EdenSCM checkouts.

EdenFS speeds up operations in large repositories by only populating working directory files on demand, as they are accessed. This makes operations like checkout much faster, in exchange for a small performance hit when first accessing new files. This is quite beneficial in large repositories where developers often only work with a small subset of the repository at a time.

EdenFS has similar performance advantages to using sparse checkouts, but a much better user experience. Unlike with sparse checkouts, EdenFS does not require manually curating the list of files to check out, and users can transparently access any file without needing to update the profile.

EdenFS also keeps track of which files have been modified, allowing very efficient status queries that do not need to scan the working directory. The filesystem monitoring tool Watchman also integrates with EdenFS, allowing it to more efficiently track updates to the filesystem.

Building EdenFS

EdenFS currently builds on Linux, Mac, and Windows.

The recommended way to build EdenFS is using the build.sh script in the top-level of the repository. This script will download and build all of the necessary dependencies for EdenFS, before building EdenFS itself. On Windows use the build.bat script instead of build.sh.

This build script will create an output directory outside of the repository where it will perform the build. You can control this output directory location by passing a --scratch-path argument to the build script.

Support

EdenSCM is the primary source control system used at Facebook, and is used for Facebook's main monorepo code base.

Support for using EdenSCM outside of Facebook is still highly experimental. While we would be interested to hear feedback if you run into issues, supporting external users is not currently a high priority for the development team, so we unfortunately cannot guarantee prompt support at this time.

License

See LICENSE.