@@ -135,6 +135,7 @@ data ServerConfig = ServerConfig
135135
136136data StartOptions = StartOptions
137137 { maintenance :: Bool ,
138+ compactLog :: Bool ,
138139 skipWarnings :: Bool ,
139140 confirmMigrations :: MigrationConfirmation
140141 }
@@ -331,7 +332,7 @@ newEnv config@ServerConfig {smpCredentials, httpCredentials, serverStoreCfg, smp
331332 ASSCfg qt mt (SSCMemory storePaths_) -> do
332333 let storePath = storeMsgsFile =<< storePaths_
333334 ms <- newMsgStore STMStoreConfig {storePath, quota = msgQueueQuota}
334- forM_ storePaths_ $ \ StorePaths {storeLogFile = f} -> loadStoreLog (mkQueue ms) f $ queueStore ms
335+ forM_ storePaths_ $ \ StorePaths {storeLogFile = f} -> loadStoreLog (mkQueue ms) f $ queueStore ms
335336 pure $ AMS qt mt ms
336337 ASSCfg qt mt SSCMemoryJournal {storeLogFile, storeMsgsPath} -> do
337338 let qsCfg = MQStoreCfg
@@ -341,9 +342,10 @@ newEnv config@ServerConfig {smpCredentials, httpCredentials, serverStoreCfg, smp
341342 pure $ AMS qt mt ms
342343#if defined(dbServerPostgres)
343344 ASSCfg qt mt SSCDatabaseJournal {storeCfg, storeMsgsPath'} -> do
344- let StartOptions {confirmMigrations} = startOptions config
345+ let StartOptions {compactLog, confirmMigrations} = startOptions config
345346 qsCfg = PQStoreCfg (storeCfg {confirmMigrations} :: PostgresStoreCfg )
346347 cfg = mkJournalStoreConfig qsCfg storeMsgsPath' msgQueueQuota maxJournalMsgCount maxJournalStateLines idleQueueInterval
348+ when compactLog $ compactDbStoreLog $ dbStoreLogPath storeCfg
347349 ms <- newMsgStore cfg
348350 pure $ AMS qt mt ms
349351#else
@@ -368,6 +370,16 @@ newEnv config@ServerConfig {smpCredentials, httpCredentials, serverStoreCfg, smp
368370 logInfo $ " restoring queues from file " <> T. pack f
369371 sl <- readWriteQueueStore False mkQ f st
370372 setStoreLog st sl
373+ compactDbStoreLog = \ case
374+ Just f -> do
375+ logInfo $ " compacting queues in file " <> T. pack f
376+ st <- newMsgStore STMStoreConfig {storePath = Nothing , quota = msgQueueQuota}
377+ sl <- readWriteQueueStore False (mkQueue st) f (queueStore st)
378+ setStoreLog (queueStore st) sl
379+ closeMsgStore st
380+ Nothing -> do
381+ logError " Error: `--compact-log` used without `db_store_log` INI option"
382+ exitFailure
371383 getCredentials protocol creds = do
372384 files <- missingCreds
373385 unless (null files) $ do
0 commit comments