From b158e067c0e105862ca8f9ec3cb4726ab5de7508 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Wed, 19 Mar 2025 09:35:29 -0400 Subject: [PATCH] avoid reloading trust log --- Logs/Trust.hs | 3 +-- Logs/Trust/Basic.hs | 4 ++++ Remote/Compute.hs | 21 +++++++++++++++++---- 3 files changed, 22 insertions(+), 6 deletions(-) diff --git a/Logs/Trust.hs b/Logs/Trust.hs index f7a705f7de..4554145a0d 100644 --- a/Logs/Trust.hs +++ b/Logs/Trust.hs @@ -20,7 +20,6 @@ module Logs.Trust ( import Annex.Common import Types.TrustLevel -import qualified Annex import Logs import Remote.List import Logs.Trust.Basic as X @@ -61,7 +60,7 @@ trustExclude level ls = snd <$> trustPartition level ls {- trustLog in a map, overridden with any values from forcetrust or - the git config. The map is cached for speed. -} trustMap :: Annex TrustMap -trustMap = maybe trustMapLoad return =<< Annex.getState Annex.trustmap +trustMap = trustMap' =<< remoteList {- Loads the map, updating the cache, -} trustMapLoad :: Annex TrustMap diff --git a/Logs/Trust/Basic.hs b/Logs/Trust/Basic.hs index b05c072927..8697df635b 100644 --- a/Logs/Trust/Basic.hs +++ b/Logs/Trust/Basic.hs @@ -9,6 +9,7 @@ module Logs.Trust.Basic ( module X, trustSet, trustMapRaw, + trustMap', trustMapLoad', ) where @@ -39,6 +40,9 @@ trustSet NoUUID _ = error "unknown UUID; cannot modify" trustMapRaw :: Annex TrustMap trustMapRaw = calcTrustMap <$> Annex.Branch.get trustLog +trustMap' :: [Remote] -> Annex TrustMap +trustMap' l = maybe (trustMapLoad' l) return =<< Annex.getState Annex.trustmap + trustMapLoad' :: [Remote] -> Annex TrustMap trustMapLoad' l = do forceoverrides <- Annex.getState Annex.forcetrust diff --git a/Remote/Compute.hs b/Remote/Compute.hs index 792105a1b8..140eb9bd94 100644 --- a/Remote/Compute.hs +++ b/Remote/Compute.hs @@ -755,6 +755,8 @@ computeKey rs (ComputeProgram program) k _af dest meterupdate vc = keyPossibilities :: Key -> Annex [Remote] keyPossibilities key = do + -- This gets populated with a list of all remotes before this + -- remote is used. remotelist <- Annex.getState Annex.remotes locs <- loggedLocations key keyPossibilities' (IncludeIgnored False) key locs remotelist @@ -804,12 +806,23 @@ avoidCycles outputkeys inputkey = filterM go -- its inputs are also still available. checkKey :: RemoteStateHandle -> Key -> Annex Bool checkKey rs k = do - deadset <- S.fromList . M.keys . M.filter (== DeadTrusted) - <$> (trustMapLoad' =<< Annex.getState Annex.remotes) - computeset <- S.fromList . M.keys . M.filter isComputeRemote' - <$> remoteConfigMap + deadset <- getdeadset + computeset <- getcomputeset availablecompute [] deadset computeset k rs where + getdeadset = do + -- Usually this will already be populated with all remotes, + -- otherwise this compute remote would not be used. Check + -- just in case, to avoid trustMap' caching bad inputs. + rs <- Annex.getState Annex.remotes + if null rs + then error "internal" + else S.fromList . M.keys . M.filter (== DeadTrusted) + <$> trustMap' rs + + getcomputeset = S.fromList . M.keys . M.filter isComputeRemote' + <$> remoteConfigMap + availablecompute inputkeys deadset computeset k' rs' | k' `elem` inputkeys = return False -- avoid cycles | otherwise =