Commit Graph

2417 Commits

Author SHA1 Message Date
Harvey Hunt
1601e218c6 mononoke: Update multiplexedblob logging to include key and fix error logging
Summary:
Change the multiplexed blobstore logging to log the blobstore key.

Also, fix the get() method to log errors to scuba (which it wasn't before!).

Further, refactor the code to remove env parsing for tupperware information and also switch
to using ScubaSampleBuilder. This means that the common server information can
be stored once and then cloned each time we log, rather than iterating through
a vec of server information each time we want to log.

Additionally, using ScubaSampleBuilder means that we don't need to pass in an Option<ScubaClient>,
cleaning up the code a little bit.

Reviewed By: StanislavGlebik

Differential Revision: D17368779

fbshipit-source-id: 0896962cdbd37912fc6f23a5e541e10cea90fa0e
2019-09-16 02:52:51 -07:00
David Tolnay
713973975d Replace *fbinit::FACEBOOK with #[fbinit::main]
Summary:
This diff moves initFacebook calls that used to happen just before FFI calls to instead happen at the beginning of main.

The basic assumption of initFacebook is that it happens at the beginning of main before there are additional threads. It must be allowed to modify process-global state like env vars or gflags without the possibility of a data race from other code concurrently reading those things. As such, the previous approach of calling initFacebook through `*fbinit::FACEBOOK` near FFI calls was prone to race conditions.

The new approach is based on attribute macros added in D17245802.

 ---

The primary remaining situations that still require `*fbinit::FACEBOOK` are when we don't directly control the function arguments surrounding the call to C++, such as in lazy_static:

    lazy_static! {
        static ref S: Ty = {
            let _ = *fbinit::FACEBOOK;
            /* call C++ */
        };
    }

and quickcheck:

    quickcheck! {
        fn f(/* args that impl Arbitrary */) {
            let _ = *fbinit::FACEBOOK;
            /* call C++ */
        }
    }

I will revisit these in a separate diff. They are a small fraction of total uses of fbinit.

Reviewed By: Imxset21

Differential Revision: D17328504

fbshipit-source-id: f80edb763e7f42b3216552dd32f1ea0e6cc8fd12
2019-09-13 20:17:29 -07:00
Pavel Aslanov
0ca9f6e068 single subcommand for debugging purposes
Summary: `single` subcommand which regenerates specified derived data for provided changeset. This is useful for debugging purposes

Reviewed By: StanislavGlebik

Differential Revision: D17318968

fbshipit-source-id: 3d3a551991b0628a05335addedd7d5b315fd45d2
2019-09-13 05:13:34 -07:00
Daniel Grzegorzewski
fe39645958 Modified statistics_collector tool to calculate total file size.
Summary: I modified statistics_collector tool, so now it calculates both number of files, and total file size in repo.

Reviewed By: krallin

Differential Revision: D17342512

fbshipit-source-id: 94217d8b61c2a7350f1793a2ef33f84d600bbb54
2019-09-13 05:08:23 -07:00
Stanislau Hlebik
1b2ad78a6b mononoke: use spawn_future in fastlog generation
Summary:
Generating a lot of fastlog batches for a single commit turned out to be a cpu
intensive operation. To make sure more cpu threads are used let's use
spawn_future() function that puts each future in a separate Tokio task, which
in turn let it be scheduled on different cpu.

There are some concerns that it might cause problems when we'll derive data in
production i.e. the whole host will be unavailable for a few seconds because it
uses all cpus. My hope is that it will affect only very few hosts because of
memcache leases that we use in derive data implementation.

Reviewed By: krallin

Differential Revision: D17364581

fbshipit-source-id: 0281de9c42f93d793f6caccbca7e8809056782ec
2019-09-13 03:34:23 -07:00
Harvey Hunt
d97c0ce577 mononoke: lfs_server: Move timing into its own middleware
Summary:
Timing a request is going to be important for multiple logging
middlewares, so let's move it into its own middleware and place it
in the pipeline.

Further, create a new middleware/ directory and move middlewares into there.

Reviewed By: krallin

Differential Revision: D17346276

fbshipit-source-id: f84c6c06d76e95c11aab18c3a24200a67429bebf
2019-09-13 02:42:02 -07:00
Harvey Hunt
7f9f1f0b0d mononoke: lfs_server: Log response size to scuba and set content length header
Summary:
As the filestore can cheaply calculate file size, update the Scuba logging to
also log that. Further, set the content length header when responding to download requests.

Reviewed By: krallin

Differential Revision: D17319666

fbshipit-source-id: 858372316930c384f19b89e2b69b08faaf656237
2019-09-12 10:42:10 -07:00
Alex Hornby
26f770064f mononoke: add lease_type to memcache lease stats
Summary: Add lease_type to memcache lease stats so that its clearer what types of leases are driving lease waits

Reviewed By: HarveyHunt

Differential Revision: D17344425

fbshipit-source-id: ea1ae44319428bc1705f502ad9fa1b2b0c44bf96
2019-09-12 10:18:20 -07:00
Stanislau Hlebik
ff3626be7d mononoke: add --cachelib-only-blobstore
Summary:
It's quite useful for testing to be able to keep cachelib caching, but disable
memcache caching. This diff adds it

Note that in this diff it uses cachelib caching for blobstore. We don't use any caching for filenodes, changesets etc

Reviewed By: HarveyHunt

Differential Revision: D17342171

fbshipit-source-id: 65458170560ea6913b3249a4118404dcc47e507d
2019-09-12 07:54:53 -07:00
Stanislau Hlebik
60d9fffda0 mononoke: make skiplist creation faster
Summary:
Previously rebuilding skiplist required fetching all the commits from mysql,
and then rebuilding the index from scratch. That was quite slow (> 16 mins to
finish). Instead let's try to read the key to check if it has the data already
and prepopulate skiplist with it.

Reviewed By: krallin

Differential Revision: D17343950

fbshipit-source-id: e8a446b94af61dbbd224d853f7dd8dd41510549d
2019-09-12 07:54:53 -07:00
Thomas Orozco
53bf2886cc mononoke: connect stdlog and slog
Summary:
This wires up the stdlog crate with our slog output. The upshot is that we can
now run binaries with `RUST_LOG` set and expect it to work.

This is nice because many crates use stdlog (e.g.  Tokio, Hyper), so this is
convenient to get access to their logging.  For example, if you run with
`RUST_LOG=gotham=info,hyper=debug`, then you get debug logs from Hyper and info
logs from Gotham.

The way this works is by registering a stdlog logger that uses the env_logger's
filter (the one that "invented" `RUST_LOG`) to filter logs, and routes them to
slog if they pass. Note that the slog Logger used there doesn't do any
filtering, since we already do it before sending logs there.

One thing to keep in mind is that we should only register the stdlog global
logger once. I've renamed `get_logger` to `init_logging` to make this clearer.
This behavior is similar to what we do with `init_cachelib`. I've updated
callsites accordingly.

Note that we explicitly tell the stdlog framework to ignore anything that we
won't consider for logging. If you don't set `RUST_LOG`, then the default
logging level is `Error`, which means that anything below error that is sent to
stdlog won't even get to out filtering logic (the stdlog macros for logging
check for the global level before actually logging), so this is cheap unless
you do set `RUST_LOG`.

As part of this, I've also updated all our binaries (and therefore, tests) to
use glog for logging. We had been meaning to do this, and it was convenient to
do it here because the other logger factory we were using didn't make it easy
to get a Drain without putting it a Logger.

Reviewed By: ahornby

Differential Revision: D17314200

fbshipit-source-id: 19b5e8edc3bbe7ba02ccec4f1852dc3587373fff
2019-09-12 04:13:11 -07:00
Thomas Orozco
4c82d7596c mononoke/lfs_server: log hg client correlator to Scuba
Summary:
This updates the LFS server to route hg client correlators to Scuba. This will
help in troubleshooting issues should any arise.

Reviewed By: HarveyHunt

Differential Revision: D17319280

fbshipit-source-id: d4323925a425203f53aba184d5854dd674462da6
2019-09-12 02:33:31 -07:00
Thomas Orozco
a2a51dd7de mononoke/lfs_server: log client identities
Summary:
This adds support for logging client identities to Scuba. This is useful to
know who's connecting to the LFS Server.

Reviewed By: StanislavGlebik

Differential Revision: D17318696

fbshipit-source-id: adba75e4133e54af7eef5183a245a3934527db05
2019-09-12 02:33:31 -07:00
Thomas Orozco
854b9da2cd mononoke/lfs_server: log error causes
Summary:
This updates our error reporting to actually log the chained causes we bothered
to put on the errors. It also adds a few more chained causes.

Reviewed By: StanislavGlebik

Differential Revision: D17315689

fbshipit-source-id: d3b83f73fa06b56b863e23f2f76e78f699af8e36
2019-09-12 02:33:31 -07:00
Stanislau Hlebik
6cf20fc88f mononoke: prefetch commits in backfill derive data
Summary:
Fetching commits takes a long time. I've added a subcommand that saves them to
a file, and "backfill" command can later read it. Note that another option
would be to add indices to the db to make commit fetching faster, however this diff
was simpler to do.

I also fixed a panic which was because of division by zero.

Reviewed By: aslpavel

Differential Revision: D17341640

fbshipit-source-id: b0335ebf8799cd48884c19fa8a0ee8023eb751af
2019-09-12 02:25:20 -07:00
David Tolnay
577a31b2a1 Delete extern crate lines
Summary:
`extern crate` is usually no longer needed in 2018 edition of Rust. This diff removes `extern crate` lines from fbcode where possible, replacing #[macro_use] with individual import of macros.

Before:

```
#[macro_use]
extern crate futures_ext;
extern crate serde_json;
```

After:

```
use futures_ext::try_boxfuture;
```

Reviewed By: Imxset21

Differential Revision: D17313537

fbshipit-source-id: 70462a2c161375017b77fa44aba166884ad2fdc3
2019-09-11 22:01:58 -07:00
Aida Getoeva
d23e2b2348 mononoke: new get_file_history method in API
Summary:
Simple implementation of the `file_history` using batched Unodes. It only contains 2 additional parameters: `skip` and `limit`.
Current implementation is very simple: it queries batched history only once and returns result based on skip, limit and first history batch.

Reviewed By: StanislavGlebik

Differential Revision: D17262719

fbshipit-source-id: 054944ec6d1ea0c75d879d33798e20720b35ae1a
2019-09-11 15:53:49 -07:00
Harvey Hunt
16f0f7a6e4 mononoke: filestore: Add fetch_with_size function
Summary:
Add a new function to the filestore that allows for a file to be fetched,
along with its size. This will be used in the LFS server to record response sizes
and set the content length header.

Reviewed By: krallin

Differential Revision: D17319665

fbshipit-source-id: 039ef9c1eea59d19c54c5378229515ac1aeedcca
2019-09-11 13:49:46 -07:00
Harvey Hunt
83db0c446a mononoke: Add per request scuba logging to LFS server
Summary:
Add per request logging to the LFS server, so that it's easier to debug LFS server issues. In
a future diff, I will also log response size.

Reviewed By: krallin

Differential Revision: D17314566

fbshipit-source-id: d40dc23a55bc56f6f768c9c0119553d03ea568c5
2019-09-11 08:09:48 -07:00
Thomas Orozco
8b4012de75 mononoke: corrupt packs, not loose files
Summary:
Our tests were dead when D17244837 landed, but that diff removed loose files and
broke our tests because they were trying to corrupt them. Let's fix this by
corrupting packs instead.

Reviewed By: StanislavGlebik

Differential Revision: D17314430

fbshipit-source-id: 708f24b902ba1f94836f48989a32b696d2f6e52a
2019-09-11 05:40:56 -07:00
Alex Hornby
befa1bdecb mononoke: lfs_server: add header so we can tell response is from mononoke
Summary: Add header so we can tell response is from mononoke LFS.

Reviewed By: krallin, StanislavGlebik

Differential Revision: D17288640

fbshipit-source-id: 73dc4b29c2b865f8f5407636de4235819ca8ffdb
2019-09-11 05:30:57 -07:00
Stanislau Hlebik
bddcdf1483 mononoke: address comments from D17257875
Summary: Forgot to amend

Reviewed By: krallin

Differential Revision: D17314148

fbshipit-source-id: beadb5654a92ccc3a42bbade2eb302e490c967bc
2019-09-11 05:08:08 -07:00
Stanislau Hlebik
d58640a44e mononoke: limit the number of changesets that are created at once during push
Summary:
Pushing of really long linear histories might cause stackoverflow
{P109510712}

The problem is that we have a chain of futures of the same length as the number of
commits we are pushing. Polling them might result in a very long stacktrace.

To fix it let's create commits in batches

Reviewed By: krallin

Differential Revision: D17257875

fbshipit-source-id: 4c19fcd17fe5e7f4e6718080ec4180c59c8a6c6f
2019-09-11 04:02:23 -07:00
Daniel Grzegorzewski
ab56c2051e Binary that counts number of files in the repo
Summary: First version of binary that counts number of files in specific repo and print it.

Reviewed By: StanislavGlebik

Differential Revision: D17285812

fbshipit-source-id: 30bc9e2c11ee75fcfb8d94610bd4e320a56dafc7
2019-09-11 03:21:53 -07:00
Kostia Balytskyi
a878f7ed13 mononoke: make blobimport capable of prefixing bookmarks
Summary:
We need this for `megarepo_test` blobimport, which will prefix `fbsource` and
`ovrsource` bookmarks.

Reviewed By: krallin

Differential Revision: D17286275

fbshipit-source-id: 40bb3f97b0a06dcd636f891d9b32c7ef9b55a0fc
2019-09-11 03:19:38 -07:00
Thomas Orozco
15b6f902e3 mononoke/dbbookmarks: finally use >list for allowed bookmark updates
Summary:
Now that I've updated the `queries!` macro to allow a `>list` along with other
arguments in a query, we can use it in the dbbookmarks update query that was
checking for valid `UPDATE`s.

Reviewed By: farnz

Differential Revision: D17288575

fbshipit-source-id: 051e03bd711bf26e43ec79509051ffff68316db7
2019-09-11 01:40:11 -07:00
Thomas Orozco
aa6922a340 common/rust/sql: don't ask for slices of references for >list
Summary:
We don't need to create double-indirection when accepting `>list` arguments.
This tends to force callers into creating new Vecs of references here and
there.

Since I was in here fixing D17286200, I figured I might as well do this too.

Reviewed By: farnz

Differential Revision: D17286608

fbshipit-source-id: 994f7d6da309b16b4e613d05faeaa3ae70ae70ab
2019-09-11 01:40:10 -07:00
David Tolnay
8b0b872dbd rust/configerator: Require fbinit proof in ConfigeratorAPI
Summary:
Since ConfigeratorAPI::new requires initFacebook to have been called, this diff gives it a `Facebook` parameter to require that callers prove they have called #[fbinit::main] as described in D17245802.

This diff turned out to be not too invasive in my opinion. It turns out there are usually pretty few layers between main and ConfigeratorAPI::new. Threading along a `Facebook` object beats the experience of debugging an error that looks like this: P109696408 when forgetting to use fbinit.

Reviewed By: Imxset21

Differential Revision: D17277841

fbshipit-source-id: 2fe3096ebcac58bb123149906e7e5d9d9e2da685
2019-09-10 23:44:38 -07:00
David Tolnay
ecc30ffe8a Delete lines of the form "use [a-z_]+;"
Summary: I think these are left over from pre-2018 code where they may have been necessary. In 2018 edition, import paths in `use` always begin with a crate name or `crate`/`super`/`self`, so `use $ident;` always refers to a crate. Since extern crates are always in scope in every module, `use $ident` does nothing.

Reviewed By: Imxset21

Differential Revision: D17290473

fbshipit-source-id: 23d86e5d0dcd5c2d4e53c7a36b4267101dd4b45c
2019-09-10 15:06:19 -07:00
Karoly Szabo
e061e21161 rust: apply must_use to the common/rust/futures-ext types
Summary: Added `must_use` check Futures check into `futures-ext`

Reviewed By: dtolnay

Differential Revision: D17260435

fbshipit-source-id: 46dfbac5cac2f6011ca4ed3af68b9ef0140cbd59
2019-09-10 11:16:20 -07:00
Harvey Hunt
0a2ad21b22 mononoke: lfs_server: Remove bail_http macros
Summary:
Previously, the LFS server's internal functions returned HandlerResponses
which included HTTP status codes. The bail_http macros were used to implement this,
but made it difficult pass state to them for logging, as well as not allowing the use
of the ? operator, which is a nice benefit of async / await syntax.

Refactor these functions to that they don't return such Gotham specific types
and remove the relevant http macros.

Reviewed By: krallin

Differential Revision: D17286238

fbshipit-source-id: 05ff791d4761b0f742d22a2966d5ecc5968728ba
2019-09-10 10:29:19 -07:00
Stanislau Hlebik
d38e729c23 mononoke: add perf counters for our backends
Summary:
That's something we'd like to do for a while - for each request track how many requests it
sends to our storages (i.e. manifold and xdb). That might make perf debugging easier.

There's a concern that it might increase cpu usage, and I'll run a canary to check
if it's the case.

Reviewed By: krallin

Differential Revision: D17091115

fbshipit-source-id: 27fea314241d883ced72d88d39f2e188716a1b9a
2019-09-10 10:16:39 -07:00
Mark Thomas
7a6005f37b extract derive_unode_manifest test_utils to a test crate
Summary:
Extract the test utils from derive_unode_manifest to their own crate so that
they can be re-used in future tests.

Reviewed By: StanislavGlebik

Differential Revision: D17282411

fbshipit-source-id: 50410cffe8a912bd07283bc6ac4e97e28663d854
2019-09-10 09:05:11 -07:00
Pavel Aslanov
4d22d9f260 add skip and regenerate logic to backfill subcommand
Summary:
Add support for:
- regeneration of already backfilled derived data.
- skipping changesets (useful when we want to resume interrupted backfill)

Reviewed By: StanislavGlebik

Differential Revision: D17282548

fbshipit-source-id: 1e6e9ac5e3ac834b7d942431a007a52e0ddd75b8
2019-09-10 08:22:18 -07:00
Kostia Balytskyi
800824a2bd mononoke: add config reading logic for commit sync configs
Summary:
Commit sync will operate based on the following idea:
- there's one "large" and potentially many "small" repos
- there are two possible sync directions: large-to-small and small-to-large
- when syncing a small repo into a large repo, it is allowed to change paths
  of each individual file, but not to drop files
- large repo prepends a predefined prefix to every bookmark name from the small repo, except for the bookmarks, specified in `common_pushrebase_bookmarks` list, which refers to the bookmarks that can be advanced by any small repo

Reviewed By: krallin

Differential Revision: D17258451

fbshipit-source-id: 6cdaccd0374250f6bbdcbc9a280da89ccd7dff97
2019-09-10 07:23:15 -07:00
Thomas Orozco
9e458f7acf mononoke/apiserver: remove LFS implementation
Summary: This removes the LFS implementation from the apiserver. We haven't used it, and we weren't going to.

Reviewed By: StanislavGlebik

Differential Revision: D17263036

fbshipit-source-id: cad3e8a7d54abef06ff1bc1cb5e73c55342743b6
2019-09-10 06:39:54 -07:00
Thomas Orozco
11f0cc609b mononoke: update LFS tests to use new LFS server
Summary:
This updates all the existing integration tests that talked to the API Server to tlak to the LFS Server instead.

Note that some tests have changed a little bit. That's because unlike the old implementation, the new one doesn't ask clients to re-upload the things it already has.

Reviewed By: HarveyHunt

Differential Revision: D17263038

fbshipit-source-id: b3ef9af6f416458354d49b0ab9e99e588f8edd26
2019-09-10 06:39:53 -07:00
Thomas Orozco
cff0b359b3 mononoke/lfs_server: run without upstream + integration tests
Summary:
This adds support in the LFS Server for running without an upstream. This is
useful to run tests, because it lets chain LFS Servers and have one acting as a
proxy and one acting as a backend.

This also highlighted a bug in my implementation (we were expecting a download
action from upstream if the data didn't need to be uploaded there), which I
fixed here.

For the time being, we won't use this in production.

Reviewed By: HarveyHunt

Differential Revision: D17263039

fbshipit-source-id: 7cba550054e5f052a4b8953ebe0195907919aade
2019-09-10 06:39:53 -07:00
Thomas Orozco
71a63a31b3 mononoke/lfs_server: log requests
Summary:
This adds a logging middleware that logs requests to stdlog (and therefore to slog through slog-stdlog).

It's convenient for tests, and it's also a pretty standard thing for HTTP servers.

Reviewed By: StanislavGlebik

Differential Revision: D17263040

fbshipit-source-id: 992c5e46ba9ae5b829001a26536b827130aa813c
2019-09-10 06:39:53 -07:00
Thomas Orozco
e8d730579c mononoke/lfs_server: remove more Fallible
Summary: It looks like I forgot a few prior to landing the LFS server. This removes a few extra `Fallible`s I still had laying around.

Reviewed By: StanislavGlebik

Differential Revision: D17263037

fbshipit-source-id: 0e39e04daf6fc1336a7a35aaafd243dc88c8836e
2019-09-10 06:39:53 -07:00
Stanislau Hlebik
b7300742ac mononoke: ensure bfs order in FastlogBatch
Summary:
Previous implementation of `create_merged_list` didn't always produce entries
in BFS order (see a test case for example).

Reviewed By: farnz

Differential Revision: D17281943

fbshipit-source-id: ec93b815e0b8f528952e05a47df767b679e41aad
2019-09-10 05:42:22 -07:00
Stanislau Hlebik
4e9f0f828f mononoke: log server errors in apiserver
Summary:
We want to tell apart user errors (i.e. incorrect input) vs server errors (i.e.
blobstore is down). Let's log a special field

Reviewed By: farnz

Differential Revision: D17229670

fbshipit-source-id: f08c96f5e5d9e1adcf6919970a7aaf7c0d4cd985
2019-09-10 03:28:35 -07:00
Pavel Aslanov
2f8314e204 actually allow to used fastlog derived data type
Summary: I've forgotten to amend before lending changes

Reviewed By: StanislavGlebik

Differential Revision: D17261853

fbshipit-source-id: 99a050a06348dd4fcc2b45e6243c1e56369bb0e9
2019-09-10 02:44:05 -07:00
Stanislau Hlebik
9ad20e4e75 mononoke: bump max_entries_in_fastlog_batch
Reviewed By: krallin

Differential Revision: D17225899

fbshipit-source-id: 6a964b533b4ded70043506f3836f9c3668f4984c
2019-09-09 09:54:41 -07:00
Stanislau Hlebik
609e01e237 mononoke: support merges in FastlogBatch
Summary:
Finally support merges. Whenever we have a merge a completely new batch is
created.

The one thing that surprised me was that ParentOffsets actually can be
negative. For example
```
     o
  /    \
 o       o
 |       |
 o       |
 |       |
 o <---  | --- ParentOffset of this commit can be negative!
   \   /
     o
```

It happens because of BFS order of traversal - parent can be visited befor the
child. Note that negative offsets shouldn't cause problems.

Reviewed By: aslpavel

Differential Revision: D17183355

fbshipit-source-id: b5165ffef7212ce220dd338079db9e26a3030f58
2019-09-09 09:54:41 -07:00
Pavel Aslanov
740d4276aa add fastlog support
Summary: Extend `backfill_derived_data` utility to support `RootFastlog` derived data type.

Reviewed By: krallin

Differential Revision: D17258729

fbshipit-source-id: e2e1fc2ad067fb5f7b597f54727ade89a4721cb4
2019-09-09 07:48:08 -07:00
Mark Thomas
78af568a01 apiserver: implement SourceControlService commit_is_ancestor_of
Summary:
Implement the `commit_is_ancestor_of` call, which returns whether this commit
is an ancestor of some other commit.

Reviewed By: krallin

Differential Revision: D17183595

fbshipit-source-id: be7826e778c48dd86f116d7fbcaabe18bdffab44
2019-09-09 04:23:37 -07:00
Mark Thomas
f2e9e6a90a apiserver: implement SourceControlService commit_info
Summary: Implement the `commit_info` call, which returns the metadata for the commit.

Reviewed By: krallin

Differential Revision: D17183596

fbshipit-source-id: 500029b7c4b4705fd937a894d15c14d911129b3c
2019-09-09 04:23:37 -07:00
Mark Thomas
3360b4456e apiserver: implement SourceControlService commit_lookup
Summary:
Implement the `commit_lookup` call, which looks-up commits to see if they exist,
and maps between commit identity schemes.

Reviewed By: krallin

Differential Revision: D17183597

fbshipit-source-id: 3d21c9b0804ce3bbd576543716ce9647d7d1d7e2
2019-09-09 04:23:36 -07:00
Mark Thomas
75efc1c5fd apiserver: implement SourceControlService repo_list_bookmarks
Summary:
Implement the `repo_list_bookmarks` call, which lists bookmarks.

Listing scratch bookmarks requires the user to provide a prefix to match on an
a limit for the number of bookmarks to fetch.  There is currently no provision
for paging.

Reviewed By: krallin

Differential Revision: D17157497

fbshipit-source-id: 247f02299f40a9e9142c6ca838fca1d1de874382
2019-09-09 04:23:36 -07:00