@@ -10,7 +10,6 @@ import ProjectM36.FileLock
1010import System.Directory
1111import System.FilePath
1212import System.IO.Temp
13−import System.IO
1413import Data.Time.Clock.POSIX
1514import qualified Data.UUID as U
1615import qualified Data.Set as S
@@ -71,7 +70,7 @@ checkForOtherVersions dbdir = do
7170 pure (Right ())
7271
7372
74−setupDatabaseDir :: DiskSync -> FilePath -> TransactionGraph -> IO (Either PersistenceError (Handle, LockFileHash))
73+setupDatabaseDir :: DiskSync -> FilePath -> TransactionGraph -> IO (Either PersistenceError (LockFile, LockFileHash))
7574setupDatabaseDir sync dbdir bootstrapGraph = do
7675 dbdirExists <- doesDirectoryExist dbdir
7776 eWrongVersion <- checkForOtherVersions dbdir
@@ -81,9 +80,9 @@ setupDatabaseDir sync dbdir bootstrapGraph = do
8180 m36exists <- doesFileExist (transactionLogPath dbdir)
8281 if dbdirExists && m36exists then do
8382 --no directories to write, just
84− lockFileH <- openLockFile dbdir
85− gDigest <- bracket_ (lockFile lockFileH WriteLock) (unlockFile lockFileH) (readGraphTransactionIdFileDigest dbdir)
86− pure (Right (lockFileH, gDigest))
83+ locker <- openLockFile (lockFilePath dbdir)
84+ gDigest <- bracket_ (lockFile locker WriteLock) (unlockFile locker) (readGraphTransactionIdFileDigest dbdir)
85+ pure (Right (locker, gDigest))
8786 else if not m36exists then do
8887 locks <- bootstrapDatabaseDir sync dbdir bootstrapGraph
8988 pure (Right locks)
@@ -92,19 +91,14 @@ setupDatabaseDir sync dbdir bootstrapGraph = do
9291{-
9392initialize a database directory with the graph from which to bootstrap- return lock file handle
9493-}
95−bootstrapDatabaseDir :: DiskSync -> FilePath -> TransactionGraph -> IO (Handle, LockFileHash)
94+bootstrapDatabaseDir :: DiskSync -> FilePath -> TransactionGraph -> IO (LockFile, LockFileHash)
9695bootstrapDatabaseDir sync dbdir bootstrapGraph = do
9796 createDirectory dbdir
98− lockFileH <- openLockFile dbdir
97+ locker <- openLockFile (lockFilePath dbdir)
9998 let allTransIds = map transactionId (S.toList (transactionsForGraph bootstrapGraph))
100− digest <- bracket_ (lockFile lockFileH WriteLock) (unlockFile lockFileH) (transactionGraphPersist sync dbdir allTransIds bootstrapGraph)
101− pure (lockFileH, digest)
99+ digest <- bracket_ (lockFile locker WriteLock) (unlockFile locker) (transactionGraphPersist sync dbdir allTransIds bootstrapGraph)
100+ pure (locker, digest)
102101
103−openLockFile :: FilePath -> IO Handle
104−openLockFile dbdir = do
105− lockFileH <- openFile (lockFilePath dbdir) WriteMode
106− pure lockFileH
107−
108102{-
109103incrementally updates an existing database directory
110104--algorithm: