hbs2-git db bugfix

This commit is contained in:
Dmitry Zuikov 2023-04-02 09:50:02 +03:00
parent 0c1e622a78
commit 343bfd6070
2 changed files with 21 additions and 3 deletions

View File

@ -5,6 +5,8 @@ import HBS2.Data.Types.Refs
import HBS2.Git.Types import HBS2.Git.Types
import HBS2.Hash import HBS2.Hash
import HBS2.System.Logger.Simple
import Data.Functor import Data.Functor
import Data.Function import Data.Function
import Database.SQLite.Simple import Database.SQLite.Simple
@ -22,6 +24,8 @@ import Data.Text (Text)
import Prettyprinter import Prettyprinter
import Data.UUID.V4 qualified as UUID import Data.UUID.V4 qualified as UUID
import Control.Monad.Catch import Control.Monad.Catch
import Control.Concurrent.STM
import System.IO.Unsafe
instance ToField GitHash where instance ToField GitHash where
toField h = toField (show $ pretty h) toField h = toField (show $ pretty h)
@ -59,13 +63,25 @@ instance (HasRefCredentials m) => HasRefCredentials (DB m) where
getCredentials = lift . getCredentials getCredentials = lift . getCredentials
setCredentials r s = lift (setCredentials r s) setCredentials r s = lift (setCredentials r s)
dbConnTV :: TVar (Maybe DBEnv)
dbConnTV = unsafePerformIO $ newTVarIO Nothing
{-# NOINLINE dbConnTV #-}
dbEnv :: MonadIO m => FilePath -> m DBEnv dbEnv :: MonadIO m => FilePath -> m DBEnv
dbEnv fp = do dbEnv fp = do
trace "dbEnv called"
let dir = takeDirectory fp let dir = takeDirectory fp
liftIO $ createDirectoryIfMissing True dir liftIO $ createDirectoryIfMissing True dir
co <- liftIO $ open fp mbDb <- liftIO $ readTVarIO dbConnTV
withDB co stateInit
pure co case mbDb of
Nothing -> do
co <- liftIO $ open fp
liftIO $ atomically $ writeTVar dbConnTV (Just co)
withDB co stateInit
pure co
Just db -> pure db
withDB :: DBEnv -> DB m a -> m a withDB :: DBEnv -> DB m a -> m a
withDB env action = runReaderT (fromDB action) env withDB env action = runReaderT (fromDB action) env

View File

@ -23,6 +23,8 @@ updateLocalState ref = do
db <- dbEnv dbPath db <- dbEnv dbPath
withDB db stateInit
trace $ "updateLocalState" <+> pretty ref trace $ "updateLocalState" <+> pretty ref
sp <- withDB db savepointNew sp <- withDB db savepointNew