From d9a285a87f6ca1563ad8d3ed730d11fb54d85008 Mon Sep 17 00:00:00 2001 From: Alexey Kuleshevich Date: Wed, 26 Jun 2019 12:14:51 +0300 Subject: [PATCH 1/2] Fix memory leak during stackage cron job when caching is enabled --- src/Stackage/Database/Cron.hs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/Stackage/Database/Cron.hs b/src/Stackage/Database/Cron.hs index ccb8d65..ebb3aec 100644 --- a/src/Stackage/Database/Cron.hs +++ b/src/Stackage/Database/Cron.hs @@ -14,6 +14,7 @@ module Stackage.Database.Cron ) where import Conduit +import Control.DeepSeq import Control.Lens ((.~)) import qualified Control.Monad.Trans.AWS as AWS (paginate) import Control.SingleRun @@ -274,7 +275,7 @@ makeCorePackageGetter _compiler pname ver = Just (gpd, treeId) -> do mTree <- run $ getEntity treeId let pkgInfo = (mTree, Just hackageCabalId, pid, gpd) - writeIORef pkgInfoRef $ Just pkgInfo + gpd `deepseq` writeIORef pkgInfoRef $ Just pkgInfo pure pkgInfo Nothing -> do (cabalBlob, mTree) <- @@ -283,7 +284,7 @@ makeCorePackageGetter _compiler pname ver = getTreeForKey (packageTreeKey (htrPackage htr))) let gpd = parseCabalBlob cabalBlob pkgInfo = (mTree, Just hackageCabalId, pid, gpd) - writeIORef pkgInfoRef $ Just pkgInfo + gpd `deepseq` writeIORef pkgInfoRef $ Just pkgInfo pure pkgInfo pure $ Just getMemoPackageInfo where @@ -303,6 +304,7 @@ addPantryPackage sid compiler isHidden flags (PantryPackage pc treeKey) = do cache = scCacheCabalFiles env let blobKeyToInt = fromIntegral . unSqlBackendKey . unBlobKey let updateCacheGPD blobId gpd = + gpd `deepseq` atomicModifyIORef' gpdCachedRef (\cacheMap -> (IntMap.insert blobId gpd cacheMap, gpd)) let getCachedGPD treeCabal = \case @@ -400,8 +402,8 @@ checkForDocs snapshotId snapName = do _ -> pure Nothing data SnapshotFileInfo = SnapshotFileInfo - { sfiSnapName :: !SnapName - , sfiUpdatedOn :: !UTCTime + { sfiSnapName :: !SnapName + , sfiUpdatedOn :: !UTCTime , sfiSnapshotFileGetter :: !(RIO StackageCron (Maybe SnapshotFile)) } From 78b019a9156696984179eca3fe90d427230b9d51 Mon Sep 17 00:00:00 2001 From: Alexey Kuleshevich Date: Wed, 26 Jun 2019 12:21:01 +0300 Subject: [PATCH 2/2] Fix missing "Latest on Hackage" for packages from global-hints --- src/Stackage/Database/Query.hs | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/Stackage/Database/Query.hs b/src/Stackage/Database/Query.hs index e7fdc66..759f101 100644 --- a/src/Stackage/Database/Query.hs +++ b/src/Stackage/Database/Query.hs @@ -440,10 +440,8 @@ getSnapshotPackagePageInfo :: GetStackageDatabase env m => SnapshotPackageInfo -> Int -> m SnapshotPackagePageInfo getSnapshotPackagePageInfo spi maxDisplayedDeps = run $ do - mhciLatest <- - case spiOrigin spi of - Hackage -> getHackageLatestVersion $ spiPackageName spi - _ -> pure Nothing + mhciLatest <- getHackageLatestVersion $ spiPackageName spi + -- TODO: check for `spiOrigin spi` once other than `Hackage` are implemented forwardDepsCount <- getForwardDepsCount spi reverseDepsCount <- getReverseDepsCount spi forwardDeps <-