update to not use fs read for versions, just previous db call metadata

This commit is contained in:
Lucy Cifferello
2021-09-23 14:51:18 -06:00
committed by Keagan McClelland
parent 85f1ffa406
commit 47c971de99
3 changed files with 22 additions and 24 deletions

4
.gitignore vendored
View File

@@ -32,3 +32,7 @@ version
0.3.0_features.md 0.3.0_features.md
**/embassy-sdk **/embassy-sdk
start9-registry.prof start9-registry.prof
start9-registry.hp
start9-registry.pdf
start9-registry.aux
start9-registry.ps

View File

@@ -13,7 +13,7 @@ ip-from-header: "_env:YESOD_IP_FROM_HEADER:false"
# By default, `yesod devel` runs in development, and built executables use # By default, `yesod devel` runs in development, and built executables use
# production settings (see below). To override this, use the following: # production settings (see below). To override this, use the following:
# #
# development: false development: true
# Optional values with the following production defaults. # Optional values with the following production defaults.
# In development, they default to the inverse. # In development, they default to the inverse.

View File

@@ -287,7 +287,7 @@ getPackageListR = do
query query
let filteredServices' = sAppAppId . entityVal <$> filteredServices let filteredServices' = sAppAppId . entityVal <$> filteredServices
settings <- getsYesod appSettings settings <- getsYesod appSettings
packageMetadata <- time "metadata" $ runDB $ fetchPackageMetadata filteredServices' packageMetadata <- time "metadata" $ runDB $ fetchPackageMetadata $ Just filteredServices'
$logInfo $ show packageMetadata $logInfo $ show packageMetadata
serviceDetailResult <- time "service details" $ liftIO $ mapConcurrently serviceDetailResult <- time "service details" $ liftIO $ mapConcurrently
(getServiceDetails settings packageMetadata Nothing) (getServiceDetails settings packageMetadata Nothing)
@@ -303,12 +303,10 @@ getPackageListR = do
Right (packages :: [PackageVersion]) -> do Right (packages :: [PackageVersion]) -> do
-- for each item in list get best available from version range -- for each item in list get best available from version range
settings <- getsYesod appSettings settings <- getsYesod appSettings
availableServicesResult <- time "availableServicesResult" $ liftIO $ mapConcurrently
(getPackageDetails settings)
packages
-- @TODO fix _ error -- @TODO fix _ error
packageMetadata <- time "metadata2" $ runDB $ fetchPackageMetadata Nothing
availableServicesResult <- traverse (getPackageDetails packageMetadata) packages
let (_, availableServices) = partitionEithers availableServicesResult let (_, availableServices) = partitionEithers availableServicesResult
packageMetadata <- time "metadata2" $ runDB $ fetchPackageMetadata (snd <$> availableServices)
serviceDetailResult <- time "service details 2" $ liftIO $ mapConcurrently serviceDetailResult <- time "service details 2" $ liftIO $ mapConcurrently
(uncurry $ getServiceDetails settings packageMetadata) (uncurry $ getServiceDetails settings packageMetadata)
availableServices availableServices
@@ -328,22 +326,18 @@ getPackageListR = do
where where
getPackageDetails :: (MonadIO m) getPackageDetails :: MonadIO m => (HM.HashMap AppIdentifier ([Version], [CategoryTitle])) -> PackageVersion -> m (Either Text ((Maybe Version), AppIdentifier))
=> AppSettings getPackageDetails metadata pv = do
-> PackageVersion let appId = packageVersionId pv
-> m (Either Text ((Maybe Version), AppIdentifier)) let spec = packageVersionVersion pv
getPackageDetails settings pv = do pacakgeMetadata <- case HM.lookup appId metadata of
let appId = packageVersionId pv Nothing-> throwIO $ NotFoundE [i|dependency metadata for #{appId} not found.|]
let spec = packageVersionVersion pv Just m -> pure m
let appExt = Extension (show appId) :: Extension "s9pk" -- get best version from VersionRange of dependency
time "best version" $ getBestVersion ((</> "apps") . resourcesDir $ settings) appExt spec >>= \case let satisfactory = filter (<|| spec) (fst pacakgeMetadata)
Nothing -> let best = getMax <$> foldMap (Just . Max) satisfactory
pure case best of
$ Left Nothing -> pure $ Left $ "best version could not be found for " <> show appId <> " with spec " <> show spec
$ "best version could not be found for "
<> show appId
<> " with spec "
<> show spec
Just v -> do Just v -> do
pure $ Right (Just v, appId) pure $ Right (Just v, appId)
@@ -478,7 +472,7 @@ fetchLatestAppAtVersion appId version' = selectOne $ do
pure (service, version) pure (service, version)
fetchPackageMetadata :: MonadUnliftIO m fetchPackageMetadata :: MonadUnliftIO m
=> [AppIdentifier] => Maybe [AppIdentifier]
-> ReaderT SqlBackend m (HM.HashMap AppIdentifier ([Version], [CategoryTitle])) -> ReaderT SqlBackend m (HM.HashMap AppIdentifier ([Version], [CategoryTitle]))
fetchPackageMetadata ids = do fetchPackageMetadata ids = do
let categoriesQuery = select $ do let categoriesQuery = select $ do