3a1f39fbdf
This fixes a problem with datalad's test suite, where loading the cluster log happened to cause the git-annex branch commits to take a different shape, with an additional commit. It's also faster though, since many commands don't need the cluster log. Just fill Annex.clusters with a thunk. Sponsored-by: the NIH-funded NICEMAN (ReproNim TR&D3) project
47 lines
1.2 KiB
Haskell
47 lines
1.2 KiB
Haskell
{- git-annex cluster log
|
|
-
|
|
- Copyright 2024 Joey Hess <id@joeyh.name>
|
|
-
|
|
- Licensed under the GNU AGPL version 3 or higher.
|
|
-}
|
|
|
|
{-# LANGUAGE OverloadedStrings, TupleSections #-}
|
|
|
|
module Logs.Cluster (
|
|
module Types.Cluster,
|
|
getClusters,
|
|
loadClusters,
|
|
preLoadClusters,
|
|
recordCluster,
|
|
) where
|
|
|
|
import qualified Annex
|
|
import Annex.Common
|
|
import Types.Cluster
|
|
import Logs.Cluster.Basic
|
|
import Logs.Trust
|
|
|
|
import qualified Data.Map as M
|
|
import qualified Data.Set as S
|
|
|
|
getClusters :: Annex Clusters
|
|
getClusters = maybe loadClusters id =<< Annex.getState Annex.clusters
|
|
|
|
{- This works around a module dependency loop. -}
|
|
preLoadClusters :: Annex ()
|
|
preLoadClusters = Annex.changeState $ \s ->
|
|
s { Annex.clusters = Just loadClusters }
|
|
|
|
{- Loads the clusters and caches it for later.
|
|
-
|
|
- This takes care of removing dead nodes from clusters,
|
|
- to avoid inserting the cluster uuid into the location
|
|
- log when only dead nodes contain the content of a key.
|
|
-}
|
|
loadClusters :: Annex Clusters
|
|
loadClusters = do
|
|
dead <- (S.fromList . map ClusterNodeUUID)
|
|
<$> trustGet DeadTrusted
|
|
clusters <- getClustersWith (M.map (`S.difference` dead))
|
|
Annex.changeState $ \s -> s { Annex.clusters = Just (pure clusters) }
|
|
return clusters
|