diff --git a/src/Simplex/Messaging/Server/StoreLog.hs b/src/Simplex/Messaging/Server/StoreLog.hs index d1ce15ed6..94a340d94 100644 --- a/src/Simplex/Messaging/Server/StoreLog.hs +++ b/src/Simplex/Messaging/Server/StoreLog.hs @@ -36,7 +36,7 @@ import Simplex.Messaging.Protocol import Simplex.Messaging.Server.QueueStore (NtfCreds (..), QueueRec (..), ServerQueueStatus (..)) import Simplex.Messaging.Transport.Buffer (trimCR) import Simplex.Messaging.Util (ifM) -import System.Directory (doesFileExist) +import System.Directory (doesFileExist, renameFile) import System.IO -- | opaque container for file handle with a type-safe IOMode @@ -140,10 +140,12 @@ logDeleteNotifier s = writeStoreLogRecord s . DeleteNotifier readWriteStoreLog :: FilePath -> IO (Map RecipientId QueueRec, StoreLog 'WriteMode) readWriteStoreLog f = do - qs <- ifM (doesFileExist f) (readQueues f) (pure M.empty) + qs <- ifM (doesFileExist f) readQS (pure M.empty) s <- openWriteStoreLog f writeQueues s qs pure (qs, s) + where + readQS = readQueues f <* renameFile f (f <> ".bak") writeQueues :: StoreLog 'WriteMode -> Map RecipientId QueueRec -> IO () writeQueues s = mapM_ $ \q -> when (active q) $ logCreateQueue s q