forked from schmittlauch/Hash2Pub
make setPredecessors and setSuccessors enforce the ordering + size limit
closes #47
This commit is contained in:
parent
0a9b0547c6
commit
eec751584c
|
@ -228,8 +228,8 @@ respondLeave nsSTM msgSet = do
|
||||||
writeTQueue (cacheWriteQueue nsSnap) $ deleteCacheEntry senderID
|
writeTQueue (cacheWriteQueue nsSnap) $ deleteCacheEntry senderID
|
||||||
writeTVar nsSTM $
|
writeTVar nsSTM $
|
||||||
-- add predecessors and successors of leaving node to own lists
|
-- add predecessors and successors of leaving node to own lists
|
||||||
setPredecessors (take (kNeighbours nsSnap) . delete senderID . nub . sortBy (flip localCompare) $ requestPreds <> predecessors nsSnap)
|
setPredecessors (delete senderID $ requestPreds <> predecessors nsSnap)
|
||||||
. setSuccessors (take (kNeighbours nsSnap) . delete senderID . nub . sortBy localCompare $ requestSuccs <> successors nsSnap) $ nsSnap
|
. setSuccessors (delete senderID $ requestSuccs <> successors nsSnap) $ nsSnap
|
||||||
-- TODO: handle handover of key data
|
-- TODO: handle handover of key data
|
||||||
let leaveResponse = Response {
|
let leaveResponse = Response {
|
||||||
responseTo = requestID aRequestPart
|
responseTo = requestID aRequestPart
|
||||||
|
@ -301,7 +301,7 @@ respondJoin nsSTM msgSet = do
|
||||||
then do
|
then do
|
||||||
-- if yes, adjust own predecessors/ successors and return those in a response
|
-- if yes, adjust own predecessors/ successors and return those in a response
|
||||||
let
|
let
|
||||||
newPreds = take (kNeighbours nsSnap) . nub . sortBy (flip localCompare) $ getNid senderNS:predecessors nsSnap
|
newPreds = getNid senderNS:predecessors nsSnap
|
||||||
joinedNS = setPredecessors newPreds nsSnap
|
joinedNS = setPredecessors newPreds nsSnap
|
||||||
responsePayload = JoinResponsePayload {
|
responsePayload = JoinResponsePayload {
|
||||||
joinSuccessors = successors joinedNS
|
joinSuccessors = successors joinedNS
|
||||||
|
|
|
@ -32,6 +32,7 @@ module Hash2Pub.FediChordTypes (
|
||||||
) where
|
) where
|
||||||
|
|
||||||
import Control.Exception
|
import Control.Exception
|
||||||
|
import Data.List (delete, nub, sortBy)
|
||||||
import qualified Data.Map.Strict as Map
|
import qualified Data.Map.Strict as Map
|
||||||
import Data.Maybe (fromMaybe, isJust, mapMaybe)
|
import Data.Maybe (fromMaybe, isJust, mapMaybe)
|
||||||
import qualified Data.Set as Set
|
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'
|
-- | convenience function that updates the successors of a 'LocalNodeState'
|
||||||
setSuccessors :: [NodeID] -> LocalNodeState -> 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'
|
-- | convenience function that updates the predecessors of a 'LocalNodeState'
|
||||||
setPredecessors :: [NodeID] -> LocalNodeState -> 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
|
type NodeCache = Map.Map NodeID CacheEntry
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue