make setPredecessors and setSuccessors enforce the ordering + size limit

closes #47
This commit is contained in:
Trolli Schmittlauch 2020-06-07 23:45:09 +02:00
parent 0a9b0547c6
commit eec751584c
2 changed files with 6 additions and 5 deletions

View file

@ -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

View file

@ -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