sapling/eden/mononoke/Cargo.toml

439 lines
17 KiB
TOML
Raw Normal View History

[package]
name = "eden_mononoke"
version = "0.1.0"
authors = ["Facebook"]
edition = "2018"
license = "GPLv2+"
[[bin]]
name = "admin"
path = "cmds/admin/main.rs"
[[bin]]
name = "aliasverify"
path = "cmds/aliasverify.rs"
[[bin]]
name = "backfill_derived_data"
path = "cmds/backfill_derived_data/main.rs"
[[bin]]
name = "backfill_mapping"
path = "cmds/backfill_mapping.rs"
[[bin]]
name = "benchmark_filestore"
path = "cmds/benchmark_filestore.rs"
autocargo v2: rollout and replace v1 in all use-cases Summary: This diff rollouts V2 of autocargo in an atomic way so there are quite a few things done here. Arc lint support: V1 used to be part of the default fbsource `arc lint` engine, but since V2 calls buck it must live in a separate lint engine. So this diff: - Adds running `autocargo` as part of `arc lint-rust` Mergedriver update: - Mergedriver used in resolving conflicts on commits is now pointing to V2 - It handles files in `public_autocargo/` directories in addition to the ones containig generation preamble Including regeneration results of running `common/rust/cargo_from_buck/bin/autocargo`. All the differences are accounted for: - Some sections and attributes are removed as they can be autodiscovered by Cargo (like `lib.path = "src/lib.rs"` or empty [lib] section) - "readme" attribute is properly defined as relative to Cargo.toml location rather than as hardcoded string - "unittest = false" on a Buck rule propagates as "test = false; doctest = false" to Cargo - "rusqlite" is not special-cased anymore, so the "budled" feature will have to be enabled using custom configuration if required by the project (for rust-shed in order to not break windows builds a default feature section was added) - Files generated from thrift_library rules that do not support "rust" language are removed - Custom .bzl rules that create rust artifacts (like `rust_python_extension`) are no longer ignored Others: - Changed `bin/cargo-autocargo` to be a wrapper for calling V2 via `cargo autocargo` - Updated following files to use V2: - `common/rust/tools/reindeer/version-bump` - `remote_execution/rust/setup.sh` - Removed few files from V1 that would otherwise interfere with V2 automatic regeneration/linting/testing Reviewed By: zertosh Differential Revision: D26728789 fbshipit-source-id: d1454e7ce658a2d3194704f8d77b12d688ec3e64
2021-03-02 17:41:22 +03:00
test = false
[[bin]]
name = "benchmark_storage_config"
path = "cmds/benchmark_storage_config/main.rs"
[[bin]]
name = "blobimport"
path = "cmds/blobimport.rs"
[[bin]]
name = "blobstore_healer"
path = "cmds/blobstore_healer/main.rs"
[[bin]]
name = "bonsai_verify"
path = "cmds/bonsai_verify/main.rs"
autocargo v2: rollout and replace v1 in all use-cases Summary: This diff rollouts V2 of autocargo in an atomic way so there are quite a few things done here. Arc lint support: V1 used to be part of the default fbsource `arc lint` engine, but since V2 calls buck it must live in a separate lint engine. So this diff: - Adds running `autocargo` as part of `arc lint-rust` Mergedriver update: - Mergedriver used in resolving conflicts on commits is now pointing to V2 - It handles files in `public_autocargo/` directories in addition to the ones containig generation preamble Including regeneration results of running `common/rust/cargo_from_buck/bin/autocargo`. All the differences are accounted for: - Some sections and attributes are removed as they can be autodiscovered by Cargo (like `lib.path = "src/lib.rs"` or empty [lib] section) - "readme" attribute is properly defined as relative to Cargo.toml location rather than as hardcoded string - "unittest = false" on a Buck rule propagates as "test = false; doctest = false" to Cargo - "rusqlite" is not special-cased anymore, so the "budled" feature will have to be enabled using custom configuration if required by the project (for rust-shed in order to not break windows builds a default feature section was added) - Files generated from thrift_library rules that do not support "rust" language are removed - Custom .bzl rules that create rust artifacts (like `rust_python_extension`) are no longer ignored Others: - Changed `bin/cargo-autocargo` to be a wrapper for calling V2 via `cargo autocargo` - Updated following files to use V2: - `common/rust/tools/reindeer/version-bump` - `remote_execution/rust/setup.sh` - Removed few files from V1 that would otherwise interfere with V2 automatic regeneration/linting/testing Reviewed By: zertosh Differential Revision: D26728789 fbshipit-source-id: d1454e7ce658a2d3194704f8d77b12d688ec3e64
2021-03-02 17:41:22 +03:00
test = false
[[bin]]
name = "configlint"
path = "cmds/configlint.rs"
[[bin]]
name = "dumprev"
path = "cmds/dumprev.rs"
autocargo v2: rollout and replace v1 in all use-cases Summary: This diff rollouts V2 of autocargo in an atomic way so there are quite a few things done here. Arc lint support: V1 used to be part of the default fbsource `arc lint` engine, but since V2 calls buck it must live in a separate lint engine. So this diff: - Adds running `autocargo` as part of `arc lint-rust` Mergedriver update: - Mergedriver used in resolving conflicts on commits is now pointing to V2 - It handles files in `public_autocargo/` directories in addition to the ones containig generation preamble Including regeneration results of running `common/rust/cargo_from_buck/bin/autocargo`. All the differences are accounted for: - Some sections and attributes are removed as they can be autodiscovered by Cargo (like `lib.path = "src/lib.rs"` or empty [lib] section) - "readme" attribute is properly defined as relative to Cargo.toml location rather than as hardcoded string - "unittest = false" on a Buck rule propagates as "test = false; doctest = false" to Cargo - "rusqlite" is not special-cased anymore, so the "budled" feature will have to be enabled using custom configuration if required by the project (for rust-shed in order to not break windows builds a default feature section was added) - Files generated from thrift_library rules that do not support "rust" language are removed - Custom .bzl rules that create rust artifacts (like `rust_python_extension`) are no longer ignored Others: - Changed `bin/cargo-autocargo` to be a wrapper for calling V2 via `cargo autocargo` - Updated following files to use V2: - `common/rust/tools/reindeer/version-bump` - `remote_execution/rust/setup.sh` - Removed few files from V1 that would otherwise interfere with V2 automatic regeneration/linting/testing Reviewed By: zertosh Differential Revision: D26728789 fbshipit-source-id: d1454e7ce658a2d3194704f8d77b12d688ec3e64
2021-03-02 17:41:22 +03:00
test = false
[[bin]]
name = "idxdump"
path = "cmds/idxdump.rs"
autocargo v2: rollout and replace v1 in all use-cases Summary: This diff rollouts V2 of autocargo in an atomic way so there are quite a few things done here. Arc lint support: V1 used to be part of the default fbsource `arc lint` engine, but since V2 calls buck it must live in a separate lint engine. So this diff: - Adds running `autocargo` as part of `arc lint-rust` Mergedriver update: - Mergedriver used in resolving conflicts on commits is now pointing to V2 - It handles files in `public_autocargo/` directories in addition to the ones containig generation preamble Including regeneration results of running `common/rust/cargo_from_buck/bin/autocargo`. All the differences are accounted for: - Some sections and attributes are removed as they can be autodiscovered by Cargo (like `lib.path = "src/lib.rs"` or empty [lib] section) - "readme" attribute is properly defined as relative to Cargo.toml location rather than as hardcoded string - "unittest = false" on a Buck rule propagates as "test = false; doctest = false" to Cargo - "rusqlite" is not special-cased anymore, so the "budled" feature will have to be enabled using custom configuration if required by the project (for rust-shed in order to not break windows builds a default feature section was added) - Files generated from thrift_library rules that do not support "rust" language are removed - Custom .bzl rules that create rust artifacts (like `rust_python_extension`) are no longer ignored Others: - Changed `bin/cargo-autocargo` to be a wrapper for calling V2 via `cargo autocargo` - Updated following files to use V2: - `common/rust/tools/reindeer/version-bump` - `remote_execution/rust/setup.sh` - Removed few files from V1 that would otherwise interfere with V2 automatic regeneration/linting/testing Reviewed By: zertosh Differential Revision: D26728789 fbshipit-source-id: d1454e7ce658a2d3194704f8d77b12d688ec3e64
2021-03-02 17:41:22 +03:00
test = false
[[bin]]
name = "lfs_import"
path = "cmds/lfs_import.rs"
autocargo v2: rollout and replace v1 in all use-cases Summary: This diff rollouts V2 of autocargo in an atomic way so there are quite a few things done here. Arc lint support: V1 used to be part of the default fbsource `arc lint` engine, but since V2 calls buck it must live in a separate lint engine. So this diff: - Adds running `autocargo` as part of `arc lint-rust` Mergedriver update: - Mergedriver used in resolving conflicts on commits is now pointing to V2 - It handles files in `public_autocargo/` directories in addition to the ones containig generation preamble Including regeneration results of running `common/rust/cargo_from_buck/bin/autocargo`. All the differences are accounted for: - Some sections and attributes are removed as they can be autodiscovered by Cargo (like `lib.path = "src/lib.rs"` or empty [lib] section) - "readme" attribute is properly defined as relative to Cargo.toml location rather than as hardcoded string - "unittest = false" on a Buck rule propagates as "test = false; doctest = false" to Cargo - "rusqlite" is not special-cased anymore, so the "budled" feature will have to be enabled using custom configuration if required by the project (for rust-shed in order to not break windows builds a default feature section was added) - Files generated from thrift_library rules that do not support "rust" language are removed - Custom .bzl rules that create rust artifacts (like `rust_python_extension`) are no longer ignored Others: - Changed `bin/cargo-autocargo` to be a wrapper for calling V2 via `cargo autocargo` - Updated following files to use V2: - `common/rust/tools/reindeer/version-bump` - `remote_execution/rust/setup.sh` - Removed few files from V1 that would otherwise interfere with V2 automatic regeneration/linting/testing Reviewed By: zertosh Differential Revision: D26728789 fbshipit-source-id: d1454e7ce658a2d3194704f8d77b12d688ec3e64
2021-03-02 17:41:22 +03:00
test = false
[[bin]]
name = "manual_scrub"
path = "cmds/manual_scrub/main.rs"
[[bin]]
name = "rechunker"
path = "cmds/rechunker.rs"
[[bin]]
name = "revlogrepo"
path = "cmds/revlogrepo.rs"
[[bin]]
name = "segmented_changelog_seeder"
path = "cmds/segmented_changelog_seeder.rs"
[[bin]]
name = "segmented_changelog_tailer"
path = "cmds/segmented_changelog_tailer.rs"
[[bin]]
name = "sqlblob_gc"
path = "cmds/sqlblob_gc/main.rs"
[[bin]]
name = "statistics_collector"
path = "cmds/statistics_collector.rs"
[[bin]]
name = "streaming_clone_warmup"
path = "cmds/streaming_clone_warmup/main.rs"
[[bin]]
name = "upload_globalrevs"
path = "cmds/upload_globalrevs.rs"
[dependencies]
anyhow = "1.0"
ascii = "1.0"
async-compression = { version = "0.3", features = ["all"] }
async-trait = "0.1.45"
backsyncer = { version = "0.1.0", path = "commit_rewriting/backsyncer" }
blame = { version = "0.1.0", path = "derived_data/blame" }
blobimport_lib = { version = "0.1.0", path = "blobimport_lib" }
blobrepo = { version = "0.1.0", path = "blobrepo" }
blobrepo_hg = { version = "0.1.0", path = "blobrepo/blobrepo_hg" }
blobrepo_override = { version = "0.1.0", path = "blobrepo/override" }
blobrepo_utils = { version = "0.1.0", path = "blobrepo_utils" }
blobstore = { version = "0.1.0", path = "blobstore" }
blobstore_factory = { version = "0.1.0", path = "blobstore/factory" }
blobstore_sync_queue = { version = "0.1.0", path = "blobstore_sync_queue" }
bonsai_globalrev_mapping = { version = "0.1.0", path = "bonsai_globalrev_mapping" }
bookmark_renaming = { version = "0.1.0", path = "commit_rewriting/bookmark_renaming" }
bookmarks = { version = "0.1.0", path = "bookmarks" }
bookmarks_movement = { version = "0.1.0", path = "bookmarks/bookmarks_movement" }
borrowed = { version = "0.1.0", git = "https://github.com/facebookexperimental/rust-shed.git", branch = "master" }
bounded_traversal = { version = "0.1.0", path = "common/bounded_traversal" }
bulkops = { version = "0.1.0", path = "bulkops" }
bytes = { version = "0.5", features = ["serde"] }
bytesize = "1.0"
cacheblob = { version = "0.1.0", path = "blobstore/cacheblob" }
cached_config = { version = "0.1.0", git = "https://github.com/facebookexperimental/rust-shed.git", branch = "master" }
cachelib = { version = "0.1.0", git = "https://github.com/facebookexperimental/rust-shed.git", branch = "master" }
changeset_fetcher = { version = "0.1.0", path = "blobrepo/changeset_fetcher" }
changesets = { version = "0.1.0", path = "changesets" }
chrono = { version = "0.4", features = ["serde"] }
clap = "2.33"
cloned = { version = "0.1.0", git = "https://github.com/facebookexperimental/rust-shed.git", branch = "master" }
cmdlib = { version = "0.1.0", path = "cmdlib" }
context = { version = "0.1.0", path = "server/context" }
copy_utils = { version = "0.1.0", path = "common/copy_utils" }
criterion = "=0.3.1"
cross_repo_sync = { version = "0.1.0", path = "commit_rewriting/cross_repo_sync" }
dbbookmarks = { version = "0.1.0", path = "bookmarks/dbbookmarks" }
deleted_files_manifest = { version = "0.1.0", path = "derived_data/deleted_files_manifest" }
derive_more = "0.99.3"
derived_data = { version = "0.1.0", path = "derived_data" }
derived_data_filenodes = { version = "0.1.0", path = "derived_data/filenodes" }
derived_data_utils = { version = "0.1.0", path = "derived_data/utils" }
failure_ext = { version = "0.1.0", git = "https://github.com/facebookexperimental/rust-shed.git", branch = "master" }
fastlog = { version = "0.1.0", path = "derived_data/fastlog" }
fbinit = { version = "0.1.0", git = "https://github.com/facebookexperimental/rust-shed.git", branch = "master" }
fbthrift = { version = "0.0.1+unstable", git = "https://github.com/facebook/fbthrift.git", branch = "master" }
filenodes = { version = "0.1.0", path = "filenodes" }
filestore = { version = "0.1.0", path = "filestore" }
fsnodes = { version = "0.1.0", path = "derived_data/fsnodes" }
futures = { version = "0.3.13", features = ["async-await", "compat"] }
futures-old = { package = "futures", version = "0.1.31" }
futures-util = "0.3.7"
futures_03_ext = { package = "futures_ext", version = "0.1.0", git = "https://github.com/facebookexperimental/rust-shed.git", branch = "master" }
futures_ext = { package = "futures_01_ext", version = "0.1.0", git = "https://github.com/facebookexperimental/rust-shed.git", branch = "master" }
futures_stats = { version = "0.1.0", git = "https://github.com/facebookexperimental/rust-shed.git", branch = "master" }
git_types = { version = "0.1.0", path = "git/git_types" }
humantime = "1.3"
itertools = "0.8"
lazy_static = "1.0"
lfs_import_lib = { version = "0.1.0", path = "lfs_import_lib" }
live_commit_sync_config = { version = "0.1.0", path = "commit_rewriting/live_commit_sync_config" }
lock_ext = { version = "0.1.0", git = "https://github.com/facebookexperimental/rust-shed.git", branch = "master" }
manifest = { version = "0.1.0", path = "manifest" }
maplit = "1.0"
memblob = { version = "0.1.0", path = "blobstore/memblob" }
mercurial_bundle_replay_data = { version = "0.1.0", path = "mercurial/bundle_replay_data" }
mercurial_derived_data = { version = "0.1.0", path = "derived_data/mercurial_derived_data" }
mercurial_revlog = { version = "0.1.0", path = "mercurial/revlog" }
mercurial_types = { version = "0.1.0", path = "mercurial/types" }
metaconfig_types = { version = "0.1.0", path = "metaconfig/types" }
mononoke_hg_sync_job_helper_lib = { version = "0.1.0", path = "mononoke_hg_sync_job" }
mononoke_types = { version = "0.1.0", path = "mononoke_types" }
mutable_counters = { version = "0.1.0", path = "mutable_counters" }
prefixblob = { version = "0.1.0", path = "blobstore/prefixblob" }
pushrebase = { version = "0.1.0", path = "pushrebase" }
rand = { version = "0.7", features = ["small_rng"] }
redactedblobstore = { version = "0.1.0", path = "blobstore/redactedblobstore" }
regex = "1.4.2"
repo_factory = { version = "0.1.0", path = "repo_factory" }
revset = { version = "0.1.0", path = "revset" }
scuba_ext = { version = "0.1.0", path = "common/scuba_ext" }
segmented_changelog = { version = "0.1.0", path = "segmented_changelog" }
segmented_changelog: update OnDemandUpdateDag to have smaller critical sections Summary: The on demand update code we have is the most basic logic that we could have. The main problem is that it has long and redundant write locks. This change reduces the write lock strictly to the section that has to update the in memory IdDag. Updating the Dag has 3 phases: * loading the data that is required for the update; * updating the IdMap; * updating the IdDag; The Dag can function well for serving requests as long as the commits involved have been built so we want to have easy read access to both the IdMap and the IdDag. The IdMap is a very simple structure and because it's described as an Arc<dyn IdMap> we push the update locking logic to the storage. The IdDag is a complicated structure that we ask to update itself. Those functions take mutable references. Updating the storage of the iddag to hide the complexities of locking is more difficult. We deal with the IdDag directly by wrapping it in a RwLock. The RwLock allows for easy read access which we expect to be the predominant access pattern. Updates to the dag are not completely stable so racing updates can have conflicting results. In case of conflics one of the update processes would have to restart. It's easier to reason about the process if we just allow one "thread" to start an update process. The update process is locked by a sync mutex. The "threads" that fail the race to update are asked to wait until the ongoing update is complete. The waiters will poll on a shared future that tracks the ongoing dag update. After the update is complete the waiters will go back to checking if the data they have is available in the dag. It is possible that the dag is updated in between determining that the an update is needed and acquiring the ongoing_update lock. This is fine because the update building process checks the state of dag before the dag and updates only what is necessary if necessary. Reviewed By: krallin Differential Revision: D26508430 fbshipit-source-id: cd3bceed7e0ffb00aee64433816b5a23c0508d3c
2021-02-23 05:14:45 +03:00
serde = { version = "=1.0.118", features = ["derive", "rc"] }
serde_derive = "1.0"
serde_json = { version = "1.0", features = ["float_roundtrip"] }
sha2 = "0.8"
skeleton_manifest = { version = "0.1.0", path = "derived_data/skeleton_manifest" }
skiplist = { version = "0.1.0", path = "reachabilityindex/skiplist" }
slog = { version = "2.5", features = ["max_level_debug"] }
sorted_vector_map = { version = "0.1.0", git = "https://github.com/facebookexperimental/rust-shed.git", branch = "master" }
sql_construct = { version = "0.1.0", path = "common/sql_construct" }
sql_ext = { version = "0.1.0", path = "common/rust/sql_ext" }
sqlblob = { version = "0.1.0", path = "blobstore/sqlblob" }
stats = { version = "0.1.0", git = "https://github.com/facebookexperimental/rust-shed.git", branch = "master" }
streaming_clone = { version = "0.1.0", path = "repo_client/streaming_clone" }
synced_commit_mapping = { version = "0.1.0", path = "commit_rewriting/synced_commit_mapping" }
tempfile = "3.1"
thiserror = "1.0"
throttledblob = { version = "0.1.0", path = "blobstore/throttledblob" }
time_ext = { version = "0.1.0", git = "https://github.com/facebookexperimental/rust-shed.git", branch = "master" }
tokio = { version = "0.2.25", features = ["full", "test-util"] }
tokio-util = { version = "0.3", features = ["codec", "udp"] }
tokio_shim = { version = "0.1.0", git = "https://github.com/facebookexperimental/rust-shed.git", branch = "master" }
toml = "=0.5.7"
unodes = { version = "0.1.0", path = "derived_data/unodes" }
xdiff = { version = "0.1.0", path = "../scm/lib/xdiff" }
[dev-dependencies]
fbinit-tokio-02 = { version = "0.1.0", git = "https://github.com/facebookexperimental/rust-shed.git", branch = "master" }
fixtures = { version = "0.1.0", path = "tests/fixtures" }
test_repo_factory = { version = "0.1.0", path = "repo_factory/test_repo_factory" }
tests_utils = { version = "0.1.0", path = "tests/utils" }
[patch.crates-io]
addr2line = { git = "https://github.com/gimli-rs/addr2line.git", rev = "0b6b6018b5b252a18e628fba03885f7d21844b3c" }
bytecount = { git = "https://github.com/llogiq/bytecount", rev = "469eaf8395c99397cd64d059737a9054aa014088" }
chashmap = { git = "https://gitlab.redox-os.org/ahornby/chashmap", rev = "901ace2ca3cdbc2095adb1af111d211e254e2aae" }
const-random = { git = "https://github.com/fbsource/const-random", rev = "374c5b46427fe2ffbf6acbd9c1687e0f1a809f95" }
curl = { git = "https://github.com/kulshrax/curl-rust", rev = "2a15bbd8dbbd54734313fa703a64db7ce6ddaff0" }
curl-sys = { git = "https://github.com/kulshrax/curl-rust", rev = "2a15bbd8dbbd54734313fa703a64db7ce6ddaff0" }
enumset = { git = "https://github.com/danobi/enumset", rev = "4c01c583c27a725948fededbfb3461c572a669a4" }
gotham = { git = "https://github.com/krallin/gotham.git", rev = "6c1612c7189893f31c6c3fa2dda11c0b6d83e1ac" }
gotham-02 = { package = "gotham", git = "https://github.com/krallin/gotham-02.git", rev = "1eb3b976c31e7e4334b188f3abfa5cc2e5cae033" }
gotham_derive = { git = "https://github.com/krallin/gotham.git", rev = "6c1612c7189893f31c6c3fa2dda11c0b6d83e1ac" }
gotham_derive-02 = { package = "gotham_derive", git = "https://github.com/krallin/gotham-02.git", rev = "1eb3b976c31e7e4334b188f3abfa5cc2e5cae033" }
hyper = { package = "hyper", git = "https://github.com/krallin/hyper.git", rev = "8850630d2fbb637cfdeaea802526e2d968ec0b71" }
hyper-02 = { package = "hyper", version = "0.13.10", git = "https://github.com/krallin/hyper-02.git", rev = "9c9453c5ae3e92de4ba30edd81bb45371b8fa8d6" }
lru-disk-cache = { git = "https://github.com/mozilla/sccache", rev = "033ebaae69beeb0ac04e8c35d6ff1103487bd9a3" }
openssl = { git = "https://github.com/sfackler/rust-openssl", rev = "68fc8ba890d77986b06ca5ce29d1089285fbbcf9" }
openssl-sys = { git = "https://github.com/sfackler/rust-openssl", rev = "68fc8ba890d77986b06ca5ce29d1089285fbbcf9" }
petgraph = { git = "https://github.com/jkeljo/petgraph", rev = "e3e9dd8632d23973fdc0b42c1117d5e5fc5fa384" }
prost = { git = "https://github.com/gabrielrussoc/prost", branch = "protoc-runtime" }
prost-build = { git = "https://github.com/gabrielrussoc/prost", branch = "protoc-runtime" }
prost-derive = { git = "https://github.com/gabrielrussoc/prost", branch = "protoc-runtime" }
prost-types = { git = "https://github.com/gabrielrussoc/prost", branch = "protoc-runtime" }
r2d2_sqlite = { git = "https://github.com/jsgf/r2d2-sqlite.git", rev = "6d77a828ca0a3c507a3f58561532a1b6c66c7918" }
rustfilt = { git = "https://github.com/jsgf/rustfilt.git", rev = "8141fa7f1caee562ee8daffb2ddeca3d1f0d36e5" }
smallvec = { git = "https://github.com/ahornby/rust-smallvec.git", rev = "708e6f09ced4ed211a7c63f53bce7dfe2bbda478" }
tokio-02 = { package = "tokio", version = "0.2.25", git = "https://github.com/krallin/tokio.git", rev = "818f943db36e32b7c928351c32fe69ac913409f9" }
tokio-compat = { package = "tokio-compat", version = "0.1.6", git = "https://github.com/krallin/tokio-compat.git", rev = "c2330c2a0141353e467cc5861988daa2eae7cb54" }
tokio-core = { git = "https://github.com/bolinfest/tokio-core", rev = "5f37aa3c627d56ee49154bc851d6930f5ab4398f" }
toml = { git = "https://github.com/jsgf/toml-rs", branch = "dotted-table-0.5.7" }
[workspace]
members = [
".",
"alpn",
"benchmarks/derived_data",
"benchmarks/simulated_repo",
"blobimport_lib",
"blobimport_lib/consts",
"blobrepo",
"blobrepo/blobrepo_hg",
"blobrepo/blobsync",
"blobrepo/changeset_fetcher",
"blobrepo/common",
"blobrepo/errors",
"blobrepo/override",
"blobrepo/repo_blobstore",
"blobrepo_utils",
"blobstore",
"blobstore/blobstore_stats",
"blobstore/cacheblob",
"blobstore/chaosblob",
"blobstore/delayblob",
"blobstore/factory",
"blobstore/fileblob",
"blobstore/if",
"blobstore/logblob",
"blobstore/memblob",
"blobstore/multiplexedblob",
"blobstore/packblob",
"blobstore/packblob/if",
"blobstore/prefixblob",
"blobstore/readonlyblob",
"blobstore/redactedblobstore",
"blobstore/samplingblob",
"blobstore/sqlblob",
"blobstore/throttledblob",
"blobstore/virtually_sharded_blobstore",
"blobstore_sync_queue",
"bonsai_git_mapping",
"bonsai_git_mapping/git_mapping_pushrebase_hook",
"bonsai_globalrev_mapping",
"bonsai_globalrev_mapping/globalrev_pushrebase_hook",
"bonsai_globalrev_mapping/if",
"bonsai_hg_mapping",
"bonsai_hg_mapping/if",
"bonsai_svnrev_mapping",
"bonsai_svnrev_mapping/if",
"bookmarks",
"bookmarks/bookmarks_movement",
"bookmarks/bookmarks_types",
"bookmarks/dbbookmarks",
"bookmarks/warm_bookmarks_cache",
"bulkops",
"bulkops/bench",
"cache_warmup",
"changesets",
"changesets/if",
"cmdlib",
"cmdlib/x_repo",
"commit_rewriting/backsyncer",
"commit_rewriting/bookmark_renaming",
"commit_rewriting/bookmarks_validator",
"commit_rewriting/commit_validator",
"commit_rewriting/cross_repo_sync",
"commit_rewriting/cross_repo_sync/test_utils",
"commit_rewriting/live_commit_sync_config",
"commit_rewriting/megarepo",
"commit_rewriting/mononoke_x_repo_sync_job",
"commit_rewriting/movers",
"commit_rewriting/synced_commit_mapping",
"common/allocation_tracing",
"common/async_limiter",
"common/async_limiter/examples/tokio_v2",
"common/bounded_traversal",
"common/copy_utils",
"common/dedupmap",
"common/futures_watchdog",
"common/iterhelpers",
mononoke/rendezvous: introduce query batching Summary: This introduces a basic building block for query batching. I called this rendezvous, since it's about multiple queries meeting up in the same place :) There are a few (somewhat conflicting) goals this tries to satisfy, so let's go over them: 1), we'd like to reduce the total number of queries made by batch jobs. For example, group hg bonsai lookups made by the walker. Those jobs are characterized by the fact that they have a lot of queries to make, all the time. Here's an example: https://fburl.com/ods/zuiep7yh. 2), we'd like to reduce the overall number of connections held to MySQL by our tasks. The main way we achieve this is by reducing the maximum number of concurrent queries. Indeed, a high total number of queries doesn't necessarily result in a lot of connections as long as they're not concurrent, because we can reuse connections. On the other hand, if you dispatch 100 concurrent queries, that _does_ use 100 connections. This is something that applies to batch jobs due to their query volume, but also to "interactive" jobs like Mononoke Server or SCS, just not all the time. Here's an example: https://fburl.com/ods/o6gp07qp (you can see the query count is overall low, but sometimes spikes substantially). 2.1) It's also worth noting that concurrent queries are often the result of many clients wanting the same data, so deduplication is also useful here. 3), we also don't want to impact the latency of interactive jobs when they need to a little query here or there (i.e. it's largely fine if our jobs all hold a few connections to MySQL and use them somewhat consistently). 4), we'd like this to make it easier to do batching right. For example, if you have 100 Bonsais to map to hg, you should be able to just map and call `future::try_join_all` and have that do the right thing. 5), we don't want "bad" queries to affect other queries negatively. One example would be the occasional queries we make to Bonsai <-> Hg mapping in `known` for thousands (if not more) of rows. 6), we want this to be easy to incorporate into the codebase. So, how do we try to address all of this? Here's how: - We ... do batching, and we deduplicate requests in a batch. This is the easier bit and should address #1, #2 and #2.1, #4. - However, batching is conditional. We notably don't batch very large requests with the rest (addresses #5). We also don't batch small queries all the time: we only batch if we are observing a throughput of queries that suggests we can find some benefit in batching (this targets #3). - Finally, we have some utilities for common cases like having to group by repo id (this is `MultiRendezVous`), and this is all configurable via tunables (and the default is to not do anything). Reviewed By: StanislavGlebik Differential Revision: D27010317 fbshipit-source-id: 4a2397255f9785c6722c02e4d419438fd0aafa07
2021-03-19 18:49:00 +03:00
"common/rendezvous",
"common/rust/caching_ext",
"common/rust/slog_ext",
"common/rust/sql_ext",
"common/scribe_ext",
"common/scuba_ext",
"common/sql_construct",
"common/timeseries",
"common/topo_sort",
"common/type_map",
"common/uniqueheap",
"derived_data",
"derived_data/blame",
"derived_data/changeset_info",
"derived_data/changeset_info/if",
"derived_data/deleted_files_manifest",
"derived_data/fastlog",
"derived_data/filenodes",
"derived_data/fsnodes",
"derived_data/mercurial_derived_data",
"derived_data/skeleton_manifest",
"derived_data/test_utils",
"derived_data/unodes",
"derived_data/utils",
"edenapi_server",
"edenapi_service",
"fastreplay",
"filenodes",
"filenodes/if",
"filestore",
"git/git-pool",
"git/git_types",
"git/git_types/if",
"git/gitimport",
"git/import_tools",
"gotham_ext",
"hgcli",
"hgproto",
"hook_tailer",
"hooks",
"hooks/content-stores",
"hooks/hook_manager_factory",
"lfs_import_lib",
"lfs_protocol",
"lfs_server",
"load_limiter",
"manifest",
"mercurial/bundle_replay_data",
"mercurial/bundles",
"mercurial/mutation",
"mercurial/revlog",
"mercurial/types",
"mercurial/types/if",
"mercurial/types/mocks",
"metaconfig/parser",
"metaconfig/types",
"microwave",
"microwave/builder",
"microwave/if",
"mononoke_api",
"mononoke_api_hg",
"mononoke_hg_sync_job",
"mononoke_types",
"mononoke_types/if",
"mononoke_types/mocks",
"mutable_counters",
"newfilenodes",
"observability",
"permission_checker",
"phases",
"pushrebase",
"quiet_stream",
"reachabilityindex",
"reachabilityindex/common",
"reachabilityindex/if",
"reachabilityindex/skiplist",
"reachabilityindex/test-helpers",
"regenerate_hg_filenodes",
"repo_attributes/repo_derived_data",
"repo_attributes/repo_identity",
"repo_client",
"repo_client/getbundle_response",
"repo_client/mononoke_repo",
"repo_client/obsolete",
"repo_client/remotefilelog",
"repo_client/repo_read_write_status",
"repo_client/reverse_filler_queue",
"repo_client/scribe_commit_queue",
"repo_client/streaming_clone",
"repo_client/unbundle",
"repo_client/wirepack",
"repo_factory",
"repo_factory/test_repo_factory",
"repo_import",
"revset",
"revset/revset-test-helper",
"segmented_changelog",
"segmented_changelog/bench/concurrent_idmap",
"segmented_changelog/types",
"server",
"server/context",
"server/monitoring",
"server/qps",
"server/repo_listener",
"server/session_id",
"sshrelay",
"streaming_clone",
"tests/fixtures",
"tests/utils",
"tests/write_stub_log_entry",
"time_window_counter",
"tunables",
"tunables/tunables-derive",
"unbundle_replay",
"walker",
]