Skip to content

Commit 74d1d62

Browse files
committed
Trace slots of delayed snapshots
1 parent 1d0a2f1 commit 74d1d62

3 files changed

Lines changed: 18 additions & 6 deletions

File tree

ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Storage/LedgerDB/Snapshots.hs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,7 @@ import qualified Data.Aeson as Aeson
116116
import Data.Aeson.Types (Parser)
117117
import Data.Functor.Identity
118118
import qualified Data.List as List
119+
import Data.List.NonEmpty (NonEmpty)
119120
import Data.Maybe (catMaybes, isJust, mapMaybe, maybeToList)
120121
import Data.Ord
121122
import Data.Set (Set)
@@ -711,8 +712,8 @@ data TraceSnapshotEvent blk
711712
= -- | An on disk snapshot was skipped because it was invalid.
712713
InvalidSnapshot DiskSnapshot (SnapshotFailure blk)
713714
| -- | A delayed snapshot requested was issued at a timestamp,
714-
-- with a delay and for N snapshots
715-
SnapshotRequestDelayed Time DiffTime Int
715+
-- with a delay and for ledger states at the specified slot numbers
716+
SnapshotRequestDelayed Time DiffTime (NonEmpty SlotNo)
716717
| -- | A snapshot request was completed
717718
SnapshotRequestCompleted
718719
| -- | A snapshot was written to disk.

ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Storage/LedgerDB/V1.hs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import Data.Functor ((<&>))
2525
import Data.Functor.Contravariant ((>$<))
2626
import Data.Kind (Type)
2727
import Data.List.NonEmpty (NonEmpty)
28+
import qualified Data.List.NonEmpty as NonEmpty
2829
import Data.Maybe (isJust, mapMaybe)
2930
import Data.Set (Set)
3031
import qualified Data.Set as Set
@@ -347,8 +348,12 @@ implTryTakeSnapshot snapManager env copyBlocks snapshotRequestTime getRandomDela
347348
copyBlocks
348349

349350
delayBeforeSnapshotting <- getRandomDelay (onDiskSnapshotDelayRange (ldbSnapshotPolicy env))
351+
let nonEmptySnapshotSlots =
352+
case NonEmpty.nonEmpty $ snapshotSlots of
353+
Nothing -> error "impossible: empty handles, see pattern-match above"
354+
Just slots -> slots
350355
traceWith (LedgerDBSnapshotEvent >$< ldbTracer env) $
351-
SnapshotRequestDelayed snapshotRequestTime delayBeforeSnapshotting (length snapshotSlots)
356+
SnapshotRequestDelayed snapshotRequestTime delayBeforeSnapshotting nonEmptySnapshotSlots
352357
threadDelay delayBeforeSnapshotting
353358

354359
forM_ snapshotSlots $ \slot -> do

ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Storage/LedgerDB/V2.hs

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
{-# LANGUAGE ScopedTypeVariables #-}
88
{-# LANGUAGE StandaloneDeriving #-}
99
{-# LANGUAGE StandaloneKindSignatures #-}
10+
{-# LANGUAGE TupleSections #-}
1011
{-# LANGUAGE TypeApplications #-}
1112
{-# LANGUAGE TypeFamilies #-}
1213
{-# LANGUAGE TypeOperators #-}
@@ -26,6 +27,7 @@ import qualified Data.Foldable as Foldable
2627
import Data.Functor.Contravariant ((>$<))
2728
import Data.Kind (Type)
2829
import Data.List.NonEmpty (NonEmpty)
30+
import qualified Data.List.NonEmpty as NonEmpty
2931
import Data.Maybe (mapMaybe)
3032
import Data.Set (Set)
3133
import qualified Data.Set as Set
@@ -364,7 +366,7 @@ implTryTakeSnapshot snapManager env copyBlocks snapshotRequestTime getRandomDela
364366
-- Prune the 'LedgerSeq' such that the resulting anchor state has slot
365367
-- number @slot@.
366368
let pruneStrat = LedgerDbPruneBeforeSlot (slot + 1)
367-
duplicateStateRef $ anchorHandle $ snd $ prune pruneStrat lseq
369+
(slot,) <$> (duplicateStateRef $ anchorHandle $ snd $ prune pruneStrat lseq)
368370

369371
-- look at the list of the ledger tables handles from the previous step and take the snapshots
370372
case handles of
@@ -373,11 +375,15 @@ implTryTakeSnapshot snapManager env copyBlocks snapshotRequestTime getRandomDela
373375
copyBlocks
374376

375377
delayBeforeSnapshotting <- getRandomDelay (onDiskSnapshotDelayRange (ldbSnapshotPolicy env))
378+
let slotsOfHandles =
379+
case NonEmpty.nonEmpty $ map fst handles of
380+
Nothing -> error "impossible: empty handles, see pattern-match above"
381+
Just slots -> slots
376382
traceWith (LedgerDBSnapshotEvent >$< ldbTracer env) $
377-
SnapshotRequestDelayed snapshotRequestTime delayBeforeSnapshotting (length handles)
383+
SnapshotRequestDelayed snapshotRequestTime delayBeforeSnapshotting slotsOfHandles
378384
threadDelay delayBeforeSnapshotting
379385

380-
for_ handles $ \h -> do
386+
for_ handles $ \(_, h) -> do
381387
Monad.void $ takeSnapshot snapManager Nothing h
382388

383389
atomically $ writeTVar (ldbLastSnapshotRequestedAt env) (Just $! snapshotRequestTime)

0 commit comments

Comments
 (0)