From eec751584c2ba9876a6f15a19b765fde4a871ba8 Mon Sep 17 00:00:00 2001 From: Trolli Schmittlauch Date: Sun, 7 Jun 2020 23:45:09 +0200 Subject: [PATCH] make setPredecessors and setSuccessors enforce the ordering + size limit closes #47 --- src/Hash2Pub/DHTProtocol.hs | 6 +++--- src/Hash2Pub/FediChordTypes.hs | 5 +++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/Hash2Pub/DHTProtocol.hs b/src/Hash2Pub/DHTProtocol.hs index 313471c..b70550f 100644 --- a/src/Hash2Pub/DHTProtocol.hs +++ b/src/Hash2Pub/DHTProtocol.hs @@ -228,8 +228,8 @@ respondLeave nsSTM msgSet = do writeTQueue (cacheWriteQueue nsSnap) $ deleteCacheEntry senderID writeTVar nsSTM $ -- add predecessors and successors of leaving node to own lists - setPredecessors (take (kNeighbours nsSnap) . delete senderID . nub . sortBy (flip localCompare) $ requestPreds <> predecessors nsSnap) - . setSuccessors (take (kNeighbours nsSnap) . delete senderID . nub . sortBy localCompare $ requestSuccs <> successors nsSnap) $ nsSnap + setPredecessors (delete senderID $ requestPreds <> predecessors nsSnap) + . setSuccessors (delete senderID $ requestSuccs <> successors nsSnap) $ nsSnap -- TODO: handle handover of key data let leaveResponse = Response { responseTo = requestID aRequestPart @@ -301,7 +301,7 @@ respondJoin nsSTM msgSet = do then do -- if yes, adjust own predecessors/ successors and return those in a response let - newPreds = take (kNeighbours nsSnap) . nub . sortBy (flip localCompare) $ getNid senderNS:predecessors nsSnap + newPreds = getNid senderNS:predecessors nsSnap joinedNS = setPredecessors newPreds nsSnap responsePayload = JoinResponsePayload { joinSuccessors = successors joinedNS diff --git a/src/Hash2Pub/FediChordTypes.hs b/src/Hash2Pub/FediChordTypes.hs index 1f28aea..d5ea900 100644 --- a/src/Hash2Pub/FediChordTypes.hs +++ b/src/Hash2Pub/FediChordTypes.hs @@ -32,6 +32,7 @@ module Hash2Pub.FediChordTypes ( ) where import Control.Exception +import Data.List (delete, nub, sortBy) import qualified Data.Map.Strict as Map import Data.Maybe (fromMaybe, isJust, mapMaybe) import qualified Data.Set as Set @@ -213,11 +214,11 @@ instance Typeable a => Show (TQueue a) where -- | convenience function that updates the successors of a 'LocalNodeState' setSuccessors :: [NodeID] -> LocalNodeState -> LocalNodeState -setSuccessors succ' ns = ns {successors = succ'} +setSuccessors succ' ns = ns {successors = take (kNeighbours ns) . nub . sortBy localCompare $ succ'} -- | convenience function that updates the predecessors of a 'LocalNodeState' setPredecessors :: [NodeID] -> LocalNodeState -> LocalNodeState -setPredecessors pred' ns = ns {predecessors = pred'} +setPredecessors pred' ns = ns {predecessors = take (kNeighbours ns) . nub . sortBy (flip localCompare) $ pred'} type NodeCache = Map.Map NodeID CacheEntry