@@ -20,6 +20,7 @@ module Ouroboros.Consensus.Storage.LedgerDB.V2 (mkInitDb) where
2020import Control.Arrow ((>>>) )
2121import qualified Control.Monad as Monad (void , (>=>) )
2222import Control.Monad.Except
23+ import Control.Monad.Trans (lift )
2324import Control.RAWLock
2425import qualified Control.RAWLock as RAWLock
2526import Control.ResourceRegistry
@@ -563,39 +564,30 @@ acquireAtTarget ::
563564 Either Word64 (Target (Point blk )) ->
564565 LDBLock ->
565566 m (Either GetForkerError (StateRef m l ))
566- acquireAtTarget ldbEnv (Right VolatileTip ) _ = do
567- l <- readTVarIO (ldbSeq ldbEnv)
568- let StateRef st tbs = currentHandle l
569- t <- duplicate tbs
570- pure $ Right $ StateRef st t
571- acquireAtTarget ldbEnv (Right ImmutableTip ) _ = do
572- l <- readTVarIO (ldbSeq ldbEnv)
573- let StateRef st tbs = anchorHandle l
574- t <- duplicate tbs
575- pure $ Right $ StateRef st t
576- acquireAtTarget ldbEnv (Right (SpecificPoint pt)) _ = do
577- dblog <- readTVarIO (ldbSeq ldbEnv)
578- let immTip = getTip $ anchor dblog
579- case currentHandle <$> rollback pt dblog of
580- Nothing
581- | pointSlot pt < pointSlot immTip -> pure $ Left $ PointTooOld Nothing
582- | otherwise -> pure $ Left PointNotOnChain
583- Just (StateRef st tbs) ->
584- Right . StateRef st <$> duplicate tbs
585- acquireAtTarget ldbEnv (Left n) _ = do
586- dblog <- readTVarIO (ldbSeq ldbEnv)
587- case currentHandle <$> rollbackN n dblog of
588- Nothing ->
589- return $
590- Left $
567+ acquireAtTarget ldbEnv target _ = runExceptT $ do
568+ l <- lift $ readTVarIO (ldbSeq ldbEnv)
569+ StateRef st tbs <- case target of
570+ Right VolatileTip -> pure $ currentHandle l
571+ Right ImmutableTip -> pure $ anchorHandle l
572+ Right (SpecificPoint pt) -> do
573+ let immTip = getTip $ anchor l
574+ case rollback pt l of
575+ Nothing
576+ | pointSlot pt < pointSlot immTip -> throwError $ PointTooOld Nothing
577+ | otherwise -> throwError PointNotOnChain
578+ Just t' -> pure $ currentHandle t'
579+ Left n -> case rollbackN n l of
580+ Nothing ->
581+ throwError $
591582 PointTooOld $
592- Just $
583+ Just
593584 ExceededRollback
594- { rollbackMaximum = maxRollback dblog
585+ { rollbackMaximum = maxRollback l
595586 , rollbackRequested = n
596587 }
597- Just (StateRef st tbs) ->
598- Right . StateRef st <$> duplicate tbs
588+ Just l' -> pure $ currentHandle l'
589+ tbs' <- lift $ duplicate tbs
590+ pure $ StateRef st tbs'
599591
600592newForkerAtTarget ::
601593 ( HeaderHash l ~ HeaderHash blk
0 commit comments