From 6313a06a837df4c6f8098aa6fa840a4f3adf8f19 Mon Sep 17 00:00:00 2001 From: Trolli Schmittlauch Date: Mon, 29 Jun 2020 13:41:11 +0200 Subject: [PATCH 1/2] fix time conversion for threadDelay --- src/Hash2Pub/FediChord.hs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Hash2Pub/FediChord.hs b/src/Hash2Pub/FediChord.hs index ce8b5b9..95617fc 100644 --- a/src/Hash2Pub/FediChord.hs +++ b/src/Hash2Pub/FediChord.hs @@ -243,7 +243,7 @@ cacheVerifyThread nsSTM = forever $ do forkIO $ sendQueryIdMessages targetID latestNs (Just (1 + jEntriesPerSlice latestNs)) (nodesToQuery targetID) >> pure () -- ask for 1 entry more than j because of querying the middle ) - threadDelay $ toEnum (fromEnum maxEntryAge `div` 20) + threadDelay $ 10^6 * round maxEntryAge `div` 20 -- | Checks the invariant of at least @jEntries@ per cache slice. @@ -355,7 +355,7 @@ stabiliseThread nsSTM = forever $ do ) -- TODO: make delay configurable - threadDelay (60 * 1000) + threadDelay (60 * 10^6) where -- | send a stabilise request to the n-th neighbour -- (specified by the provided getter function) and on failure retr @@ -450,7 +450,7 @@ requestMapPurge mapVar = forever $ do putMVar mapVar $ Map.filter (\entry@(RequestMapEntry _ _ ts) -> now - ts < responsePurgeAge ) rMapState - threadDelay $ fromEnum responsePurgeAge * 2000 + threadDelay $ round responsePurgeAge * 2 * 10^6 -- | Wait for messages, deserialise them, manage parts and acknowledgement status, From eab5a73ead1f0d30f0c52dfc8751f50534578ea8 Mon Sep 17 00:00:00 2001 From: Trolli Schmittlauch Date: Mon, 29 Jun 2020 13:42:39 +0200 Subject: [PATCH 2/2] make sure that own node isn't added as neighbour --- src/Hash2Pub/FediChordTypes.hs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Hash2Pub/FediChordTypes.hs b/src/Hash2Pub/FediChordTypes.hs index 459837f..6c5d357 100644 --- a/src/Hash2Pub/FediChordTypes.hs +++ b/src/Hash2Pub/FediChordTypes.hs @@ -243,19 +243,19 @@ instance Typeable a => Show (TQueue a) where -- | convenience function that replaces the predecessors of a 'LocalNodeState' with the k closest nodes from the provided list setPredecessors :: [RemoteNodeState] -> LocalNodeState -> LocalNodeState -setPredecessors preds ns = ns {predecessors = takeRMapPredecessors (getNid ns) (kNeighbours ns) . rMapFromList $ preds} +setPredecessors preds ns = ns {predecessors = takeRMapPredecessors (getNid ns) (kNeighbours ns) . rMapFromList . filter ((/=) (getNid ns) . getNid) $ preds} -- | convenience function that replaces the successors of a 'LocalNodeState' with the k closest nodes from the provided list setSuccessors :: [RemoteNodeState] -> LocalNodeState -> LocalNodeState -setSuccessors succs ns = ns {successors = takeRMapSuccessors (getNid ns) (kNeighbours ns) . rMapFromList $ succs} +setSuccessors succs ns = ns {successors = takeRMapSuccessors (getNid ns) (kNeighbours ns) . rMapFromList . filter ((/=) (getNid ns) . getNid) $ succs} -- | sets the predecessors of a 'LocalNodeState' to the closest k nodes of the current predecessors and the provided list, combined addPredecessors :: [RemoteNodeState] -> LocalNodeState -> LocalNodeState -addPredecessors preds ns = ns {predecessors = takeRMapPredecessors (getNid ns) (kNeighbours ns) . addRMapEntries preds . rMapFromList $ predecessors ns} +addPredecessors preds ns = ns {predecessors = takeRMapPredecessors (getNid ns) (kNeighbours ns) . addRMapEntries preds . rMapFromList . filter ((/=) (getNid ns) . getNid) $ predecessors ns} -- | sets the successors of a 'LocalNodeState' to the closest k nodes of the current successors and the provided list, combined addSuccessors :: [RemoteNodeState] -> LocalNodeState -> LocalNodeState -addSuccessors succs ns = ns {successors = takeRMapSuccessors (getNid ns) (kNeighbours ns) . addRMapEntries succs . rMapFromList $ successors ns} +addSuccessors succs ns = ns {successors = takeRMapSuccessors (getNid ns) (kNeighbours ns) . addRMapEntries succs . rMapFromList . filter ((/=) (getNid ns) . getNid) $ successors ns} -- | Class for all types that can be identified via an EpiChord key. -- Used for restricting the types a 'RingMap' can store