Commit Graph

26 Commits

Author SHA1 Message Date
Stanislau Hlebik
2c8d98447d mononoke: revert D8959535
Summary:
It makes startup unbearably slow, and doesn't add any benefits at all. Revert
it

Reviewed By: purplefox

Differential Revision: D9358741

fbshipit-source-id: 26469941304f737c856a6ffca5e577848ad30955
2018-08-16 03:06:14 -07:00
Jeremy Fitzhardinge
e0ce53ce36 rust: change asynchronize to use tokio-threadpool::blocking
Summary:
Should be functionally equivalent and semantically more appropriate

This also makes a couple of small API changes:
- The inner function is expected to just return a Result - IntoFuture is
  overkill if its supposed to be synchronous in the first place
- `asynchronize` itself returns `impl Future` rather than being intrinsically
  boxed.
- Restructure dieselfilenodes::add_filenodes to only asynchronize the insert
  itself.

Reviewed By: farnz

Differential Revision: D8959535

fbshipit-source-id: fef9164e3be0069bd0d93573642cd57bb5babb73
2018-08-13 14:51:45 -07:00
Lukas Piatkowski
4cf8e881e8 filenodes: move blake2_path_hash to a common place for all filenodes implementations
Summary: The blake2_path_hash is used only in MySql right now, but I want to use it in caching as well, so moving it to a more accessible place.

Reviewed By: jsgf

Differential Revision: D9028799

fbshipit-source-id: b055550fbfca5c6c419702490504f08812592470
2018-07-27 13:21:20 -07:00
Christopher Kuklewicz
6cc2cd49f8 Unifying sql code for Mononoke/Diesel
Summary:
Unify all uses of Sqlite and of Mysql

This superceded D8712926

Reviewed By: farnz

Differential Revision: D8732579

fbshipit-source-id: a02cd04055a915e5f97b540d6d98e2ff2d707875
2018-07-08 09:06:22 -07:00
Lukas Piatkowski
93cee8f271 filenodes: use connection to master only as fallback and for writes
Summary: we want most of the read traffic to be handled by replicas

Reviewed By: lukaspiatkowski

Differential Revision: D8548027

fbshipit-source-id: 297b070b5b33ec114026ecf3f1079fdb26f54b19
2018-06-20 17:37:22 -07:00
Lukas Piatkowski
18d475fb9a filenodes: separate pool of connection for writes from reads
Summary: There shouldn't be more than one thread writing to the database, because it causes lags in slaves and they race for database locks between themselves. One write connection should be sufficient enough.

Reviewed By: StanislavGlebik

Differential Revision: D8348604

fbshipit-source-id: ceef081ed89611978accfa55969883078d65a58f
2018-06-11 06:38:14 -07:00
Lukas Piatkowski
e6837e1671 stats: prepend "mononoke." prefix to stats exported from mononoke
Summary: this will make it easier to identify stats exported from mononoke vs external libraries

Reviewed By: StanislavGlebik

Differential Revision: D8331418

fbshipit-source-id: c151e76aa386fb13759fced7cc07b03ac67fe051
2018-06-08 04:20:42 -07:00
Rain ⁣
cfb1588d02 update username and email in Rust code
Summary: Going to take a while to get to everything, but here's a start.

Reviewed By: Imxset21

Differential Revision: D8311107

fbshipit-source-id: ada1908b320a5277eda2587d7e8f26b13b952154
2018-06-07 21:07:14 -07:00
Lukas Piatkowski
4f44c3f130 mercurial_types: remove D* types and move mercurial types around
Summary:
Now it is as it should be: mercurial_types have the types, mercurial has revlog related structures
burnbridge

Reviewed By: farnz

Differential Revision: D8319906

fbshipit-source-id: 256e73cdd1b1a304c957b812b227abfc142fd725
2018-06-07 13:19:16 -07:00
Lukas Piatkowski
27bdcb40b2 filenodes: control size of the connection pool
Summary:
The new_blobimport job is having difficulties when the pool is too large, because the write transactions are taking too long. If the pool is configured to be 1 for it then everything seems fine and fast enough.
On the other hand the Mononoke server should have bigger connectino pool size to be able to quickly respond for read requests.

Reviewed By: farnz

Differential Revision: D8235413

fbshipit-source-id: 84e0013ce569c3f103a2096001605aab828d178c
2018-06-05 05:58:31 -07:00
Lukas Piatkowski
ca35624029 filenodes: remove transation over filenodes update
Summary:
The transaction is not necessary in there, since if any of the query fails then the commit is not written in changesets table.
We need to remove it, because with many writes to the filenodes table some of the transactions are timing out while waiting for the database's lock for transation

Reviewed By: farnz

Differential Revision: D8220722

fbshipit-source-id: 003b1369abb1a47e8ad37517745ab659116b95f6
2018-06-05 05:58:31 -07:00
Jeremy Fitzhardinge
a2daf8c2d5 mononoke: no need to pass Mysql connection params by value
Summary: It only needs to borrow them.

Reviewed By: kulshrax

Differential Revision: D8244267

fbshipit-source-id: 2a24a3b7c6eb65177e4e26c57650dd7e096b4202
2018-06-04 08:51:25 -07:00
Stanislau Hlebik
0b93cff8d4 mononoke: add a method to fetch all filenodes at once
Summary:
It will be used in getfiles wireproto method. It requires fetching the whole
file history, and doing lots of point lookups is too slow.

Reviewed By: lukaspiatkowski

Differential Revision: D8182050

fbshipit-source-id: b17cb2259b2237f0027bfb499fbe97d9b40b1a62
2018-05-29 04:11:47 -07:00
Stanislau Hlebik
ef4c28f4f1 mononoke: refactor dieselfilenodes
Summary:
Move functionality of converting FilenodeRow into FilenodeInfo into a separate
function. It will be used in the next diff

Reviewed By: lukaspiatkowski

Differential Revision: D8182051

fbshipit-source-id: f2276aa979200f71aa05808595842c09a9f5899f
2018-05-29 04:11:47 -07:00
Stanislau Hlebik
865b59eb46 mononoke: add has_copyinfo
Summary:
Motivation for this change is the following:
We want to avoid doing point lookups to the db to fetch the history, and
instead select the history for a file or a directory with a single select. That
should be many times faster.
After we select the data from filenodes table, we need to fetch  copy info
data. To do that we need to either do lots of point lookups to the fixedcopyinfo (which
undermines the point of doing single select) or construct a giant select
statement. First option is inefficient, the second can introduce big code
complexity.

Instead let's add a single field that says whether we have fixed copy info or
not. Db size increase should be tiny.

For the data that we've already imported I'm planning to run a script that will
fill the has_copyinfo field correctly.

Reviewed By: jsgf

Differential Revision: D8164029

fbshipit-source-id: c91c99b065808a93a9b361914cf9b3822d78cb60
2018-05-27 13:06:17 -07:00
Stanislau Hlebik
44ce21f2b4 mononoke: add stats
Summary: It can be useful to understand how often do we hit a db, write to blobstore, etc

Reviewed By: farnz

Differential Revision: D7806954

fbshipit-source-id: 9c85cbb11e184ae9f7751e05e961980b29b7568a
2018-05-01 06:07:53 -07:00
Jeremy Fitzhardinge
2e7a6fd668 tp2: update to rust-1.25.0
Summary:
Update x86 and aarch64 toolchains, rust-crates-io update.
The `use_nested_groups` feature is now stable, so we don't need to list it in
`#![feature(...)]` lines.

Reviewed By: kulshrax

Differential Revision: D7690730

fbshipit-source-id: 5f74bb01df6bd88a66ac00a82e446c18e3a1c43d
2018-04-21 22:45:55 -07:00
Stanislau Hlebik
0a6f16f39e mononoke: make async filenodes
Summary:
Just as with changesets, let's make filenodes async.

I had to make unit-tests use async_unit, otherwise tokio::spawn() failed with
SpawnedError. I'm not sure why it happened, but async_unit has fixed the issue

Reviewed By: lukaspiatkowski

Differential Revision: D7635554

fbshipit-source-id: c6130b95cee2d60d0b6eec0ab6c1b3e4f3a26ccd
2018-04-21 11:24:24 -07:00
Stanislau Hlebik
18097eff28 mononoke: connection pooling in filenodes
Summary:
Add functions that return a db connection.
This is the first step to make filenodes truly async.
The code is very similar to Diesel Changesets implementation

Reviewed By: lukaspiatkowski

Differential Revision: D7585297

fbshipit-source-id: 93df9ccbbdf0c29d6c977fec83444bc5ba9aa707
2018-04-18 04:09:09 -07:00
Lukas Piatkowski
73034a99b2 CODEMOD: rename mercurial_types::HgFileNodeId to DFileNodeId
Summary: mercurial_types::DFileNodeId should be replaced by types from mononoke_types in most cases. This rename should help with tracking this

Reviewed By: sid0

Differential Revision: D7619290

fbshipit-source-id: aa6a8e55ae3810c4531028c3b3db2e5730fe7846
2018-04-16 03:40:24 -07:00
Lukas Piatkowski
f6c3f72745 CODEMOD: rename mercurial_types::HgChangesetId to DChangesetId
Summary: mercurial_types::DChangesetId should be replaced by types from mononoke_types in most cases and by mercurial::HgChangesetId in others. This rename should help with tracking this

Reviewed By: sid0

Differential Revision: D7618897

fbshipit-source-id: 78904f57376606be99b56662164e0c110e632c64
2018-04-16 03:40:24 -07:00
Lukas Piatkowski
16cbfd5133 CODEMOD: rename mercurial_types::NodeHash to DNodeHash
Summary: mercurial_types::NodeHash should be replaced by types from mononoke_types in most cases and by mercurial::NodeHash in others. This rename should help with tracking this fact.

Reviewed By: sid0

Differential Revision: D7618389

fbshipit-source-id: a876e723d911df626c7851fba56a056843b4e049
2018-04-16 03:40:24 -07:00
Stanislau Hlebik
a248be3bec mononoke: add open_or_create and insert_chunk_size params
Summary:
open_or_create is useful for testing.
insert_chunk_size sets the mysql batch size

Reviewed By: farnz

Differential Revision: D7429043

fbshipit-source-id: 9d651a2f71abb9022c5390d059e4298efb49f38c
2018-03-29 03:29:57 -07:00
Stanislau Hlebik
8fb761a261 mononoke: simple dieselfilenodes-cmd binary
Summary: To query all the parents of the filenode. This emulates getfiles request

Reviewed By: farnz

Differential Revision: D7427133

fbshipit-source-id: 54d054fc7a30db027aa327d3be3b93c86dd3a223
2018-03-28 08:25:40 -07:00
Stanislau Hlebik
f1c86c6eab mononoke: handle copy data in dieselfilenodes
Summary:
Previously all the copy information was ignored. In this diff we are using it.
Note that `paths` table is also used now - it is used to convert from hash of
the path to the real path.

Reviewed By: farnz

Differential Revision: D7381437

fbshipit-source-id: 13f8bf0f269cf40d06693dd0cdca15da40c1ab64
2018-03-28 03:25:27 -07:00
Stanislau Hlebik
f550dfc41d mononoke: diesel filenodes implementation
Summary:
Initial support for filenodes using diesel.
These filenodes implementation is very close to what hg stores in revlog files.
Currently this implementation doesn't support copies.
This issue will be fixed in the next diffs.

Reviewed By: farnz

Differential Revision: D7305910

fbshipit-source-id: bbb0196dbee24c3a99d58055de11d433a518e40b
2018-03-28 03:25:27 -07:00