Commit Graph

60583 Commits

Author SHA1 Message Date
Mark Thomas
c6a7a35c2a scs_server: add AsyncIntoResponseWith trait
Summary:
Sometimes the `AsyncIntoResponse` trait needs additional data (e.g. the set of commit
identity schemes the client is interested in) to convert the item into the response
type.

Currently we use a tuple of `(item, &additional_data)` to work around this, however
this will become less readable as we add new items with more additional data.

Split this use-case out into a new trait: `AsyncIntoResponseWith`.  This defines
an associated type which is the type of the additional data needed, and provides a
new method `into_response_with`, where a reference to the additional data can be
provided.

Note that conversions for tuple types that are logical `(name, value)` or `(id,
value)` pairs are still ok.  It is specifically the case where we have `(item,
&additional_data)` that we are converting here (i.e. the additional data merely
informs the conversion, it is not part of the resulting response value).

Reviewed By: aslpavel

Differential Revision: D23813371

fbshipit-source-id: c0dcfe826288ad53ad572ae4dd956540605998f5
2020-09-21 08:39:12 -07:00
Mark Thomas
b6a6882d10 improve error messages for mapping length errors
Summary: Make it clear which error is which, and what the number of expected and actual items are.

Reviewed By: StanislavGlebik

Differential Revision: D23813369

fbshipit-source-id: 5b94c5a67438c475235876669ec2be3fd1866700
2020-09-21 08:39:12 -07:00
svcscm
5d8357a30a Updating submodules
Summary:
GitHub commits:

28cde4beaa
0518ddfbef

Reviewed By: yns88

fbshipit-source-id: 345ab4aec397e1853e7a224acea0163123eafb0a
2020-09-21 08:35:14 -07:00
Alex Hornby
779c42d5c0 mononoke: intern ids to reduce space used
Summary: Intern ids to reduce space used in the walk state.  This is significant on large repos.

Reviewed By: farnz

Differential Revision: D23691524

fbshipit-source-id: b42f926d88083d06ffc44508db44747f9a14e0a5
2020-09-21 06:26:28 -07:00
Stanislau Hlebik
58160ae16c mononoke: add a --wait-secs parameter to catchup-head-delete subcommand
Reviewed By: ikostia

Differential Revision: D23812854

fbshipit-source-id: 6225072b3aa25c2054ffae6d0ec37d8c7ef04763
2020-09-21 06:07:57 -07:00
Stanislau Hlebik
4d46a332f6 mononoke: remove unnecessary option from into_push_redirector
Summary:
Passing option is not necessary since live_commit_sync_config is always
available.

Reviewed By: ahornby

Differential Revision: D23811021

fbshipit-source-id: ee11f88d57814d9abac8650e52febd9e431770da
2020-09-21 06:00:24 -07:00
Liubov Dmitrieva
584de33443 fix workspace name for fbclone
Summary:
Automigration gets messed up with `hg cloud rejoin` command in fbclone code because it triggered by the pull command.

As a result fbclone ends up to join a hostname workspace instead of the default for some cases.

* make sure that the migration never runs if background commit cloud operations are disabled
* also, add skip the migration in the pull command in fbclone

Once of those would be enough to fix the issue but I prefer to make both
changes.

Reviewed By: markbt

Differential Revision: D23813184

fbshipit-source-id: 3b49a3f079e889634e3c4f98b51557ca0679090b
2020-09-21 05:09:40 -07:00
Stanislau Hlebik
9fc2a01f0b mononoke: bump memcache key for blobstore
Summary:
I've re-backfilled some of blame values for configerator. But old values might
still be in memcache. To make sure that's not the case let's bump the memcache
key.

Reviewed By: krallin

Differential Revision: D23810971

fbshipit-source-id: c333a51ffb2babf7da808b276f9cfa31baaa105c
2020-09-21 01:47:01 -07:00
Durham Goode
7b4bbc2f64 revset: avoid full repo scan in children revset
Summary:
The children revset iterated over everything in the subset, which in
many cases was the entire repo. This can take hundreds of milliseconds. Let's
use the new _makerangeset to only iterate over descendants of the parentset.

Reviewed By: quark-zju

Differential Revision: D23794344

fbshipit-source-id: 9ac9bc014d56a95b5ac65534769389167b0f4508
2020-09-20 21:43:50 -07:00
svcscm
b78115f4e8 Updating submodules
Summary:
GitHub commits:

8c41fe8c2f

Reviewed By: yns88

fbshipit-source-id: cd39f0de80bd3ffdf663ffd75b400848610e80c7
2020-09-20 21:43:50 -07:00
svcscm
c36149228d Updating submodules
Summary:
GitHub commits:

53216cb405

Reviewed By: yns88

fbshipit-source-id: cc1e8a924e84aba10907e1eec6d10874519b9adf
2020-09-20 19:02:13 -07:00
svcscm
5a58a7dfef Updating submodules
Summary:
GitHub commits:

323a834d1d
8cff333f99
35a3ad2061
00d53102bc

Reviewed By: yns88

fbshipit-source-id: bce23ecb6ba1c33c43d7a375bef8f80ad1fb88f4
2020-09-19 18:57:33 -07:00
Arun Kulshreshtha
683520106e edenapi: remove python wrapper
Summary:
Now that Mercurial itself can properly handle SIGINT, there isn't a need for a Python wrapper around the Rust EdenAPI client (since the main purpose of the wrapper was to ensure proper SIGINT handling--something that could only be done in Python).

Note that while this does remove some code that prints out certificate warnings, that code was actually broken after the big refactor of the Rust bindings. (The exception types referenced no longer exist, so the code would simple result in a `NameError` if it actually tried to catch an exception from the Rust client.)

Reviewed By: singhsrb

Differential Revision: D23801363

fbshipit-source-id: 3359c181fd05dbec24d77fa1b7d9c8bd821b49a6
2020-09-19 14:23:55 -07:00
svcscm
514f349132 Updating submodules
Summary:
GitHub commits:

5a7dc15e5d
d74c59588a

Reviewed By: yns88

fbshipit-source-id: 18187888f4c3f135984f098caf94d6974edaa35a
2020-09-19 14:23:54 -07:00
svcscm
b07a8a0986 Updating submodules
Summary:
GitHub commits:

c37507e465

Reviewed By: yns88

fbshipit-source-id: a3c7188f84d466cb1fbbd916dabf5ee386891c08
2020-09-19 11:56:18 -07:00
Alex Hornby
4db4161974 mononoke: simplify walkers check that children are valid
Summary: Small change to make it more readable and reduce likelihood of allocation (although the collect might be optimized away anyway)

Reviewed By: farnz

Differential Revision: D23760762

fbshipit-source-id: 5c47352386de128b65052d63b3f3ff1081a462e3
2020-09-19 08:49:55 -07:00
svcscm
73f3a1eb57 Updating submodules
Summary:
GitHub commits:

48fb187db9
0500cb6c29
5e26697481
4747b9435e
a4d35e454b

Reviewed By: yns88

fbshipit-source-id: 4ace73c060987697ac66acceb89edc44eda88361
2020-09-19 06:32:52 -07:00
Lukasz Piatkowski
e8098beff0 mononoke/integration tests: fix issue with missing dulwich for hggit ext (#59)
Summary: Pull Request resolved: https://github.com/facebookexperimental/eden/pull/59

Reviewed By: farnz

Differential Revision: D23783095

Pulled By: lukaspiatkowski

fbshipit-source-id: cb6a72ae3d8856a92945c28e4162c1808539206a
2020-09-19 05:47:30 -07:00
svcscm
86fced8ab6 Updating submodules
Summary:
GitHub commits:

4d697b6a4d

Reviewed By: yns88

fbshipit-source-id: 8b73a4b2d53b24fd21118a93828c8f719aa7e9eb
2020-09-19 02:02:02 -07:00
Arun Kulshreshtha
3078f346f8 gotham_ext: make StreamBody take an infallible byte stream
Summary: Make `StreamBody` accept a `Stream` of `Bytes` instead of a `TryStream` of `Bytes`. This means that applications returning streaming responses will be forced to deal with errors prior to returning the response.

Reviewed By: krallin

Differential Revision: D23780216

fbshipit-source-id: dbad61947ef23bbfc4edf3d286ad0218c1859d87
2020-09-18 22:49:55 -07:00
Arun Kulshreshtha
980406cea8 lfs_server: log errors from streaming responses
Summary:
Using the `EndOnErr` combinator introduced in the previous diff, log any errors that occur during a streaming response to stderr.

Note that **the intent of this diff is to implement the most basic possible example of doing something with these errors**, with the goal of allowing us to modify `StreamBody` to only accept infallible `Stream`s.

I'd imagine that in all likelihood we'd want to do something smarter with the errors than just print them, but I figure that can be added in later diffs since it seems like doing something else (like logging the error to Scuba or adding to the RequestContext) might require additional changes that are beyond the scope of this diff.

At the very least, this seems like an improvement from before, where these errors would just get passed straight through to Hyper.

Reviewed By: krallin

Differential Revision: D23780217

fbshipit-source-id: 2f885f9fdc6af3dd28d95be1daa1d82c732453fa
2020-09-18 22:49:55 -07:00
svcscm
e4b4a28fb4 Updating submodules
Summary:
GitHub commits:

7703d0ba7b

Reviewed By: yns88

fbshipit-source-id: 21896b0e05cf64f5583c34e73e65ab1c5b7e962a
2020-09-18 22:46:21 -07:00
Arun Kulshreshtha
3435319e52 gotham_ext: add EndOnErr TryStream combinator
Summary: Add a new `EndOnErr` combinator for `TryStream`s (exposed via the `GothamTryStreamExt::end_on_err` method) which fuses the underlying `TryStream` upon hitting an error, and passes the error to the user-provided callback. This is useful for contexts like the LFS server, where mid-stream errors are considered unrecoverable and must result in termination of the response.

Reviewed By: krallin

Differential Revision: D23778490

fbshipit-source-id: 05caa52ca62d085cc63cc8feb4619188fe0fac61
2020-09-18 22:37:42 -07:00
Arun Kulshreshtha
71674d87c5 edenapi_server: log errors during streaming responses
Summary: Use the new `ForwardErr` stream combinator to log errors that occur during a streaming response. Right now, they are just printed to stderr, but in the future we should also do other things such as logging them to Scuba. This diff supersedes the approach from D22720957.

Reviewed By: krallin

Differential Revision: D23780215

fbshipit-source-id: 8d2267f1166e665a62a167a6d95bb0b1797b5767
2020-09-18 22:37:42 -07:00
Arun Kulshreshtha
7f803818ee gotham_ext: implement ContentMeta for ForwardErr
Summary: Implement `ContentMeta` for streams wrapped with the `ForwardErr` combinator, so that they may be used as input to `StreamBody`. (Presently, this won't actually work since `StreamBody` expects a `TryStream`, but this will change later in the stack.)

Reviewed By: krallin

Differential Revision: D23777842

fbshipit-source-id: 234bcdf104afbf2c9832fbe54d85744bfb470363
2020-09-18 22:37:42 -07:00
Arun Kulshreshtha
26ff321006 gotham_ext: add ForwardErr combinator for TryStreams
Summary:
This diff adds a new `ForwardErr` combinator that allows redirecting the errors from a `TryStream` into a channel, allowing them to be processed asynchronously without disrupting the stream itself. This effectively splits the `TryStream` into two `Stream`s containing the successful items and errors respectively.

To make it easy to use the combinator, I've added a new `GothamTryStreamExt` extension trait (in the vein of the old `futures_ext` crate) that allows the user to simply call `forward_err` on any `TryStream`. The trait name is a bit of a misnomer (suggestions welcome!) in that there isn't anything Gotham-specific about it, but the name `TryStreamExt` is taken and I didn't want to set up a successor to `futures_ext` just for the sake of one combinator. (Though we will likely expand the trait in the future.)

Reviewed By: krallin

Differential Revision: D23777501

fbshipit-source-id: 8628cdc2e104cd9b972afda745858f9cb9e85245
2020-09-18 22:37:42 -07:00
svcscm
b6b105b196 Updating submodules
Summary:
GitHub commits:

e49e216db7

Reviewed By: yns88

fbshipit-source-id: 202ec87e2e8b0ce7840d61514237e41b473fc873
2020-09-18 20:00:00 -07:00
Jun Wu
34d8dca79a dispatch: run command in non-main thread
Summary:
This extends the Ctrl+C special handling from edenapi to the entire Python
command so Ctrl+C should be able to exit the program even if it's running
some blocking Rust functions.

`edenapi` no longer needs to spawn threads for fetching.

Reviewed By: singhsrb

Differential Revision: D23759710

fbshipit-source-id: cbaaa8e5f93d8d74a8692117a00d9de20646d232
2020-09-18 18:47:24 -07:00
Wez Furlong
b39f678b85 edenfs: remove use of fork from StartupLogger
Summary:
on macOS we cannot safely use `fork`.

This commit replaces the use of `fork` in the startup logger subsystem.
This was a little tricky to untangle; originally (prior to any of
the `fork` removal efforts in this diff stack), the startup flow was
to spawn a set of processes via fork:

```
edenfs (setuid)
 \-----edenfs (privhelper, as root)
  \------edenfs (daemonized)
```

The forked children take advantage of being able to implicitly pass state to
the child processes from the parent.  That data flow needs to become explicit
when removing the fork which makes some things a little awkward.

With fork removed:

* `edenfs` unconditionally spawns `edenfs_privhelper` while it has
  root privs and before most of the process has been initialized.
* That same `edenfs` process will then spawn a child `edenfs`
  process which starts from scratch, but that which needs to
  run as the real server instance
* The original `edenfs` instance needs to linger for a while
  to remain connected to the controlling tty to pass back the
  startup state to the user, before terminating.

This commit deletes the check that `edenfs` is started originally
as root; previously the logic relied on the forked startup logger
continuing past the `daemonizeIfRequested` call and simply deferring
the check until after folly::init.  With these changes we can't
easily perform such a check without adding some extra gymnastics
to pass the state around; the place where that is checked is in
the spawned child of the original edenfs, which is not a privileged
process and doesn't know the original euid.  I don't believe this
to be a great loss as we tuck `edenfs` away under the libexec dir.

Reviewed By: chadaustin

Differential Revision: D23696569

fbshipit-source-id: 55b95daf022601a4699274d696af419f0a11f6f2
2020-09-18 17:22:39 -07:00
Wez Furlong
2941822299 eden: use SpawnedProcess to start privhelper
Summary:
On macOS we cannot safely use `fork` to spawn processes while other threads may initialize objc classes.

This commit replaces the use of `fork` in the privhelper startup with
`SpawnedProcess` instead.  We need to take care with this as we are generally
installed setuid root and we'd like to avoid being tricked into running an
arbitrary child process as root.

This commit defines a separate executable called `edenfs_privhelper` that
contains just the privhelper server code.

We need to be careful about locating this executable; to avoid invoking an
arbitrary process while we have root privileges we require that the privhelper
be a sibling to the edenfs executable and carry out some additional ownership
verification so that we can tell that the owner of edenfs also controls
edenfs_privhelper.

To facilitate this, I've added an `executablePath` function to PathFuncs; it
returns the path to the current executable image.

To make the integration test scenario simpler, I've added the edenfs_executable
binary definition alongside that of the edenfs binary in the buck and cmake
build systems.  This causes the binaries to be siblings in-situ in the build
tree and avoids the need to move things into place in the test harness.

Reviewed By: chadaustin

Differential Revision: D23653343

fbshipit-source-id: 3c2539a5e0e11cee88960db49c885ce0366d314e
2020-09-18 17:22:39 -07:00
svcscm
ad58fc59c5 Updating submodules
Summary:
GitHub commits:

cca821dc4a
f8e418967f
00638349eb
96c5938681
5b340a6795

Reviewed By: yns88

fbshipit-source-id: bb50b99ab6164079e4000a9b8a1cb88c10e593e6
2020-09-18 17:22:39 -07:00
svcscm
4d95d8b1d3 Updating submodules
Summary:
GitHub commits:

fb5ce2d9a9
ed96b563a1
373deec9e7
b475a83f9d
f0b4a5649b

Reviewed By: yns88

fbshipit-source-id: 87e544b6691ea893104f1497a8872ac785c0ed05
2020-09-18 16:48:40 -07:00
Zeyi (Rice) Fan
5fedaa71b8 enable redirection tests
Summary: This diff fixes the eden redirection tests so it runs on Windows.

Reviewed By: xavierd

Differential Revision: D22958766

fbshipit-source-id: 45d26587831ed74d6bd7912b22c7c955b077f571
2020-09-18 16:39:52 -07:00
Zeyi (Rice) Fan
506ba2cbf3 remove resolve_path
Reviewed By: xavierd

Differential Revision: D23766446

fbshipit-source-id: 3f8238de7c8e93ce8d76f201de9eff0984365979
2020-09-18 16:39:52 -07:00
svcscm
b1c77cb990 Updating submodules
Summary:
GitHub commits:

4bcaff07d0
330b91dd27
935dfe93e3
333758b589

Reviewed By: yns88

fbshipit-source-id: 146f3731cf95b31cd80eed2d513d717f8d8129f7
2020-09-18 14:33:37 -07:00
Liubov Dmitrieva
01615ae4de improve scm daemon checks and check workspace name as well
Summary:
Move bunch of code into a separate file (scm daemon related options). Move them
out of cloud sync.

Also introduce additional check that the `hg cloud sync` command scm daemon
runs is intended for the current connected workspace

In theory when we switch a subscription, the SCM daemon gets notified but races possible and it is better to have this additional check, so SCM daemon triggers cloud sync where it is supposed to.

Reviewed By: markbt

Differential Revision: D23783616

fbshipit-source-id: b91a8b79189b7810538c15f8e61080b41abde386
2020-09-18 14:01:11 -07:00
Jun Wu
664fa0b8ec config: remove experimental.head-based-commit-transaction
Summary:
The config is not actually used any more (with rust-commits, it is forced on, without rust-commits,
there is no point to keep it on). Therefore removed.

Reviewed By: singhsrb

Differential Revision: D23771570

fbshipit-source-id: ad3e89619ac5e193ef552c25fc064ca9eddba0c6
2020-09-18 13:28:34 -07:00
Jun Wu
6d3f17bb16 codemod: signal.signal -> util.signal
Summary:
See the previous diff for context. This allows the code to run from non-main
thread.

Reviewed By: singhsrb

Differential Revision: D23759712

fbshipit-source-id: 044193a9d7193488c700d769da9ad68987356d69
2020-09-18 13:28:34 -07:00
Jun Wu
be51116cf4 util: add util.signal that works for non-main threads
Summary:
The idea is to extend D22703916 (61712e381c)'s way of calling functions from just edenapi to
the entire command for better Ctrl+C handling. Some code paths (ex. pager,
crecord) use `signal.signal` and `signal.signal` does not work from non-main
thread.

To workaround the `signal.signal` limitation, we pre-register all signals we care
about in the main thread to a special handler. The special handler reads a
global variable to decide what to do. Other threads can modify that global
variable to affect what the special signal handler does, therefore indirectly
"register" their handles.

Reviewed By: kulshrax

Differential Revision: D23759711

fbshipit-source-id: 8ba389072433e68a36360db6a1b17638e40faefa
2020-09-18 13:28:34 -07:00
Jun Wu
b5a01b9c05 util: improve interruption handling for 'threaded'
Summary:
Before this change, for a long-running function wrapped by 'threaded',
it might:

  background thread> start
  main thread> receive SIGINT, raise KeyboardInterrupt
  main thread> raise at 'thread.join(1)'
  main thread> exiting, but wait for threads to complete (Py_Finalize)
  background thread> did not receive KeyboardInterrupt, continue running
  main thread> continue waiting for background thread

Teach `thread.join(1)` to forward the `KeyboardInterrupt` (or its subclass
`error.SignalInterrupt`) to the background thread, so the background thread
_might_ stop. Besides, label the background thread as daemon so it won't
be waited upon exit.

Reviewed By: kulshrax

Differential Revision: D23759713

fbshipit-source-id: 91893d034f1ad256007ab09b7a8b974325157ea5
2020-09-18 13:28:34 -07:00
Jun Wu
51a9d37730 edenapi: edenapi._spawnthread -> util.threaded
Summary:
Move the wrapper to util.py. It'll be used in dispatch.py to make the entire
command Ctrl+C friendly.

Reviewed By: singhsrb

Differential Revision: D23759715

fbshipit-source-id: fa2098362413dcfd0b68e05455aad543a6980907
2020-09-18 13:28:33 -07:00
Jun Wu
c4e2f5cb0f bindings: add sleep for testing blocking Rust functions
Summary: This will be used to test Ctrl+C handling with native code.

Reviewed By: kulshrax

Differential Revision: D23759714

fbshipit-source-id: 50da40d475b80da26b7dbc654e010d77cb0ad2d1
2020-09-18 13:28:33 -07:00
Jun Wu
6cb78fa90c pyedenapi: expose API querying hg commit data
Summary: This makes it easier to test the API via debugshell.

Reviewed By: kulshrax

Differential Revision: D23750677

fbshipit-source-id: e29284395f03c9848cf90dd2df187e437890c56e
2020-09-18 13:28:33 -07:00
Jun Wu
80bf264e24 debugshell: add "api" object
Summary: It is handy to test edenapi methods directly.

Reviewed By: kulshrax

Differential Revision: D23750709

fbshipit-source-id: 33c15cecaa0372ba9e4688502e7d8f3fdda7c3b8
2020-09-18 13:28:33 -07:00
Jun Wu
478e1fe524 commands: add debugrebuildchangelog
Summary:
Add a command to rebuild the changelog without recloning other parts of the
repo. This can be used as a way to recover from corrupted changelog. It
currently uses revlog because revlog is still the only supported format during
streamclone.

In the future this can be used for defragmentation.

Reviewed By: DurhamG

Differential Revision: D23720215

fbshipit-source-id: 6db0453d18dbf553660d55d528f990a4029d9da4
2020-09-18 13:28:33 -07:00
svcscm
82816e3d0e Updating submodules
Summary:
GitHub commits:

b31e86abd9
c5d1c45f6c
e22f6c517f
6b3b8ea5ae
6efae4b00d
06107930ce

Reviewed By: yns88

fbshipit-source-id: 2827738dc68c3e247710aadd0ea68c32da559412
2020-09-18 13:28:33 -07:00
svcscm
edef61a31e Updating submodules
Summary:
GitHub commits:

468fe875a7
b22f02988b
605ff6edde

Reviewed By: yns88

fbshipit-source-id: f44e20e36ec415de7385bdeb81bddda6fb7e837b
2020-09-18 10:04:36 -07:00
Wez Furlong
0f2f5b9330 edenfs: change PathMap CaseSensitivity to runtime option
Summary:
This commit moves a compile-time template parameter
to be a runtime boolean parameter.

There's a bit of fan-out that, while I don't think it is
super awesome, isn't super terrible either.

The case sensitivity value is read from the checkout config
added in the prior diff in this stack.

Reviewed By: xavierd

Differential Revision: D23751192

fbshipit-source-id: 46f6fe25bfa6666305096ad9c416b510cd3aac8f
2020-09-18 08:43:14 -07:00
Wez Furlong
7b6868f452 edenfs: add per-checkout case sensitivity setting
Summary:
This diff teaches the CheckoutConfig how to determine
whether a given checkout should be case-sensitive (the default)
or case-insensitive-case-preserving.

This option is passed through to the fuse channel initialization,
so that the kernel will respect it, however, our DirEntry layer
doesn't yet know that it should respect this.

There's currently no UI to set this option.  My game plan
is to suggest the following steps to folks that want to try
this out:

```
$ eden stop
$ vim ~/local/.eden/clients/ovrsource/config.toml
```

and then add this line to the `[repository]` section:

```
case-sensitive = false
```

and finally:

```
$ eden start
```

Reviewed By: xavierd

Differential Revision: D23751184

fbshipit-source-id: 6facb23c460cfff6e37d0091b51b97ab06f62c91
2020-09-18 08:43:14 -07:00
Liubov Dmitrieva
70dc57f48b improve help
Summary:
Improve help to reflect that the system is also meant for managing backups

add missing commands
reshuffle a bit

Reviewed By: markbt

Differential Revision: D23782794

fbshipit-source-id: d7fd3fa06ca7acd649cef557f3fe020295259e3d
2020-09-18 07:03:25 -07:00