Commit Graph

2050 Commits

Author SHA1 Message Date
Jan Mazur
64de2b3abf git_types: remove unused dependency on old futures
Summary: as in the title

Reviewed By: krallin

Differential Revision: D25531446

fbshipit-source-id: afa4858f8f18182f206234e69b242c20a2af6b2a
2020-12-14 06:39:01 -08:00
Pavel Aslanov
32585287f1 convert changeset creation to new type futures
Summary: Convert changeset creation to new type futures

Reviewed By: krallin

Differential Revision: D25430405

fbshipit-source-id: 64eb6dbc324846408e60c77e273c5d5edfd59318
2020-12-11 13:55:46 -08:00
Jan Mazur
47dd7719f7 mononoke_types: remove dependency on old_futures
Summary: Just removing unused dependencies

Reviewed By: ahornby

Differential Revision: D25492832

fbshipit-source-id: 5c9ace2c9a333a4d74239a5d7d8dfb9fbe1c772e
2020-12-11 06:54:28 -08:00
Alex Hornby
fec3ef773c mononoke: introduce RepoRequirement enum to MononokeAppBuilder
Summary: Allows a binary to specify if the repo args are required on command line, and if so if OnlyOne of AtLeastOne is the requirement.

Reviewed By: farnz

Differential Revision: D25422757

fbshipit-source-id: 44d27c954bd1e0fa38b2d44c1c3b2eac3e50bd0c
2020-12-11 04:30:02 -08:00
Thomas Orozco
6cf130f41f mononoke/mononoke_api: make Repo and its new_test methods available to dependents
Summary:
This is useful to e.g. write tests in things that use mononoke_api (such as
edenapi): the test mode isn't transitive across crates. This also requires
making Repo itself public, since callers might reasonably want to create one.

I've also updated a few of the accessor methods that were `pub(crate)` given
that what we had right now seemed like it was kinda random: some things were
`pub(crate)`, others were just `pub`.

Reviewed By: markbt

Differential Revision: D25467624

fbshipit-source-id: 2279d4196e8dc0e7e1729239710d900b351be816
2020-12-11 03:47:18 -08:00
Alex Hornby
6186481782 mononoke: factor out repo name and id resolution in cmdlib
Summary: Factor out functions in preparation for change that uses them to optionally resolve multiple repos from cmdlib

Differential Revision: D25422754

fbshipit-source-id: e0bd33ae533b1450e7084d78bd1765148b71bc76
2020-12-11 01:36:06 -08:00
Alex Hornby
f2ca14b1bf mononoke: add hg derived data shortcut to walker node types
Summary: Could already specify "bonsai" useful to be able to pass "hg".

Reviewed By: farnz

Differential Revision: D25367322

fbshipit-source-id: aca6d22f98394af49e3d94d5fd533bc9a25a6869
2020-12-11 01:36:06 -08:00
Alex Hornby
946472a110 mononoke: make BlobConfig hashable
Summary:
This is useful for jobs running multiple repos as it can then open the blobstore as many times as there are storage configs rather than as many times as there are repos.

Used in a diff I'm working on to group repos by storage config in a HashMap when setting up the walker to scrub multiple repos from single process.

Reviewed By: farnz

Differential Revision: D25422758

fbshipit-source-id: 578799db63dcf0bce4a79fca9642651601f2deeb
2020-12-11 01:36:06 -08:00
Alex Hornby
22d77348cd mononoke: remove unnecessary static lifetime in walker constants
Summary: also makes ERROR_MSG a constant

Reviewed By: farnz

Differential Revision: D25422756

fbshipit-source-id: e2f2b9122e2b90c7cb07b7d64156055d55c8c653
2020-12-11 01:36:06 -08:00
Robin Håkanson
b1c416c56c Extend gitimport functionality
Summary:
Following features added to gitimport, both the library rutine and the command line version.

* Define your own parts of a git-library to import by implementing the `GitimportTarget` trait.
* Added `GitimportTarget` implementation
 `ImportMissingForCommit` that will search for any missing reference in Mononoke for the specified git-commit and import them. Note that it will not import commits unreachable by the specified commit history.
* Added support to update the bonsai<->git commit mapping while importing commits.
* Commit import progress is now shown, making it a bit easier to estimate how big an import job is and how long it will take.
* Adding optional git-repo name. This is useful when using gitimport as a library to import missing commits from many repositories simultaneously.
* Email to author is now added in the author field.
* Committer information is now also exported.
* Optimized the blob-store import by checking if a blob already exists prior to importing it.
* Added brief functions to basic hash structs, this is to get only the first 4 bytes (8 hex chars) for easier human inspection and debugging.
* Added support to suppress the long ref->BonzaiID mapping (on by default to match old behavior).

Reviewed By: krallin

Differential Revision: D25445974

fbshipit-source-id: 6dc7f977b61ceec1a95b5f3c38548ac8eddbea27
2020-12-10 17:26:22 -08:00
Michael Samoylenko
9009f86713 Add Debug/Copy/Clone to PoolSizeConfig
Summary: Makes it a bit easier to use.

Reviewed By: markbt

Differential Revision: D25439113

fbshipit-source-id: 2c5da338a7000573ac92435c8982f5adff71bf42
2020-12-10 12:05:16 -08:00
Thomas Orozco
b766407054 mononoke/caching_ext: unify our cache stats reporting
Summary:
I'd like to lower the bar to entry as much as possible to use caching in e.g.
mappings. One thing that's a little annoying to setup right now is stats. Let's
unify those.

This does mean the stats names for mappings that had them will change, but I
think that's probably OK here.

A few notes about the implementation:

- I made the stats objects singletons, because ultimately that *is* what stats
  are under the hood.
- I made a macro to define the singleton because that was otherwise really
  verbose.

Reviewed By: farnz

Differential Revision: D25461182

fbshipit-source-id: f30d0908c40d8e0010c546ec95a385a06d557757
2020-12-10 12:01:45 -08:00
Kostia Balytskyi
a76550859d admin: make rsync capable of working across repos
Summary:
This adds support for replacing things in the small repo with the things from
the large repo. This is useful when changing the bind.

This diff slightly changes how `rsync` is called: now `--source-csid`,
`--target-csid`, `--from-dir` and `--to-dir` are all specified before the
`copy`/`remove-excessive-files` subcommands.

There's still an ability to use this within a repo, as you can pass identical
source and target repos.

Reviewed By: StanislavGlebik

Differential Revision: D25087893

fbshipit-source-id: 6e5881f80d91ef4b794a967cf9f26dd3af7f56c9
2020-12-10 11:45:08 -08:00
Stanislau Hlebik
52e7d42458 mononoke: fix blobimport importing a 0 revision only
Summary:
We had a small bug in blobimport. If mononoke repo is empty and blobimport
tries to import a single revision whose rev number is 0 then it will
successfull import it but it will report that no revision were imported
i.e. it will print "didn't import any revision" to stderr and won't update the
manifold latest imported revision marker.

That was because we didn't update max_rev_and_bcs_id if rev is equal to
max_rev. This diff fixes it.

Reviewed By: ahornby

Differential Revision: D25421164

fbshipit-source-id: 639ead0ac326a14051d3a4faba568ecb797857a2
2020-12-10 11:29:37 -08:00
Thomas Orozco
701c4116ab mononoke/caching_ext: limit concurrency of memcache operations
Summary: See D25396203 for discussion. 100 is better than nothing.

Reviewed By: StanislavGlebik

Differential Revision: D25460398

fbshipit-source-id: 608a2dca9c381c78daf0e7d9bcbd1a32f201030a
2020-12-10 10:24:58 -08:00
Thomas Orozco
01d5bd2c4e mononoke/caching_ext: rename CacheDispositionNew
Summary:
I had to have two of those while I was refactoring away the old style of
doing get or fill, but now that that's gone, we can have a single one and clean
up.

Reviewed By: StanislavGlebik

Differential Revision: D25396201

fbshipit-source-id: 459e9ec7e44e8b349c585212c2758d64077e56d1
2020-12-10 10:24:58 -08:00
Thomas Orozco
c844c0c74b mononoke/caching_ext: remove 0.1 futures
Summary:
All the code that needed it basically gone. Might as well push the compat()
calls a little further down and be done with 0.1 futures here.

Reviewed By: StanislavGlebik

Differential Revision: D25396202

fbshipit-source-id: ae85f61c03cb2c38eabbaf0d45387f9d4422b336
2020-12-10 10:24:58 -08:00
Thomas Orozco
6427a8e10d mononoke/caching_ext: remove 0.1 GetOrFillMultipleFromCacheLayers
Summary: All the callsites are gone now.

Reviewed By: StanislavGlebik

Differential Revision: D25396205

fbshipit-source-id: 74d0595c4528dc739d254f5dc950157e087b00dd
2020-12-10 10:24:58 -08:00
Thomas Orozco
06b6e35a85 mononoke/phases: update to futures 0.3 get_or_fill
Summary:
Like it says in the title. The upshot here as well is a lot less cloning.

While in there, I removed the "caching" module since it basically only
contained a couple of things that were all needed in the sql module anyway.

Reviewed By: StanislavGlebik

Differential Revision: D25396208

fbshipit-source-id: aa6381c78f45a94fecd04544196180d2a918f97d
2020-12-10 10:24:58 -08:00
Thomas Orozco
bf8f4048e3 mononoke/caching_ext: add fill_cache to 0.3 variant
Summary: We need this in Phases, so let's add it there.

Reviewed By: StanislavGlebik

Differential Revision: D25396207

fbshipit-source-id: 34174f205028b95c9aa382c343b1344265391df2
2020-12-10 10:24:58 -08:00
Thomas Orozco
a56d1509d1 mononoke/changesets: update to futures 0.3 get_or_fill
Summary:
Like it says in the title. This reduces cloning.  Unlike our cached mappings,
changesets have only way of being queried, so other than cloning, it doesn't
make a huge difference.

Reviewed By: StanislavGlebik

Differential Revision: D25396206

fbshipit-source-id: 45d3ebd403142a3f1d9e3ba7de5de2bf18317165
2020-12-10 10:24:58 -08:00
Thomas Orozco
dbf26aed73 mononoke/changesets: rename futures -> futures-old
Summary:
Like it says in the title. I need the new futures module in there later in this
stack so this makes it cleaner.

Reviewed By: StanislavGlebik

Differential Revision: D25396200

fbshipit-source-id: 0148003c83b3dd0da5142eb468cf3a6ae2f74b7a
2020-12-10 10:24:58 -08:00
Thomas Orozco
eb96570de3 mononoke/bonsai_hg_mapping: update to futures 0.3 get_or_fill
Summary:
Like it says in the title, this updates bonsai_hg_mapping to a futures 0.3
implementation of get_or_fill.

The upshot is that this requires less cloning (in fact, no cloning at all if
the rest of the code was 0.3 here), and in this particular instance it also
lets us completely get rid of the `from_bonsai` flag we were threading through
the whole method and checking many times.

Reviewed By: StanislavGlebik

Differential Revision: D25396199

fbshipit-source-id: f8126c96aad8d982c3deb535530484bec841929f
2020-12-10 10:24:58 -08:00
Thomas Orozco
3ef4906113 mononoke/bonsai_globalrev_mapping: update to 0.3 futures get_or_fill
Summary:
Like it says in the title. Let's update this to the new get_or_fill
implementation that uses 0.3 futures.

Reviewed By: StanislavGlebik

Differential Revision: D25396204

fbshipit-source-id: 06bf449a0d15bd19625acfdcbb4578948e57cde7
2020-12-10 10:24:58 -08:00
Thomas Orozco
0708585c16 mononoke/caching_ext: introduce a futures 0.3 GetOrFillMultipleFromCacheLayers
Summary:
Like it says in the title, this adds a futures 0.3 variant of
GetOrFillMultipleFromCacheLayers. However, I didn't just port the code as-is,
since the code as it stands wouldn't have been very idiomatic if I did.

Instead, I refactored this to be a function and a few traits. I've also kept
the old code for now, and I'll remove it once I've converted all the callistes.

The upshot of the proposed refactor here is that it should be easier to use
this without having to heavily duplicate the instantiation of the "cacher" in
places where we have multiple variants that are cached (e.g. mappings), all the
while being able to leverage the type checker. See D25334478 (13255301b0) for a discussion
on this. This new approach also makes it much easier to work with the tests for
this (you can just mutate the store and access its fields).

Reviewed By: StanislavGlebik

Differential Revision: D25396203

fbshipit-source-id: d706729a800faa4b12fcf5e608c6dee93c5a909e
2020-12-10 10:24:57 -08:00
Alex Hornby
8d997846e3 mononoke: remove fsnode from default walker params
Summary: Switching to specify derived data types other than hg explicitly on the command line

Reviewed By: farnz

Differential Revision: D25367323

fbshipit-source-id: 0e0aea1aab46b43b325486ed6161ea322f7cec4b
2020-12-10 05:28:45 -08:00
Thomas Orozco
c9568598fb mononoke/manifest: add Entry::map_leaf and Entry::map_tree
Summary: It's useful sometimes, like in the next diff.

Reviewed By: mitrandir77

Differential Revision: D25422597

fbshipit-source-id: 0ebb5dcc349bbaacac3dddf03f19e5e092042468
2020-12-10 03:07:45 -08:00
Saurabh Singh
0f465f7dc9 hooks: show the size of the large commit being blocked
Summary:
This is useful data to see how much we are over the limit. I noticed
the missing data while resolving
https://fb.workplace.com/groups/scm/permalink/3450652774984318/ as the oncall.

Reviewed By: StanislavGlebik

Differential Revision: D25414427

fbshipit-source-id: ec4bbca9c21a4bf0e675ec1cd82e4e703cd88631
2020-12-09 16:44:41 -08:00
Stefan Filip
e7be876b6f blobrepo: update factory to set SegmentedChagelog on the production setup
Summary:
Same as development branch. Without configuration changes, nothing changes for
the production codepath.

Reviewed By: quark-zju

Differential Revision: D25405026

fbshipit-source-id: aff705aa5f96814f1f1d7552454ab1d0c13afd92
2020-12-08 18:30:25 -08:00
Stefan Filip
5f6d1a2c61 edenapi: add full_idmap_clone endpoint
Summary:
The end goal is to have clients using a sparse IdMap. There is still some work
to get there though. In the mean time we can test repositories that don't use
any revlogs. The current expections for those repositories are that they have
a full idmap locally.

Reviewed By: quark-zju

Differential Revision: D25075341

fbshipit-source-id: 52ab881fc9c64d0d13944e9619c087e0d4fb547c
2020-12-08 18:30:24 -08:00
Stefan Filip
3afaeb858a segmented_changelog: add SegmentedChangelog::full_idmap_clone_data
Summary:
The client dag cannot currently be instantiated with a sparse idmap (aka
universal commit idmap). Is should be usable with a full idmap.  To test
repositories that use segmented changelog exclusively we add the capability of
cloning the full idmap.

I currently see StreamCloneData as an experiment. I am open to suggestions
around what structure we should have for the regular long term clone endpoint.
That said, I am leaning towards converting clone_data to return
StreamCloneData.  Overall, Segmented Changelog has a few knobs that influence
how big the IdMap ends up being so the code that is more flexible will be more
useful long term.  To add to that, we transform data higher in the stack using
streaming and this data does similar fetching, it seems that we should have a
stream idmap exposed by clone_data.

Reviewed By: quark-zju

Differential Revision: D24966338

fbshipit-source-id: 019b363568e3191280bd5ac09fc15062711e5523
2020-12-08 18:30:24 -08:00
Stefan Filip
2193b84b43 autocargo: regen
Summary: Regen autocargo

Reviewed By: quark-zju

Differential Revision: D25409963

fbshipit-source-id: 7dbbe420aeb30248bf43d3a96a9aa6a47bb2b0be
2020-12-08 18:30:24 -08:00
Thomas Orozco
6b04c4d7d2 mononoke/warm_bookmarks_cache: don't initialize ALL bookmarks at once
Summary:
All the bookmarks is *a lot* of bookmarks. Don't do them all at once. Also, add
some logging output so we can tell how far along we are.

Reviewed By: HarveyHunt

Differential Revision: D25397297

fbshipit-source-id: c19b99123f88e05e99bff61e2399a62d378a6671
2020-12-08 08:30:56 -08:00
Lukas Piatkowski
00fe313eff mononoke/unbundle: get rid of futures 0.1
Summary: Also added a TryShared future to futures_ext. The problem with regular Shared is that if you want to share anyhow::Result the Error part of it is not cloneable. This TryShared will work nicely when returning anyhow::Result, which most of our code does.

Reviewed By: aslpavel

Differential Revision: D25223317

fbshipit-source-id: cf21141701884317a87dc726478dcd7a5a820c73
2020-12-07 20:41:26 -08:00
Thomas Orozco
16bac45a07 mononoke/bonsai_globalrev_mapping: set perf counters
Summary:
Like it says in the title. This is helpful to measure the number of SQL queries
we make. This required actually threading in a CoreContext, which we didn't
have before.

Reviewed By: StanislavGlebik

Differential Revision: D25336069

fbshipit-source-id: 35677c55550e95b5126de29c2a824b4eda32092c
2020-12-07 08:23:19 -08:00
Thomas Orozco
482ab2d2a6 eden/mononoke: allow turning on the bonsai / globalrev cache
Summary: Like it says in the title.

Reviewed By: StanislavGlebik

Differential Revision: D25336068

fbshipit-source-id: 113050215c28a28c820d938348a0a3e54c14c3ee
2020-12-07 08:23:19 -08:00
Thomas Orozco
13255301b0 mononoke/bonsai_globalrev_mapping: add caching
Summary:
Like it says in the title, this adds a caching layer around Globalrevs using
our existing `GetOrFillMultipleFromCacheLayers` abstraction.

Note: I've opted to not track dedicated metrics for this (compare to the hg
mapping to see them), since I don't believe we really ever look at them.

I'd like to do a little bit of refactoring of
`GetOrFillMultipleFromCacheLayers` to a) track them without having to ad-hoc
code it, b) convert it 0.3 futures, and c) require less ceremony to call it.
However, I'll do so in another diff.

Reviewed By: StanislavGlebik

Differential Revision: D25334478

fbshipit-source-id: 1385298b8fdf1cd081b6e509c6c3e03b3abbfa5b
2020-12-07 08:23:19 -08:00
Thomas Orozco
ec0bff0b82 mononoke/bonsai_globalrev_mapping: split out sql module
Summary: This lib.rs is getting too big. Split it.

Reviewed By: StanislavGlebik

Differential Revision: D25333510

fbshipit-source-id: ea15664d2de21a24ee107162e030b7762b1d413e
2020-12-07 08:23:19 -08:00
Thomas Orozco
00c3297c49 mononoke/bonsai_globalrev_mapping: make point queries default impl methods
Summary:
I'd like to add a caching variant for this. Might as well not have to rewrite
those methods on an ad-hoc basis.

Reviewed By: StanislavGlebik

Differential Revision: D25333461

fbshipit-source-id: 632c0307189fe15a926d808c1eeca1e3f240eb19
2020-12-07 08:23:18 -08:00
Thomas Orozco
1ec5537e9e mononoke/bonsai_globalrev_mapping: update to futures 0.3
Summary: Like it says in the title.

Reviewed By: StanislavGlebik

Differential Revision: D25333450

fbshipit-source-id: 49ad4b1964a4dfd9f3e0108fa421d451ef905256
2020-12-07 08:23:18 -08:00
Stanislau Hlebik
40b67f9d09 mononoke: do not use batched in derived_data_tailer
Reviewed By: ikostia

Differential Revision: D25366938

fbshipit-source-id: 9b10853b1fdf5ee281187067aa768fa52e6d3074
2020-12-07 02:51:45 -08:00
Kostia Balytskyi
3ed778a5ea observability: add dynamic level drain
Summary:
This makes logs go through a `Drain` which queries `ObservabilityContext` (introduced in a previous diff) for current logging level.  ATM I did not add any tests, and it's pretty easy to add a unit-test checking that the drain indeed respects the level, but it's so simple that I am not 100% convinced that test would be all that valuable.

Note that currently `ObservabilityContext` is enabled in a `Static` variation.

Reviewed By: mitrandir77

Differential Revision: D25232400

fbshipit-source-id: 7499916e0a3ddab43538343e6ed215818517eaf7
2020-12-04 14:30:29 -08:00
Kostia Balytskyi
c60fcebc12 observability: introduce ObservabilityContext
Summary:
`ObservabilityContext` is a structure that helps logging facilities within Mononoke to make logging decisions. Specifically, the upcoming `DynamicLoggingDrain` and already existing `MononokeScubaSampleBuilder` will have this structure as a component and decide whether a particular logging statement (slog or scuba) should go ahead.

Internally, `ObservabilityContext` is a wrapper around data received from a [configerator endpoint](https://www.internalfb.com/intern/configerator/edit/?path=scm%2Fmononoke%2Fobservability%2Fobservability_config.cconf).

This diff makes a few unobvious decisions about how this is organized. My goals were:
1. to have production (i.e. reading from configerator), static (i.e. emulating current prod behavior) and test variants of `ObservabilityContext`
1. to avoid having consumers know which of these variants are used
1. to avoid making all consumers of `ObservabilityContext` necessarily generic
1. to avoid using dynamic dispatch of `ObservabilityContext`'s methods

Points 3 and 4 mean that `ObservabilityContext` cannot be a trait. `enum` is a common solution in such cases. However, if `ObservabilityContext` is an `enum`, consumers will know which variant they are using (because `enum` variants are public). So the solution is to use a private enum wrapped in a struct.

Reviewed By: mitrandir77

Differential Revision: D25287759

fbshipit-source-id: da034c71570137e8a8fb7749b1e4ad43be482f66
2020-12-04 14:30:29 -08:00
Alex Hornby
28d4471f75 mononoke: no need to collect walker iterators
Summary: Can just pass on the iterator

Reviewed By: ikostia

Differential Revision: D25216892

fbshipit-source-id: 79c08737477ac7ed1f824c50105d5977ee592126
2020-12-04 03:07:05 -08:00
Alex Hornby
c1a563a1c6 mononoke: remove --cachelib-only-blobstore from walker test cmdlines
Summary: Its now the default for this binary, might as well shorten the test command lines

Reviewed By: ikostia

Differential Revision: D25219717

fbshipit-source-id: 8074145c6f05f26ab7fa18d2ff399482ad592885
2020-12-04 03:07:05 -08:00
Alex Hornby
591363e1c4 mononoke: allow binaries to specify a default for cachelib-only-blobstore
Summary: Reduces boilerplate for binaries usually run in this mode, notably the walker

Reviewed By: ikostia

Differential Revision: D25216883

fbshipit-source-id: e31d2a6aec7da3baafd8bcf208cf79cc696752c0
2020-12-04 03:07:04 -08:00
Alex Hornby
54bda6537d mononoke: allow binaries to default a blobstore read qps
Summary: This is useful to prevent accidentally consuming too much.  Enabled it for the walker

Reviewed By: ikostia

Differential Revision: D25216880

fbshipit-source-id: e80f490d6ece40d64cc8609e7d6b80d0ecbb1671
2020-12-04 03:07:04 -08:00
Alex Hornby
f814075cee mononoke: allow binaries to default blobstore-cachelib-attempt-zstd option
Summary: Reduces boiler plate on command line for binaries like walker that want different default

Reviewed By: krallin

Differential Revision: D25216876

fbshipit-source-id: 0df474568d28e0726be223e9dc0a760523063d21
2020-12-04 03:07:04 -08:00
Egor Tkachenko
8c5d77f0f8 Adding connection pool for darkstorm
Summary: Darkisilon cell consists of multiple hosts which shares underlying storage, so write to one of them is visible for all hosts. Lets spread requests between all these hosts. I'll get list of hosts from the smc tier and will randomly connect to one on each request.

Reviewed By: krallin

Differential Revision: D25163782

fbshipit-source-id: b28085dd37b15972469b7334a47def473e10f34e
2020-12-03 17:10:42 -08:00
Stefan Filip
1c310c516b derived_data: remove unused import
Summary: Fix the build.

Reviewed By: ikostia

Differential Revision: D25315064

fbshipit-source-id: 1f4da8b47eda7f9177ef0c2c6eddbdb374640472
2020-12-03 14:17:52 -08:00