From a2b6ecf9352cc6e02708d9bee41c27474ca02148 Mon Sep 17 00:00:00 2001 From: Przemek Kaminski <pk@intrepidus.pl> Date: Fri, 16 Dec 2022 09:51:37 +0100 Subject: [PATCH] [nodeStory] fixes to saving nodeStory --- src/Gargantext/Core/NodeStory.hs | 44 ++++++++++++++++++-------------- 1 file changed, 25 insertions(+), 19 deletions(-) diff --git a/src/Gargantext/Core/NodeStory.hs b/src/Gargantext/Core/NodeStory.hs index 73345f7e..9df2bc0d 100644 --- a/src/Gargantext/Core/NodeStory.hs +++ b/src/Gargantext/Core/NodeStory.hs @@ -386,7 +386,9 @@ insertNodeArchiveHistory c nodeId version (h:hs) = do where query :: PGS.Query - query = [sql| INSERT INTO node_story_archive_history(node_id, ngrams_type_id, ngrams_id, patch, version) VALUES (?, ?, ?, ?, ?) |] + + query = [sql| INSERT INTO node_story_archive_history(node_id, ngrams_type_id, ngrams_id, patch, version) + VALUES (?, ?, ?, ?, ?) |] getNodeStory :: PGS.Connection -> NodeId -> IO NodeListStory getNodeStory c nId@(NodeId nodeId) = do @@ -399,7 +401,7 @@ getNodeStory c nId@(NodeId nodeId) = do , _a_history = [] , _a_state = Map.singleton ngramsType $ Map.singleton ngrams ngrams_repo_element }) res -- NOTE Sanity check: all versions in the DB should be the same - let versionsS = Set.fromList $ map (\(version, _, _, _) -> version) res + let versionsS = Set.fromList $ map (\a -> a ^. a_version) dbData if Set.size versionsS > 1 then panic $ Text.pack $ "[getNodeStory] versions for " <> show nodeId <> " differ! " <> show versionsS else @@ -573,14 +575,15 @@ upsertNodeStories c nodeId@(NodeId nId) newArchive = do fixNodeStoryVersion :: PGS.Connection -> NodeId -> ArchiveList -> IO () fixNodeStoryVersion c nodeId newArchive = do - let params = (newArchive ^. a_version, nodeId) - _ <-runPGSExecute c query params + let ngramsTypes = Map.keys $ newArchive ^. a_state + _ <- mapM_ (\nt -> runPGSExecute c query (newArchive ^. a_version, nodeId, nt)) ngramsTypes pure () where query :: PGS.Query query = [sql|UPDATE node_stories SET version = ? - WHERE node_id = ?|] + WHERE node_id = ? + AND ngrams_type_id IN ?|] writeNodeStories :: PGS.Connection -> NodeListStory -> IO () writeNodeStories c (NodeStory nls) = do @@ -619,12 +622,12 @@ nodeStoryIncs c Nothing (ni:ns) = do readNodeStoryEnv :: Pool PGS.Connection -> IO NodeStoryEnv readNodeStoryEnv pool = do mvar <- nodeStoryVar pool Nothing [] - saver <- mkNodeStorySaver pool mvar let saver_immediate = modifyMVar_ mvar $ \ns -> do withResource pool $ \c -> do --printDebug "[mkNodeStorySaver] will call writeNodeStories, ns" ns writeNodeStories c ns pure $ clearHistory ns + saver <- mkNodeStorySaver saver_immediate -- let saver = modifyMVar_ mvar $ \mv -> do -- writeNodeStories pool mv -- printDebug "[readNodeStoryEnv] saver" mv @@ -652,22 +655,25 @@ nodeStoryVar pool (Just mv) nIds = do -- Debounce is useful since it could delay the saving to some later -- time, asynchronously and we keep operating on memory only. -mkNodeStorySaver :: Pool PGS.Connection -> MVar NodeListStory -> IO (IO ()) -mkNodeStorySaver pool mvns = mkDebounce settings +-- mkNodeStorySaver :: Pool PGS.Connection -> MVar NodeListStory -> IO (IO ()) +-- mkNodeStorySaver pool mvns = do +mkNodeStorySaver :: IO () -> IO (IO ()) +mkNodeStorySaver saver = mkDebounce settings where settings = defaultDebounceSettings - { debounceAction = do - -- NOTE: Lock MVar first, then use resource pool. - -- Otherwise we could wait for MVar, while - -- blocking the pool connection. - modifyMVar_ mvns $ \ns -> do - withResource pool $ \c -> do - --printDebug "[mkNodeStorySaver] will call writeNodeStories, ns" ns - writeNodeStories c ns - pure $ clearHistory ns + { debounceAction = saver + -- do + -- -- NOTE: Lock MVar first, then use resource pool. + -- -- Otherwise we could wait for MVar, while + -- -- blocking the pool connection. + -- modifyMVar_ mvns $ \ns -> do + -- withResource pool $ \c -> do + -- --printDebug "[mkNodeStorySaver] will call writeNodeStories, ns" ns + -- writeNodeStories c ns + -- pure $ clearHistory ns --withMVar mvns (\ns -> printDebug "[mkNodeStorySaver] debounce nodestory" ns) - , debounceFreq = 1*minute - } + , debounceFreq = 1*minute + } minute = 60*second second = 10^(6 :: Int) -- 2.21.0