From 9aa5c6a64afca481ba9c8c5b053fe7f93eca9966 Mon Sep 17 00:00:00 2001 From: Mark Juggurnauth-Thomas Date: Mon, 4 Oct 2021 06:58:02 -0700 Subject: [PATCH] dangerous_override: add overrides for derived data manager Summary: Add overrides for changesets, filenodes and bonsai_hg_mapping in the derived data manager. Reviewed By: yancouto Differential Revision: D31378456 fbshipit-source-id: b1faa543ca65fa041d2d0ddc908ea5fb950d023a --- eden/mononoke/blobrepo/override/src/lib.rs | 15 +++++++++ eden/mononoke/derived_data/manager/manager.rs | 33 +++++++++++++++++++ .../repo_derived_data/src/lib.rs | 29 ++++++++++++++++ 3 files changed, 77 insertions(+) diff --git a/eden/mononoke/blobrepo/override/src/lib.rs b/eden/mononoke/blobrepo/override/src/lib.rs index c74689bc82..9d8b33df6a 100644 --- a/eden/mononoke/blobrepo/override/src/lib.rs +++ b/eden/mononoke/blobrepo/override/src/lib.rs @@ -87,10 +87,15 @@ impl DangerousOverride for BlobRepoInner { let changesets = modify(self.changesets.clone()); let changeset_fetcher = Arc::new(SimpleChangesetFetcher::new(changesets.clone(), self.repoid)); + let repo_derived_data = Arc::new( + self.repo_derived_data + .with_replaced_changesets(changesets.clone()), + ); Self { changesets, changeset_fetcher, + repo_derived_data, ..self.clone() } } @@ -102,8 +107,13 @@ impl DangerousOverride for BlobRepoInner { F: FnOnce(ArcFilenodes) -> ArcFilenodes, { let filenodes = modify(self.filenodes.clone()); + let repo_derived_data = Arc::new( + self.repo_derived_data + .with_replaced_filenodes(filenodes.clone()), + ); Self { filenodes, + repo_derived_data, ..self.clone() } } @@ -115,8 +125,13 @@ impl DangerousOverride for BlobRepoInner { F: FnOnce(ArcBonsaiHgMapping) -> ArcBonsaiHgMapping, { let bonsai_hg_mapping = modify(self.bonsai_hg_mapping.clone()); + let repo_derived_data = Arc::new( + self.repo_derived_data + .with_replaced_bonsai_hg_mapping(bonsai_hg_mapping.clone()), + ); Self { bonsai_hg_mapping, + repo_derived_data, ..self.clone() } } diff --git a/eden/mononoke/derived_data/manager/manager.rs b/eden/mononoke/derived_data/manager/manager.rs index 3be02b6eff..4943ab9c67 100644 --- a/eden/mononoke/derived_data/manager/manager.rs +++ b/eden/mononoke/derived_data/manager/manager.rs @@ -93,6 +93,39 @@ impl DerivedDataManager { } } + // For dangerous-override: allow replacement of changesets + pub fn with_replaced_changesets(&self, changesets: Arc) -> Self { + Self { + inner: Arc::new(DerivedDataManagerInner { + changesets, + ..self.inner.as_ref().clone() + }), + } + } + + // For dangerous-override: allow replacement of bonsai-hg-mapping + pub fn with_replaced_bonsai_hg_mapping( + &self, + bonsai_hg_mapping: Arc, + ) -> Self { + Self { + inner: Arc::new(DerivedDataManagerInner { + bonsai_hg_mapping, + ..self.inner.as_ref().clone() + }), + } + } + + // For dangerous-override: allow replacement of filenodes + pub fn with_replaced_filenodes(&self, filenodes: Arc) -> Self { + Self { + inner: Arc::new(DerivedDataManagerInner { + filenodes, + ..self.inner.as_ref().clone() + }), + } + } + pub fn repo_id(&self) -> RepositoryId { self.inner.repo_id } diff --git a/eden/mononoke/repo_attributes/repo_derived_data/src/lib.rs b/eden/mononoke/repo_attributes/repo_derived_data/src/lib.rs index acc1c3e863..404f6e270e 100644 --- a/eden/mononoke/repo_attributes/repo_derived_data/src/lib.rs +++ b/eden/mononoke/repo_attributes/repo_derived_data/src/lib.rs @@ -76,6 +76,35 @@ impl RepoDerivedData { } } + // For dangerous-override: allow replacement of changesets + pub fn with_replaced_changesets(&self, changesets: Arc) -> Self { + Self { + config: self.config.clone(), + manager: self.manager.with_replaced_changesets(changesets), + } + } + + // For dangerous-override: allow replacement of bonsai-hg-mapping + pub fn with_replaced_bonsai_hg_mapping( + &self, + bonsai_hg_mapping: Arc, + ) -> Self { + Self { + config: self.config.clone(), + manager: self + .manager + .with_replaced_bonsai_hg_mapping(bonsai_hg_mapping), + } + } + + // For dangerous-override: allow replacement of filenodes + pub fn with_replaced_filenodes(&self, filenodes: Arc) -> Self { + Self { + config: self.config.clone(), + manager: self.manager.with_replaced_filenodes(filenodes), + } + } + /// Current derived data configuration for this repo. pub fn config(&self) -> &DerivedDataConfig { &self.config