mirror of
https://github.com/facebook/sapling.git
synced 2024-10-10 16:57:49 +03:00
Make the commit API record completion in the Changesets table
Summary: We want to use the Changeset table as source of truth for changesets. Record completed changesets in the database. Additionally, now that completion is a database matter, increase the available parallelism marginally, by allowing the changeset to upload while its parents are still uploading Reviewed By: jsgf Differential Revision: D7071700 fbshipit-source-id: 405bf84eba4a06e3d6c6299ade2fbea99edf9c19
This commit is contained in:
parent
5e074bdd43
commit
282db746c5
@ -20,7 +20,7 @@ use futures_ext::{BoxFuture, BoxStream, FutureExt, StreamExt};
|
||||
|
||||
use blobstore::Blobstore;
|
||||
use bookmarks::Bookmarks;
|
||||
use changesets::{Changesets, SqliteChangesets};
|
||||
use changesets::{ChangesetInsert, Changesets, SqliteChangesets};
|
||||
use fileblob::Fileblob;
|
||||
use filebookmarks::FileBookmarks;
|
||||
use fileheads::FileHeads;
|
||||
@ -402,10 +402,25 @@ impl BlobRepo {
|
||||
let parents_complete =
|
||||
parents_complete.map_err(|e| ErrorKind::ParentsFailed.context(e).into());
|
||||
|
||||
// TODO This should call the completion API before returning changeset
|
||||
let complete_changesets = self.changesets.clone();
|
||||
let repo_id = self.repoid;
|
||||
ChangesetHandle::new_pending(
|
||||
can_be_parent.shared(),
|
||||
parents_complete.and_then(|_| changeset).boxify().shared(),
|
||||
changeset
|
||||
.join(parents_complete)
|
||||
.and_then(move |(cs, _)| {
|
||||
let completion_record = ChangesetInsert {
|
||||
repo_id: repo_id,
|
||||
cs_id: cs.get_changeset_id(),
|
||||
parents: cs.parents()
|
||||
.into_iter()
|
||||
.map(|n| ChangesetId::new(n))
|
||||
.collect(),
|
||||
};
|
||||
complete_changesets.add(&completion_record).map(|_| cs)
|
||||
})
|
||||
.boxify()
|
||||
.shared(),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user