@@ -1,6 +1,7 @@
11module ProjectM36.Transaction.Persist where
22import ProjectM36.Base
33import ProjectM36.Error
4+import ProjectM36.Persist (writeBSFileSync, DiskSync, renameSync)
45import qualified Data.Map as M
56import qualified Data.HashSet as HS
67import qualified Data.UUID as U
@@ -53,8 +54,8 @@ readTransaction dbdir transUUID = do
5354
5455 return $ Right $ Transaction transUUID transInfo newContext
5556
56−writeTransaction :: FilePath -> Transaction -> IO ()
57−writeTransaction dbdir trans = do
57+writeTransaction :: DiskSync -> FilePath -> Transaction -> IO ()
58+writeTransaction sync dbdir trans = do
5859 let tempTransDir = tempTransactionDir dbdir (transactionUUID trans)
5960 finalTransDir = transactionDir dbdir (transactionUUID trans)
6061 context = transactionContext trans
@@ -62,22 +63,22 @@ writeTransaction dbdir trans = do
6263 if not transDirExists then do
6364 --create sub directories
6465 mapM_ createDirectory [tempTransDir, relvarsDir tempTransDir, incDepsDir tempTransDir, atomFuncsDir tempTransDir]
65− writeRelVars tempTransDir (relationVariables context)
66− writeIncDeps tempTransDir (inclusionDependencies context)
67− writeAtomFuncs tempTransDir (atomFunctions context)
66+ writeRelVars sync tempTransDir (relationVariables context)
67+ writeIncDeps sync tempTransDir (inclusionDependencies context)
68+ writeAtomFuncs sync tempTransDir (atomFunctions context)
6869 BS.writeFile (transactionInfoPath tempTransDir) (B.encode $ transactionInfo trans)
6970 --move the temp directory to final location
70− renameDirectory tempTransDir finalTransDir
71+ renameSync sync tempTransDir finalTransDir
7172 else
7273 return ()
7374
74−writeRelVar :: FilePath -> (RelVarName, Relation) -> IO ()
75−writeRelVar transDir (relvarName, rel) = do
75+writeRelVar :: DiskSync -> FilePath -> (RelVarName, Relation) -> IO ()
76+writeRelVar sync transDir (relvarName, rel) = do
7677 let relvarPath = relvarsDir transDir </> T.unpack relvarName
77− BS.writeFile relvarPath (B.encode rel)
78+ writeBSFileSync sync relvarPath (B.encode rel)
7879
79−writeRelVars :: FilePath -> (M.Map RelVarName Relation) -> IO ()
80−writeRelVars transDir relvars = mapM_ (writeRelVar transDir) $ M.toList relvars
80+writeRelVars :: DiskSync -> FilePath -> (M.Map RelVarName Relation) -> IO ()
81+writeRelVars sync transDir relvars = mapM_ (writeRelVar sync transDir) $ M.toList relvars
8182
8283readRelVars :: FilePath -> IO (M.Map RelVarName Relation)
8384readRelVars transDir = do
@@ -88,8 +89,8 @@ readRelVars transDir = do
8889 return (T.pack name, rel)) relvarNames
8990 return $ M.fromList relvars
9091
91−writeAtomFuncs :: FilePath -> AtomFunctions -> IO ()
92−writeAtomFuncs transDir funcs = mapM_ (writeAtomFunc transDir) $ HS.toList funcs
92+writeAtomFuncs :: DiskSync -> FilePath -> AtomFunctions -> IO ()
93+writeAtomFuncs sync transDir funcs = mapM_ (writeAtomFunc sync transDir) $ HS.toList funcs
9394
9495--all the atom functions are in one file (???)
9596readAtomFuncs :: FilePath -> IO (AtomFunctions)
@@ -99,10 +100,10 @@ readAtomFuncs transDir = do
99100 return $ HS.fromList funcs
100101
101102--to write the atom functions, we really some bytecode to write (GHCi bytecode?)
102−writeAtomFunc :: FilePath -> AtomFunction -> IO ()
103−writeAtomFunc transDir func = do
103+writeAtomFunc :: DiskSync -> FilePath -> AtomFunction -> IO ()
104+writeAtomFunc sync transDir func = do
104105 let atomFuncPath = atomFuncsDir transDir </> T.unpack (atomFuncName func)
105− BS.writeFile atomFuncPath BS.empty
106+ writeBSFileSync sync atomFuncPath BS.empty
106107
107108readAtomFunc :: FilePath -> AtomFunctionName -> IO (AtomFunction)
108109readAtomFunc transDir funcName = do
@@ -110,12 +111,12 @@ readAtomFunc transDir funcName = do
110111 _ <- BS.readFile atomFuncPath
111112 return undefined
112113
113−writeIncDep :: FilePath -> (IncDepName, InclusionDependency) -> IO ()
114−writeIncDep transDir (incDepName, incDep) = do
115− BS.writeFile (incDepsDir transDir </> T.unpack incDepName) $ B.encode incDep
114+writeIncDep :: DiskSync -> FilePath -> (IncDepName, InclusionDependency) -> IO ()
115+writeIncDep sync transDir (incDepName, incDep) = do
116+ writeBSFileSync sync (incDepsDir transDir </> T.unpack incDepName) $ B.encode incDep
116117
117−writeIncDeps :: FilePath -> M.Map IncDepName InclusionDependency -> IO ()
118−writeIncDeps transDir incdeps = mapM_ (writeIncDep transDir) $ M.toList incdeps
118+writeIncDeps :: DiskSync -> FilePath -> M.Map IncDepName InclusionDependency -> IO ()
119+writeIncDeps sync transDir incdeps = mapM_ (writeIncDep sync transDir) $ M.toList incdeps
119120
120121readIncDep :: FilePath -> IncDepName -> IO (IncDepName, InclusionDependency)
121122readIncDep transDir incdepName = do