mirror of
https://github.com/facebook/sapling.git
synced 2024-10-07 07:17:55 +03:00
function for checking if segmented changelog has certain commit indexed
Summary: This can be used by slow bookmark mover to check if the certain commits were indexed by segmented changelog. The current implementation has to instantiate the SC but in the future we don't need to do it. Reviewed By: farnz Differential Revision: D35744724 fbshipit-source-id: d694a135db0b9af6493477b31d7c1e4277471e8c
This commit is contained in:
parent
60e2ca6c55
commit
073e1a5da8
@ -186,6 +186,26 @@ impl SegmentedChangelogManager {
|
||||
)
|
||||
})?)
|
||||
}
|
||||
|
||||
/// Checks if given changeset is indexed by given segmented changelog version.
|
||||
#[cfg(test)]
|
||||
pub async fn check_if_changeset_indexed(
|
||||
&self,
|
||||
ctx: &CoreContext,
|
||||
sc_version: &SegmentedChangelogVersion,
|
||||
cs_id: ChangesetId,
|
||||
) -> Result<bool> {
|
||||
let iddag = self
|
||||
.iddag_save_store
|
||||
.load(ctx, sc_version.iddag_version)
|
||||
.await
|
||||
.with_context(|| format!("repo {}: failed to load iddag", self.repo_id))?;
|
||||
let idmap = self
|
||||
.idmap_factory
|
||||
.for_server(ctx, sc_version.idmap_version, &iddag)?;
|
||||
let result = idmap.find_dag_id(ctx, cs_id).await?;
|
||||
Ok(result.is_some())
|
||||
}
|
||||
}
|
||||
|
||||
segmented_changelog_delegate!(SegmentedChangelogManager, |&self, ctx: &CoreContext| {
|
||||
|
@ -1049,6 +1049,41 @@ async fn test_periodic_reload(fb: FacebookInit) -> Result<()> {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[fbinit::test]
|
||||
async fn test_manager_check_if_indexed(fb: FacebookInit) -> Result<()> {
|
||||
let ctx = CoreContext::test_mock(fb);
|
||||
let blobrepo = Arc::new(Linear::getrepo(fb).await);
|
||||
let conns = SegmentedChangelogSqlConnections::with_sqlite_in_memory()?;
|
||||
|
||||
let start_cs_id =
|
||||
resolve_cs_id(&ctx, &blobrepo, "607314ef579bd2407752361ba1b0c1729d08b281").await?;
|
||||
let master = resolve_cs_id(&ctx, &blobrepo, "79a13814c5ce7330173ec04d279bf95ab3f652fb").await?;
|
||||
|
||||
seed(&ctx, &blobrepo, &conns, start_cs_id).await?;
|
||||
|
||||
tokio::time::pause();
|
||||
let manager = get_manager(&blobrepo, &conns, vec![], SegmentedChangelogType::Owned).await?;
|
||||
|
||||
// Changeset is not part of segmented changelog before tailer run.
|
||||
let version = manager.latest_version(&ctx).await?;
|
||||
assert!(
|
||||
!manager
|
||||
.check_if_changeset_indexed(&ctx, &version, master)
|
||||
.await?
|
||||
);
|
||||
|
||||
let tailer = new_tailer_for_tailing(&blobrepo, &conns).await?;
|
||||
let _ = tailer.once(&ctx, false).await?;
|
||||
// Changeset is part of segmented changelog after tailer run.
|
||||
let version = manager.latest_version(&ctx).await?;
|
||||
assert!(
|
||||
manager
|
||||
.check_if_changeset_indexed(&ctx, &version, master)
|
||||
.await?
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[fbinit::test]
|
||||
async fn test_mismatched_heads(fb: FacebookInit) -> Result<()> {
|
||||
let ctx = CoreContext::test_mock(fb);
|
||||
|
Loading…
Reference in New Issue
Block a user