Commit Graph

2904 Commits

Author SHA1 Message Date
Alex Hornby
c77b388122 mononoke: add HgManifestFileNode steps to walker
Summary:
HgManifestFileNode is one of the last remaining types we don't walk ( other known one is the git derived data).

Its added as a separate NodeType from HgFileNode as HgManifestFileNode is used much less and users may want to see only the HgFileNodes.   Server side the manifest file node is only used to build the bundles returned to the client.

Differential Revision: D28010248

fbshipit-source-id: ce4c773b0f1996df308f1b271890f29947c2c304
2021-04-28 02:09:52 -07:00
Thomas Orozco
8e3f5419f6 mononoke: update Manifold client used by blobimport
Summary:
This uses code that depends on Tokio 0.x so let's get this removed. I think
I could have updated this to just use manifold-thrift, but while I'm at it,
might as well update to the new shiny client.

Reviewed By: farnz

Differential Revision: D28025165

fbshipit-source-id: 4b79c8a4bd0b8789e6827d2135d36245db4447d5
2021-04-28 01:03:19 -07:00
Stefan Filip
bf14b9d5c7 edenapi_service: fix stats for bookmarks endpoint
Summary:
Fix missing stats for the bookmarks endpoint because we have the wrong name in
code.

Reviewed By: quark-zju

Differential Revision: D28008091

fbshipit-source-id: 128fe00e00a06ebe9b65fb11512cd03a042d55fe
2021-04-27 11:16:40 -07:00
Thomas Orozco
eb3f97b858 mononoke/gotham_ext: remove ForwardErr
Summary: This is not used anymore.

Reviewed By: sfilipco

Differential Revision: D27998038

fbshipit-source-id: 7f8de56897931d72e6bc3405b463a2302d5da6a3
2021-04-27 11:00:16 -07:00
Thomas Orozco
f8e523e74d mononoke/edenapi_service: stop using forward_err
Summary:
This doesn't link the errors into Scuba, which makes it not very useful for
debugging, since we're not routinely looking at stderr on our tasks, and makes
it impossible to e.g. look anywhere and find a count of failed requests.

Instead, update this to use `capture_first_err`, which will report both the
first error and the total error count to Scuba.

Reviewed By: sfilipco

Differential Revision: D27998037

fbshipit-source-id: b941d44a2ac21bbf640b9bc977de749207f12d9a
2021-04-27 11:00:16 -07:00
Thomas Orozco
f1a4c3e615 mononoke/gotham_ext: introduce CaptureFirstError
Summary:
In EdenAPI, most endpoints don't raise errors when they fail, and instead just take items out of the response stream (though there are some exceptions: D24315399 (0ccae1cef9).

Right now, this just gets logged to stderr, which isn't great. This diff introduces a CaptureFirstError wrapper we can use to capture those errors and expose them in post-response callbacks (i.e. Scuba).

Reviewed By: sfilipco

Differential Revision: D27998036

fbshipit-source-id: 960d0e09a82ca79adfafe22e2eeef2e0294d27dc
2021-04-27 11:00:16 -07:00
Aida Getoeva
eeb7c00c7f mononoke/mysql: move raw xdb API to shed/sql:sql_facebook
Summary:
This raw XDB connections API is not used in Mononoke although there are projects depending on it.

The API creates connection objects based on shed/sql crate.
This diff moves `SqlConnections` into `shed/sql:sql_common`, closer to the `Connection` definition, and moves `create_raw_xdb_connections` API into the `shed/sql:sql_facebook::raw`.

Reviewed By: krallin

Differential Revision: D28003638

fbshipit-source-id: ea4a29b6e239a89c97237877e2dfde4c7c7ff89b
2021-04-27 10:20:33 -07:00
Ilia Medianikov
2df2d3c678 mononoke/pushrebase: remove re-exporting of hook definitions from the crate
Summary:
As I split the pushrebase crate in D27968029 (93b8cf116b) it makes sense to stop re-exporting hook definitions from it.
This change will also make dependencies more accurate.

Reviewed By: krallin

Differential Revision: D28028045

fbshipit-source-id: 622ef5d7db737e19153109f4d2dcefe54fba2bb4
2021-04-27 09:53:36 -07:00
Stanislau Hlebik
c35a78c649 mononoke: add a tool to copy blobs from one repo to another
Reviewed By: krallin

Differential Revision: D28024373

fbshipit-source-id: 4954f6d322f924b9291326ef5a948a1c52230955
2021-04-27 08:54:34 -07:00
Thomas Orozco
006932c7bc mononoke/gotham_ext: remove DefaultScubaHandler
Summary: It's not used.

Reviewed By: mitrandir77

Differential Revision: D27967990

fbshipit-source-id: 0c332e6ef44af369fdd943a759342210f2e65e4a
2021-04-27 08:10:34 -07:00
Thomas Orozco
d68e8343e6 mononoke/gotham_ext: capture errors from EndOnErr
Summary:
Finally! This is basically the end goal of this stack (though we still need to
do the same thing with the "ForwardErr" combinator used by EdenAPI next).

With this, we can now capture errors that occur while sending the response
stream, instead of just errors that occur while producing the response (which
is usually a little piece of the work we have to do).

Reviewed By: mitrandir77

Differential Revision: D27967991

fbshipit-source-id: a5483c58f0550a19e711e712cf860d9328a0eb9e
2021-04-27 08:10:34 -07:00
Thomas Orozco
79d06afa5d mononoke/gotham_ext: rename ContentMeta trait
Summary:
`ContentMeta` sounds a lot like a struct containing content metadata, so let's
rename this to something less ambiguous (`ContentMetaProvider`).

The reaosn I'm doing this now is because I'd like to introduce a similar
trait for errors that occur on our response streams and there I'll need
both a struct and a trait.

Reviewed By: mitrandir77

Differential Revision: D27998039

fbshipit-source-id: f0372c62d13167ef4bd07cb9e9e9fb75ea105b9a
2021-04-27 08:10:34 -07:00
Thomas Orozco
2319315b16 mononoke/gotham_ext: report errors via PostResponseInfo
Summary:
Like it says in the title. The goal here is to make it not matter where the
error came from. In this diff, we capture the same errors as before, but we
do it via PostResponseInfo instead of via ad-hoc things in our `State`.

Reviewed By: mitrandir77

Differential Revision: D27967994

fbshipit-source-id: dbbb1a8f5ea1a439089c41b4a08cd6088476ae33
2021-04-27 08:10:34 -07:00
Thomas Orozco
1268f3221d mononoke/gotham_ext: deduplicate a bit of code
Summary: Like it says in the title.

Reviewed By: mitrandir77

Differential Revision: D27967992

fbshipit-source-id: 0deb4d90538a6889bee6b41de4c5d1533b29519b
2021-04-27 08:10:34 -07:00
Thomas Orozco
c3b1479215 mononoke/gotham_ext: move error formatting out of HttpError
Summary:
Very small refactor. I want this stuff to all be in the same module instead
of spread across `response` and `error`.

Reviewed By: mitrandir77

Differential Revision: D27967993

fbshipit-source-id: aca22f952d756d298e5e342f0c4f8ebd31f108bf
2021-04-27 08:10:34 -07:00
Thomas Orozco
fe3419ff98 mononoke/gotham_ext: unify response meta for deferred vs. immediate responses
Summary:
This is a bit of an abstract change, but the goal of this change is to make
post-response handlers oblivious to the distinction between sending a response
(or failing to send one) and returning a response that actually contains a
(fallible) stream.

The underlying / ultimate goal here is to move our error reporting out of
ad-hoc router wrappers where we call `set_error_message` on some context
entity, and to instead move it into post-response callbacks.

The upshot of that is that if we fail to send a response even though we sent a
200 from the handler, we'll be able to log it! Indeed, remember that when
sending a streaming response, we have to send a 200 to start streaming but we
might hit an error producing later parts of the response!

Reviewed By: mitrandir77

Differential Revision: D27966422

fbshipit-source-id: ab49639bfcc4af23ddc2e84181278f105ebb28b9
2021-04-27 08:10:34 -07:00
Thomas Orozco
8315a7c0a9 mononoke/gotham_ext: rename PostRequest to PostResponse
Summary:
This stuff runs after we sent the response, so PostResponse is a more
appropriate name than PostRequest.

Reviewed By: ikostia

Differential Revision: D27966420

fbshipit-source-id: 1f7b7a55490f731eb512793024bcfafb0ea4ef79
2021-04-27 08:10:34 -07:00
Thomas Orozco
0205634fe1 mononoke: unify lfs & edenapi response factories
Summary:
Those two have historically used different (but largely copy pasted) code to
produce their responses. Let's unify them by

While in there, let's also modernize the formatting a little bit by letting
anyhow do the formatting for us (we used to use `failure` when this code was
written, and it didn't do it).

There's a bit of ugliness here in the sense that out formatting is injecting
the error into the state so it can be logger later. This is equivalent to what
we had, but it's kinda clonwy. That said, I'm working on refactoring our error
handling in this stack, so the plan is to clean this up (i.e. it won't stay
very long).

Finally, note that this diff removes the `ResponseCreationFailure` error kind
in LFS. This is replaced by a `.context()` in `gotham_ext`. That said, we never
really use this stuff: creations are fallible in Hyper but you only run into
an error if you e.g. forget to add a status code, so we don't expect them to
actually occur outside of development.

Reviewed By: mitrandir77

Differential Revision: D27966421

fbshipit-source-id: 097f3b69f25fe39f8fbef925a272e88199896b39
2021-04-27 08:10:34 -07:00
Thomas Orozco
22e5458127 mononoke/gotham_ext: split up & rename content stream module
Summary:
Like it says in the title, I'd like to use names that reflect that this isn't
just *any* content stream: it's specifically for responses.

Reviewed By: ahornby

Differential Revision: D27964045

fbshipit-source-id: 50530cf85ba7840a2baa14151351d0b288d9ae70
2021-04-27 08:10:34 -07:00
Thomas Orozco
5c830dd5e1 mononoke/gotham_ext: move response-related things into a response module
Summary:
We have a set of things that are meant to be used together that are spread
across 3-4 different modules. Let's move them together. This also allows us to
make some things (e.g. the `ContentMeta` trait) private as they're no longer
needed.

Note: this diff only move stuff around & renames things a bit. I'll also split
some of those modules in the next diff.

Reviewed By: HarveyHunt

Differential Revision: D27964047

fbshipit-source-id: 02528d84adfd70ec346c32163cb185d89266a53e
2021-04-27 08:10:34 -07:00
Thomas Orozco
47654a9d51 mononoke/gotham_ext: move content_encoding to its own top level module
Summary:
We have a module called "content" that contains two completely unrelated
things: some enums for content encodings (+ associated parsing), and our output
streams.

I'd like to add more of said output streams, so let's clean this up.

Reviewed By: HarveyHunt

Differential Revision: D27964046

fbshipit-source-id: b42e56aa3fadaf9b93a44216977da19d950a16b9
2021-04-27 08:10:34 -07:00
Thomas Orozco
e5cc9a1f3d mononoke: remove now-unnecessary stream spawning
Summary:
We used to have to do this because of overly strict trait bounds in Hyper, but
we no longer do, so let's get rid of it. Note that we have one Tokio task per
request, and polling the response stream is basically the only thing that task
does, so this should make little difference as far as task scheduling is
concerned besides avoiding unnecessary context switches.

Reviewed By: ahornby

Differential Revision: D27963458

fbshipit-source-id: 24e762eb173156dab909fefe11dcf2d58272048a
2021-04-27 08:10:34 -07:00
Thomas Orozco
9e36520024 mononoke/gotham_ext: remove FuseOnErr
Summary: We don't use this anymore. Might as well remove it.

Reviewed By: ahornby

Differential Revision: D27963411

fbshipit-source-id: a6ac337936e8b2bd788dd79a835eef11b19dde70
2021-04-27 08:10:33 -07:00
Kostia Balytskyi
29c95d2b38 blobstore: fix confusing comment about an exported macro
Reviewed By: StanislavGlebik

Differential Revision: D28026865

fbshipit-source-id: 57701d59fe6048e78ceebd32ed7e0437e052c305
2021-04-27 07:57:21 -07:00
Kostia Balytskyi
8a273fbd9d mononoke_api: use TestMononokeMegarepoConfigs depending on cli
Summary:
This change makes it so that our binaries do not instantiate a real configo
client in integration test setup.

Reviewed By: ahornby

Differential Revision: D28026790

fbshipit-source-id: 0fb9ce66a1324e845f4b8a80d4479263ec6e4ee1
2021-04-27 06:37:34 -07:00
Alex Hornby
923c6c6b52 mononoke: introduce WrappedPathHash to walker
Summary:
First, some background on the existing WrappedPath type:   In Mononoke the MPath type is such that  None==Root and Some(MPath)==NonRoot. This means that where a path may be present one needs to use double-Option with Option<Option<MPath>>, so that Root is Some(None).

To reduce the need for double Option, and subsequently to allow for newtype features like memoization, the walker has WrappedPath, so we can use Option<WrappedPath> instead.

This change introduces a similar type WrappedPathHash for MPathHash, which means that the sample_fingerprint for WrappedPath can be now be non-optional as even root paths/manifests can now have a sample_fingerprint.

Reviewed By: mitrandir77

Differential Revision: D27995143

fbshipit-source-id: b674abd4ec94749f4f5797c697ae7381e1a08d02
2021-04-27 06:00:02 -07:00
Alex Hornby
3f56e43575 mononoke: collect walker logging for packer
Summary:
This adds the first part of new logging from the walker that can be used to gather details on what keys might make sense to pack together.

Unlike the corpus command that dumps file content by path (which was useful for analysis on compression approaches), this adds logging to the scrub command that includes the path hash rather than the full path.  This should keep memory usage down during the run,  hopefully mean we log from existing scrub jobs and and mean the logs are more compact.

Reviewed By: mitrandir77

Differential Revision: D27974448

fbshipit-source-id: 47b55112b47e9b022f16fbb473cf233a7d46bcf3
2021-04-27 06:00:02 -07:00
Ilia Medianikov
449fd2fd02 mononoke/pushrebase_hooks: add a hook that saves prepushrebase changeset id
Summary:
Knowing the prepushrebase changeset id is required for retroactive_review.
retroactive_review checks landed commits, but verify_integrity hook runs on a commit before landing. This way the landed commit has no straightforward connection with the original one and retroactive_review can't acknowledge if verify_integrity have seen it.

Reviewed By: krallin

Differential Revision: D27911317

fbshipit-source-id: f7bb0cfbd54fa6ad2ed27fb9d4d67b9f087879f1
2021-04-27 03:52:50 -07:00
Ilia Medianikov
93b8cf116b mononoke/pushrebase: split pushrebase crate
Summary:
Split pushrebase crate into pushrebase hook definition and pushrebase implementation.
Before this change it was impossible to store an attribute in BlobRepo that would depend on PushrebaseHook as it would create a circular dependency `pushrebase -> blobrepo -> pushrebase`.

Reviewed By: krallin

Differential Revision: D27968029

fbshipit-source-id: 030ef1b02216546cd3658de1f417bc52b8dd9843
2021-04-27 03:52:50 -07:00
Kostia Balytskyi
e4ca9347b8 megarepo: impl config adding methods
Summary:
This diff wires up actual `scs_server` methods `megarepo_add_sync_target_config`, `megarepo_add_sync_target`, `megarepo_add_sync_target_poll` to the underlying logic in the `CfgrMononokeMegarepoConfigs`.

One of these is a synchronous method (`megarepo_add_sync_target_config`), so it is implemented properly. This method only allows adding new configs to an existing target.

The other two are a pair of async methods (create reqest + poll request) for target creation with an initial config. On the one hand, we don't yet have any infrastructure for async methods, so properly implementing this pair is not possible. What's more, target creation is a two-part operation: save a config + create an initial repo commit. Second part is not yet implemented at all (and is what requires async implementation, as it is going to be expensive). On the other hand, I would like to expose the concept of target creation for the client to test, that's why I add `FAKE_ADD_TARGET_TOKEN` to mask a so-far synchronous impl of this method as asynchronous.

Once I implement async methods, I will come back and work on a proper `megarepo_add_sync_target` impl (this is the first method to be implemented).

Important: any use of these methods now should be considered experimental, and we'll have to delete all of these configs later (because all of the targets won't have any corresponding bookmarks in the real repos, which makes them invalid).

Reviewed By: StanislavGlebik

Differential Revision: D27885979

fbshipit-source-id: 9e2a914af1a7db2ec00ffa11a832ddd71fd19d0f
2021-04-26 09:43:42 -07:00
Kostia Balytskyi
82ffc5b731 blobstore: export impl_loadable_storable macro
Summary:
This will help people to introduce new blobstore objects in their code (for
instance I intend to use it in the following diff).

The `private` module exists to allow the use of the exported macro without the
need to write a bunch of `use` statements, and without pollution the re-export
namespace. The idea is that everything needed by the exported macro exists in
the `private` module of the crate, and this module is public.
So long as some other crate imports the macro, it expands to
`$crate::private::NEEDED_THING` in the right places and no further `use`
statements of dependencies are needed. At the same time, the name `private`
should discourage people from using whatever is in this module directly. The
idea is taken from `anyhow`.

Reviewed By: StanislavGlebik

Differential Revision: D27997228

fbshipit-source-id: fd2c421d0daf0fe88e2b9001bb4088fe7b4d59b7
2021-04-26 06:37:22 -07:00
Stanislau Hlebik
fbdd7a453c mononoke: fix regressions during push
Summary:
Collecting into SortedVecMap an unsorted iterator is inefficient, because of
how [try_collect()](https://docs.rs/futures-util/0.3.0/src/futures_util/stream/try_stream/try_collect.rs.html#57) works. It calls `extend()` method every time a new element was fetched from the
stream. So if stream was unsorted, then we ran into a quadratic behaviour with
lots of reallocations.

Let's instead collect into BTreeMap, and then convert it into SortedVecMap.

Reviewed By: markbt

Differential Revision: D27997469

fbshipit-source-id: 58f837e6cc946ccc8809cce3d7a5a2e6ca24df40
2021-04-26 05:28:16 -07:00
Thomas Orozco
ee9bbb67d8 mononoke: add a demo for RendezVous
Summary:
I'd like to have a quick way of documenting how this is supposed to be used,
so let's add it.

Reviewed By: HarveyHunt

Differential Revision: D27996500

fbshipit-source-id: 0d138ac3335a3ecb7f0e15aebbdc89d01941cbed
2021-04-26 04:43:55 -07:00
Simon Farnsworth
323d95f8c8 Cargo builds don't like these braces
Summary: So remove them

Reviewed By: krallin

Differential Revision: D27967526

fbshipit-source-id: ce6973dd0da53a7db94972c4874694d760300a1f
2021-04-24 12:30:32 -07:00
Alex Hornby
be237eb515 mononoke: add_common_server_data to scrub blobstore logging
Summary:
scrub blobstore logging was missing the common server logging fields that LogBlob and MultiplexedBlobstore add.

Also moved the LogBlob scuba construction closer to use site for clarity.

Reviewed By: StanislavGlebik

Differential Revision: D27966453

fbshipit-source-id: 77fe70606602753301a2503691a490c0b11c755a
2021-04-23 09:25:25 -07:00
Stanislau Hlebik
62f843f0e5 mononoke: preserve the rest of Logging fields when calling with_mutated_scuba
Summary:
Currently when we call with_mutated_scuba() we create a new LoggingContainer.
That means that all the data from the previous LoggingContainer like PerfCounters
is lost. I suspect this is the reason we don't log any BlobGets/Puts for
repo_create_commit methods (see
[scuba](https://fburl.com/scuba/mononoke_scs_server/fautos3s)) - we call
[with_mutated_scuba method](https://fburl.com/code/srd1c4xu) right before
calling repo_create_commit(), and I suspect this loses the counters.

Let's instead copy all the Logging fields when calling `with_mutated_scuba`.

Reviewed By: krallin

Differential Revision: D27964719

fbshipit-source-id: 881c11bb5fb1927dbf55d0d625ea8bfbf11be131
2021-04-23 05:57:18 -07:00
Thomas Orozco
ec14fc6aea mononoke: fix a few more flaky tests
Summary:
In test-cross-repo-commit-validator.t and test-cross-repo-commit-sync., we
modify bookmarks outside of Mononoke, so we need to flush them before pulling.

In test-megarepo-invisible-merge.t, things are actually a little more subtle
and I wonder if there might be another issue laying around there. If we don't
flush bookmarks, then we attempt to upload one more hg commit, and that
blows up: P410235472. However, if we flush bookmarks, then we don't attempt to
upload, and all is fine. Here, flushing is just a workaround, but for no
that'll do. There was also another bug here, where we change configs but
don't force them to take effect.

Reviewed By: StanislavGlebik

Differential Revision: D27964959

fbshipit-source-id: 9c4304b38513177e402ee64f309e019e227ed2a7
2021-04-23 05:29:50 -07:00
Simon Farnsworth
82c8aa0cf0 Allow the packer to create single blobs, not just packs
Summary:
When we're packing, we pay an overhead price for keeping the key in the pack. As we're only bothered about reducing size, let's limit that price to when the savings from packing are worth it.

There are two cases where it's not worth it:

1. When the compressed pack is larger than the sum of single compressed files sizes.
2. When compressing a single file on its own.

Reviewed By: ahornby

Differential Revision: D27913258

fbshipit-source-id: 36cdc2a2b30aa508281ac3bbd70da41322533edb
2021-04-23 04:29:33 -07:00
Thomas Orozco
20b561263f mononoke: fixup some test flakyness
Summary:
Like it says in the title. This test wants to see consistent bookmarks so it
should flush them.

Note that this used to just opt out of bookmarks caching entirely, but I'd like
us to try and avoid having so many snowflakes in our tests (because it makes
their maintenance harder), so instead of changing the environment, let's change
the test to do what it needs to do.

Reviewed By: mzr, HarveyHunt

Differential Revision: D27964099

fbshipit-source-id: 72e00bad07dec15f18faaf4aa2e32e78cb333ab0
2021-04-23 03:12:01 -07:00
Mateusz Kwapich
d268af99cd send user-agent to fallback server
Summary: This way the fallback server know which traffic is coming from mononoke

Reviewed By: krallin

Differential Revision: D27946019

fbshipit-source-id: 8c13ae641ba340ba55322871ca30fb6accb3f007
2021-04-22 15:18:56 -07:00
Alex Hornby
bc85aade21 rust: update to zstd to 0.7.0+zstd.1.4.9
Summary:
Update the zstd crates.

This also patches async-compression crate to point at my fork until upstream PR https://github.com/Nemo157/async-compression/pull/117 to update to zstd 1.4.9 can land.

Reviewed By: jsgf, dtolnay

Differential Revision: D27942174

fbshipit-source-id: 26e604d71417e6910a02ec27142c3a16ea516c2b
2021-04-22 14:34:06 -07:00
Thomas Orozco
d7e4c67650 mononoke: include more debug info in SelectBySuccessor errors
Summary:
We get pretty frequent query errors from MySQL on this, but it's hard to debug
without knowing what is being queried.

Reviewed By: StanislavGlebik

Differential Revision: D27941603

fbshipit-source-id: 62e0f0fe9c3af36ed829c401e957ecf7683a4000
2021-04-22 11:57:42 -07:00
Alex Hornby
45f521ddde mononoke: enable default patch.crates-io for internal Cargo.tomls
Reviewed By: quark-zju

Differential Revision: D27915811

fbshipit-source-id: 3f830def66c1c5f0569925c42cc8335ee585e0e7
2021-04-22 10:59:42 -07:00
Aida Getoeva
88fefc8736 mononoke: make MySQL FFI default client and remove raw XDB
Summary:
This diff makes MySQL FFI client the default option for a MySQL connection. It means that if no arguments provided, the MySQL FFI client is used. `--use-mysql-client` option is still accepted, as it is used in the configs, and will be removed a bit later.

I also removed raw connections as a way to connect to MySQL from Mononoke, as it is no longer used. Although I had to keep some `sql_ext` API for now because other projects rely on it.
(I talked to the teams and they are willing to switch to the new client as well. I'm helping where it's possible to replace these raw xdb conns.)

Reviewed By: krallin

Differential Revision: D27925435

fbshipit-source-id: 4f08eef07df676a4e6be58b6e351be3e3d3e8ab7
2021-04-22 10:00:13 -07:00
Thomas Orozco
992d6be1e9 mononoke: update tests to stop writing to MONONOKE_TUNABLES_PATH
Summary:
Right now, we can't have defaults in our tunables, because some tests clobber
them. Let's start updating tunables instead of replacing them.

NOTE: I was planning to use this in my next diff, but I ended up not needing
it, that said, it feels like a generally positive improvements, so I figured
I'd keep it.

Reviewed By: StanislavGlebik

Differential Revision: D27915402

fbshipit-source-id: feeb868d99565a375e4e9352520f05493be94a63
2021-04-22 08:19:03 -07:00
Thomas Orozco
491b5b5318 mononoke: make bookmarks cache ttl a tunable
Summary:
This updates the bookmarks cache TTL to be something we configure using
tunables instead of repo configs. There's a few goals here:

- Less us tune the pressure we put on SQL via a tunable
- Letting us experiment more easily with disabling this cache and tuning the
  WBC poll interval.

Right now, this defaults to what we had set up in all our repo configs, which
is 2000ms.

Reviewed By: farnz

Differential Revision: D27915403

fbshipit-source-id: 4361d38939e5b2a0fe37442ed8c1dd0611af5098
2021-04-22 08:19:03 -07:00
Thomas Orozco
c381d1b896 mononoke: log count of bookmarks queries that come from WBC vs. not
Summary:
One of our plans for this half is to replace the warm bookmarks cache with a
service, and we suspect this will effectively eliminate bookmarks queries from
our hosts, because we think they all come from the WBC.

But, before we invest our time into this, let's make sure that this assumption
is actually correct, by tracking who's querying bookmarks.

Reviewed By: StanislavGlebik

Differential Revision: D27938407

fbshipit-source-id: d9a9298e7409c9518a4b9bf8ac0a6cef53750473
2021-04-22 08:13:09 -07:00
Thomas Orozco
8ef8706e6e mononoke: add a new session class for WarmBookmarksCache
Summary:
I'd like to be able to track the proportion of traffic coming to bookmarks from
warm bookmarks cache vs. from elsewhere. We don't have a great abstraction to
pass this via the CoreContext at this time, but the SessionClass seems like a
pretty good fit.

Indeed, since it's always available in the CoreContext, and can be freely
mutated without having to rebuild the whole session. Besides, it aligns pretty
well with the existing use cases we have for SessionClass, which is to give you
different level of service depending on who you are.

Reviewed By: StanislavGlebik

Differential Revision: D27938413

fbshipit-source-id: a9dcc5a10c8d1459ee9586324a727c668e2e4e40
2021-04-22 08:13:09 -07:00
Liubov Dmitrieva
e5b00fae7a disable phases exchange if narrow heads is enabled
Summary:
phases calculation could be expensive on the server and it should be a perf win to disable it if not needed

It shouldn't be needed if narrow heads are enabled

Reviewed By: quark-zju

Differential Revision: D27908691

fbshipit-source-id: 7000fb23f9332d58c2c488ffbef14d73af4ac532
2021-04-22 05:26:10 -07:00
Kostia Balytskyi
d48c87a95e megarepo: introduce write side of MononokeMegarepoConfigs
Summary:
`MononokeMegarepoConfig` is going to be a single point of access to
config storage system - provide both writes and reads. It is also a trait, to
allow for unit-test implementations later.

This diff introduces a trait, as well as implements the write side of the
configerator-based implementor. The read side/oss impl/test impl
is left `unimplemented`. Read side and test impl will be implemented in the future.

Things I had to consider while implementing this:
- I wanted to store each version of `SyncTargetConfig` in an individual
  `.cconf` in configerator
- at the same time, I did not want all of them to live in the same dir, to
  avoid having dirs with thousands of files in it
- dir sharding uses sha1 of the target repo + target bookmark + version name,
  then separates it into a dir name and a file name, like git does
- this means that these `.cconf` files are not "human-addressable" in the
  configerator repo
- to help this, each new config creation also creates an entry in one of the
  "index" files: human-readable maps from target + version name to a
  corresponding `.cconf`
- using a single index file is also impractical, so these are separated by
  ascification of the repo_id + bookmark name

Note: this design means that there's no automatic way to fetch the list of all
targets in use. This can be bypassed by maintaining an extra index layer, whihc
will list all the targets. I don't think this is very important atm.

Reviewed By: StanislavGlebik

Differential Revision: D27795663

fbshipit-source-id: 4d824ee4320c8be5187915b23e9c9d261c198fe1
2021-04-22 02:13:19 -07:00