@@ -103,15 +103,18 @@ inMemStateComponent stateDir = do
103103 , resetState = inMemStateComponent
104104 }
105105
106+ mkOnDiskStatePath :: FilePath -> FilePath
107+ mkOnDiskStatePath stateDir = dcPath stateDir </> " ondisk"
108+
106109onDiskStateComponent :: FilePath -> StateComponent OnDiskState OnDiskStats
107110onDiskStateComponent stateDir = StateComponent {
108111 stateDesc = " All time download counts"
109112 , stateHandle = OnDiskState
110- , getState = readOnDiskStats (dcPath stateDir </> " ondisk " )
113+ , getState = readOnDiskStatsLazily (mkOnDiskStatePath stateDir)
111114 , putState = \ onDiskStats -> do
112115 -- TODO: we should extend the backup system so we can
113116 -- write these files out incrementally
114- writeOnDiskStats (dcPath stateDir </> " ondisk " ) onDiskStats
117+ writeOnDiskStats (mkOnDiskStatePath stateDir) onDiskStats
115118 reconstructLog (dcPath stateDir) onDiskStats
116119 , backupState = \ _ -> onDiskBackup
117120 , restoreState = onDiskRestore
@@ -180,13 +183,14 @@ downloadFeature CoreFeature{}
180183 -- Write yesterday's downloads to the log
181184 appendToLog (dcPath serverStateDir) inMemStats
182185
186+ let onDiskStateFile = mkOnDiskStatePath serverStateDir
183187 -- Update the on-disk statistics and recompute recent downloads
184- onDiskStats' <- updateHistory inMemStats <$> getState onDiskState
185- writeOnDiskStats (dcPath serverStateDir </> " ondisk " ) onDiskStats'
188+ onDiskStats' <- updateHistory inMemStats <$> readOnDiskStatsLazily onDiskStateFile
189+ writeOnDiskStats onDiskStateFile onDiskStats'
186190 -- TODO: this is still stupid, writing it out only to read it back
187191 -- we should be able to update the in memory ones incrementally
188192 (recentDownloads,
189- totalDownloads) <- computeRecentAndTotalDownloads =<< getState onDiskState
193+ totalDownloads) <- computeRecentAndTotalDownloads =<< readOnDiskStatsLazily onDiskStateFile
190194 writeMemState recentDownloadsCache recentDownloads
191195 writeMemState totalDownloadsCache totalDownloads
192196
@@ -232,7 +236,7 @@ downloadFeature CoreFeature{}
232236 onDiskStats <- cmFromCSV csv
233237 liftIO $ do
234238 -- TODO: if the onDiskStats are large, can we stream it?
235- writeOnDiskStats (dcPath serverStateDir </> " ondisk " ) onDiskStats
239+ writeOnDiskStats (mkOnDiskStatePath serverStateDir) onDiskStats
236240 (recentDownloads,
237241 totalDownloads) <- computeRecentAndTotalDownloads onDiskStats
238242 writeMemState recentDownloadsCache recentDownloads
0 commit comments