diff --git a/eden/mononoke/blobrepo/blobrepo_hg/src/lib.rs b/eden/mononoke/blobrepo/blobrepo_hg/src/lib.rs index 9340edb6e2..ca907054e5 100644 --- a/eden/mononoke/blobrepo/blobrepo_hg/src/lib.rs +++ b/eden/mononoke/blobrepo/blobrepo_hg/src/lib.rs @@ -39,6 +39,7 @@ use futures::{ stream::{self, BoxStream}, Stream, StreamExt, TryFutureExt, TryStreamExt, }; +use mercurial_derived_data::DeriveHgChangeset; use mercurial_mutation::ArcHgMutationStore; use mercurial_types::{HgChangesetId, HgFileNodeId}; use mononoke_types::{ChangesetId, RepoPath}; @@ -397,7 +398,7 @@ impl BlobRepoHg for BlobRepo { ctx: CoreContext, bcs_id: ChangesetId, ) -> Result { - mercurial_derived_data::get_hg_from_bonsai_changeset(self.clone(), ctx, bcs_id).await + self.derive_hg_changeset(&ctx, bcs_id).await } } diff --git a/eden/mononoke/derived_data/mercurial_derived_data/Cargo.toml b/eden/mononoke/derived_data/mercurial_derived_data/Cargo.toml index ae0ff24bb0..4813782ec9 100644 --- a/eden/mononoke/derived_data/mercurial_derived_data/Cargo.toml +++ b/eden/mononoke/derived_data/mercurial_derived_data/Cargo.toml @@ -13,7 +13,6 @@ path = "lib.rs" [dependencies] anyhow = "1.0.51" async-trait = "0.1.52" -blobrepo = { version = "0.1.0", path = "../../blobrepo" } blobrepo_common = { version = "0.1.0", path = "../../blobrepo/common" } blobrepo_errors = { version = "0.1.0", path = "../../blobrepo/errors" } blobstore = { version = "0.1.0", path = "../../blobstore" } @@ -28,18 +27,19 @@ futures = { version = "0.3.13", features = ["async-await", "compat"] } manifest = { version = "0.1.0", path = "../../manifest" } mercurial_types = { version = "0.1.0", path = "../../mercurial/types" } mononoke_types = { version = "0.1.0", path = "../../mononoke_types" } +repo_derived_data = { version = "0.1.0", path = "../../repo_attributes/repo_derived_data" } slog = { version = "2.7", features = ["max_level_trace", "nested-values"] } sorted_vector_map = { version = "0.1.0", git = "https://github.com/facebookexperimental/rust-shed.git", branch = "main" } stats = { version = "0.1.0", git = "https://github.com/facebookexperimental/rust-shed.git", branch = "main" } tokio = { version = "1.15", features = ["full", "test-util", "tracing"] } [dev-dependencies] +blobrepo = { version = "0.1.0", path = "../../blobrepo" } blobrepo_hg = { version = "0.1.0", path = "../../blobrepo/blobrepo_hg" } bookmarks = { version = "0.1.0", path = "../../bookmarks" } fbinit = { version = "0.1.0", git = "https://github.com/facebookexperimental/rust-shed.git", branch = "main" } fbinit-tokio = { version = "0.1.0", git = "https://github.com/facebookexperimental/rust-shed.git", branch = "main" } fixtures = { version = "0.1.0", path = "../../tests/fixtures" } -repo_derived_data = { version = "0.1.0", path = "../../repo_attributes/repo_derived_data" } revset = { version = "0.1.0", path = "../../revset" } test_repo_factory = { version = "0.1.0", path = "../../repo_factory/test_repo_factory" } tests_utils = { version = "0.1.0", path = "../../tests/utils" } diff --git a/eden/mononoke/derived_data/mercurial_derived_data/derive_hg_changeset.rs b/eden/mononoke/derived_data/mercurial_derived_data/derive_hg_changeset.rs index b9bb04f722..66dc880e00 100644 --- a/eden/mononoke/derived_data/mercurial_derived_data/derive_hg_changeset.rs +++ b/eden/mononoke/derived_data/mercurial_derived_data/derive_hg_changeset.rs @@ -10,13 +10,13 @@ use crate::{ mapping::{HgChangesetDeriveOptions, MappedHgChangesetId}, }; use anyhow::{anyhow, bail, Error}; -use blobrepo::BlobRepo; +use async_trait::async_trait; use blobrepo_common::changed_files::compute_changed_files; use blobstore::{Blobstore, Loadable}; use borrowed::borrowed; use cloned::cloned; use context::CoreContext; -use derived_data::{BonsaiDerived, DeriveError}; +use derived_data_manager::DerivationError; use futures::{ future::{self, try_join, try_join_all}, stream, FutureExt, TryStreamExt, @@ -32,6 +32,7 @@ use mercurial_types::{ use mononoke_types::{ BonsaiChangeset, ChangesetId, FileChange, FileType, MPath, TrackedFileChange, }; +use repo_derived_data::RepoDerivedDataRef; use stats::prelude::*; use std::sync::Arc; use std::{collections::HashMap, time::Instant}; @@ -474,21 +475,38 @@ async fn generate_hg_changeset( Ok((csid, cs)) } -pub async fn get_hg_from_bonsai_changeset( - repo: BlobRepo, - ctx: CoreContext, - bcs_id: ChangesetId, -) -> Result { - STATS::get_hg_from_bonsai_changeset.add_value(1); - let start_timestmap = Instant::now(); - let result = match MappedHgChangesetId::derive(&ctx, &repo, bcs_id).await { - Ok(id) => Ok(id.hg_changeset_id()), - Err(err) => match err { - DeriveError::Disabled(..) => Err(err.into()), - DeriveError::Error(err) => Err(err), - }, - }; - STATS::generate_hg_from_bonsai_total_latency_ms - .add_value(start_timestmap.elapsed().as_millis() as i64); - result +#[async_trait] +pub trait DeriveHgChangeset { + async fn derive_hg_changeset( + &self, + ctx: &CoreContext, + cs_id: ChangesetId, + ) -> Result; +} + +#[async_trait] +impl DeriveHgChangeset for Repo +where + Repo: RepoDerivedDataRef + Send + Sync, +{ + async fn derive_hg_changeset( + &self, + ctx: &CoreContext, + cs_id: ChangesetId, + ) -> Result { + STATS::get_hg_from_bonsai_changeset.add_value(1); + let start_timestamp = Instant::now(); + let result = match self + .repo_derived_data() + .derive::(ctx, cs_id) + .await + { + Ok(id) => Ok(id.hg_changeset_id()), + Err(err @ DerivationError::Disabled(..)) => Err(err.into()), + Err(DerivationError::Error(err)) => Err(err), + }; + STATS::generate_hg_from_bonsai_total_latency_ms + .add_value(start_timestamp.elapsed().as_millis() as i64); + result + } } diff --git a/eden/mononoke/derived_data/mercurial_derived_data/lib.rs b/eden/mononoke/derived_data/mercurial_derived_data/lib.rs index ea09671f19..397b2bb4e8 100644 --- a/eden/mononoke/derived_data/mercurial_derived_data/lib.rs +++ b/eden/mononoke/derived_data/mercurial_derived_data/lib.rs @@ -11,6 +11,6 @@ pub mod derive_hg_changeset; pub mod derive_hg_manifest; mod mapping; -pub use derive_hg_changeset::{get_hg_from_bonsai_changeset, get_manifest_from_bonsai}; +pub use derive_hg_changeset::{get_manifest_from_bonsai, DeriveHgChangeset}; pub use derive_hg_manifest::derive_hg_manifest; pub use mapping::MappedHgChangesetId;