mirror of
https://github.com/facebook/sapling.git
synced 2024-10-10 00:45:18 +03:00
dag: separate out AbstractNameDag::{verify_missing, reload, persist}
Summary: They will be reused in import_pull_data Reviewed By: quark-zju Differential Revision: D29147950 fbshipit-source-id: 192bf33c30067f43c4fcaaf3054741b39efb4e25
This commit is contained in:
parent
2de68ff1fd
commit
11f0f9152d
@ -363,12 +363,7 @@ where
|
||||
async fn import_clone_data(&mut self, clone_data: CloneData<VertexName>) -> Result<()> {
|
||||
// Write directly to disk. Bypassing "flush()" that re-assigns Ids
|
||||
// using parent functions.
|
||||
let lock = self.state.lock()?;
|
||||
let map_lock = self.map.lock()?;
|
||||
let dag_lock = self.dag.lock()?;
|
||||
self.state.reload(&lock)?;
|
||||
self.map.reload(&map_lock)?;
|
||||
self.dag.reload(&dag_lock)?;
|
||||
let (lock, map_lock, dag_lock) = self.reload()?;
|
||||
|
||||
if !self.dag.all()?.is_empty() {
|
||||
return programming("Cannot import clone data for non-empty graph");
|
||||
@ -379,7 +374,22 @@ where
|
||||
self.dag
|
||||
.build_segments_volatile_from_prepared_flat_segments(&clone_data.flat_segments)?;
|
||||
|
||||
// Verify that universally known vertexes and heads are present in IdMap.
|
||||
self.verify_missing().await?;
|
||||
|
||||
self.persist(lock, map_lock, dag_lock)
|
||||
}
|
||||
}
|
||||
|
||||
impl<IS, M, P, S> AbstractNameDag<IdDag<IS>, M, P, S>
|
||||
where
|
||||
IS: IdDagStore + Persist,
|
||||
IdDag<IS>: TryClone,
|
||||
M: TryClone + IdMapAssignHead + Persist + Send + Sync,
|
||||
P: TryClone + Send + Sync,
|
||||
S: TryClone + Persist + Send + Sync,
|
||||
{
|
||||
/// Verify that universally known vertexes and heads are present in IdMap.
|
||||
async fn verify_missing(&self) -> Result<()> {
|
||||
let missing: Vec<Id> = {
|
||||
let universal_ids: Vec<Id> = self.dag.universal_ids()?.into_iter().collect();
|
||||
tracing::debug!("clone: {} universally known vertexes", universal_ids.len());
|
||||
@ -401,6 +411,21 @@ where
|
||||
return programming(msg);
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn reload(&mut self) -> Result<(S::Lock, M::Lock, IS::Lock)> {
|
||||
let lock = self.state.lock()?;
|
||||
let map_lock = self.map.lock()?;
|
||||
let dag_lock = self.dag.lock()?;
|
||||
self.state.reload(&lock)?;
|
||||
self.map.reload(&map_lock)?;
|
||||
self.dag.reload(&dag_lock)?;
|
||||
|
||||
Ok((lock, map_lock, dag_lock))
|
||||
}
|
||||
|
||||
fn persist(&mut self, lock: S::Lock, map_lock: M::Lock, dag_lock: IS::Lock) -> Result<()> {
|
||||
self.map.persist(&map_lock)?;
|
||||
self.dag.persist(&dag_lock)?;
|
||||
self.state.persist(&lock)?;
|
||||
|
Loading…
Reference in New Issue
Block a user