mirror of
https://github.com/commercialhaskell/stackage-server.git
synced 2026-01-23 17:31:55 +01:00
Fix memory leak during stackage cron job when caching is enabled
This commit is contained in:
parent
8ae7dc234a
commit
d9a285a87f
@ -14,6 +14,7 @@ module Stackage.Database.Cron
|
|||||||
) where
|
) where
|
||||||
|
|
||||||
import Conduit
|
import Conduit
|
||||||
|
import Control.DeepSeq
|
||||||
import Control.Lens ((.~))
|
import Control.Lens ((.~))
|
||||||
import qualified Control.Monad.Trans.AWS as AWS (paginate)
|
import qualified Control.Monad.Trans.AWS as AWS (paginate)
|
||||||
import Control.SingleRun
|
import Control.SingleRun
|
||||||
@ -274,7 +275,7 @@ makeCorePackageGetter _compiler pname ver =
|
|||||||
Just (gpd, treeId) -> do
|
Just (gpd, treeId) -> do
|
||||||
mTree <- run $ getEntity treeId
|
mTree <- run $ getEntity treeId
|
||||||
let pkgInfo = (mTree, Just hackageCabalId, pid, gpd)
|
let pkgInfo = (mTree, Just hackageCabalId, pid, gpd)
|
||||||
writeIORef pkgInfoRef $ Just pkgInfo
|
gpd `deepseq` writeIORef pkgInfoRef $ Just pkgInfo
|
||||||
pure pkgInfo
|
pure pkgInfo
|
||||||
Nothing -> do
|
Nothing -> do
|
||||||
(cabalBlob, mTree) <-
|
(cabalBlob, mTree) <-
|
||||||
@ -283,7 +284,7 @@ makeCorePackageGetter _compiler pname ver =
|
|||||||
getTreeForKey (packageTreeKey (htrPackage htr)))
|
getTreeForKey (packageTreeKey (htrPackage htr)))
|
||||||
let gpd = parseCabalBlob cabalBlob
|
let gpd = parseCabalBlob cabalBlob
|
||||||
pkgInfo = (mTree, Just hackageCabalId, pid, gpd)
|
pkgInfo = (mTree, Just hackageCabalId, pid, gpd)
|
||||||
writeIORef pkgInfoRef $ Just pkgInfo
|
gpd `deepseq` writeIORef pkgInfoRef $ Just pkgInfo
|
||||||
pure pkgInfo
|
pure pkgInfo
|
||||||
pure $ Just getMemoPackageInfo
|
pure $ Just getMemoPackageInfo
|
||||||
where
|
where
|
||||||
@ -303,6 +304,7 @@ addPantryPackage sid compiler isHidden flags (PantryPackage pc treeKey) = do
|
|||||||
cache = scCacheCabalFiles env
|
cache = scCacheCabalFiles env
|
||||||
let blobKeyToInt = fromIntegral . unSqlBackendKey . unBlobKey
|
let blobKeyToInt = fromIntegral . unSqlBackendKey . unBlobKey
|
||||||
let updateCacheGPD blobId gpd =
|
let updateCacheGPD blobId gpd =
|
||||||
|
gpd `deepseq`
|
||||||
atomicModifyIORef' gpdCachedRef (\cacheMap -> (IntMap.insert blobId gpd cacheMap, gpd))
|
atomicModifyIORef' gpdCachedRef (\cacheMap -> (IntMap.insert blobId gpd cacheMap, gpd))
|
||||||
let getCachedGPD treeCabal =
|
let getCachedGPD treeCabal =
|
||||||
\case
|
\case
|
||||||
@ -400,8 +402,8 @@ checkForDocs snapshotId snapName = do
|
|||||||
_ -> pure Nothing
|
_ -> pure Nothing
|
||||||
|
|
||||||
data SnapshotFileInfo = SnapshotFileInfo
|
data SnapshotFileInfo = SnapshotFileInfo
|
||||||
{ sfiSnapName :: !SnapName
|
{ sfiSnapName :: !SnapName
|
||||||
, sfiUpdatedOn :: !UTCTime
|
, sfiUpdatedOn :: !UTCTime
|
||||||
, sfiSnapshotFileGetter :: !(RIO StackageCron (Maybe SnapshotFile))
|
, sfiSnapshotFileGetter :: !(RIO StackageCron (Maybe SnapshotFile))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user