diff --git a/app/Main.hs b/app/Main.hs index c712f55..fc9299d 100644 --- a/app/Main.hs +++ b/app/Main.hs @@ -55,5 +55,4 @@ readConfig = do , confIP = toHostAddress6 . read $ ipString , confDhtPort = read portString , confBootstrapNodes = [(bootstrapHost, read bootstrapPortString)] - --, confStabiliseInterval = 60 } diff --git a/src/Hash2Pub/FediChord.hs b/src/Hash2Pub/FediChord.hs index e1ec96b..7a184f4 100644 --- a/src/Hash2Pub/FediChord.hs +++ b/src/Hash2Pub/FediChord.hs @@ -61,13 +61,12 @@ import Crypto.Hash import qualified Data.ByteArray as BA import qualified Data.ByteString as BS import qualified Data.ByteString.UTF8 as BSU -import Data.Either (rights) import Data.Foldable (foldr') import Data.IP (IPv6, fromHostAddress6, toHostAddress6) import qualified Data.Map.Strict as Map -import Data.Maybe (catMaybes, fromJust, fromMaybe, - isJust, mapMaybe) +import Data.Maybe (fromJust, fromMaybe, isJust, + mapMaybe) import qualified Data.Set as Set import Data.Time.Clock.POSIX import Data.Typeable (Typeable (..), typeOf) @@ -182,16 +181,11 @@ cacheWriter nsSTM = modifyTVar' (nodeCacheSTM ns) cacheModifier stabiliseThread :: LocalNodeStateSTM -> IO () -stabiliseThread nsSTM = forever $ do - ns <- readTVarIO nsSTM +stabiliseThread nsSTM = do -- TODO: update successfully stabilised nodes in cache - -- first stabilise immediate neihbours, then the next ones - forM_ [1..(kNeighbours ns)] (\num -> do - stabiliseNeighbour nsSTM predecessors num - stabiliseNeighbour nsSTM successors num - ) - -- TODO: make delay configurable - threadDelay (60 * 1000) + -- placeholder + stabiliseNeighbour nsSTM successors 1 + pure () where stabiliseNeighbour :: LocalNodeStateSTM -> (LocalNodeState -> [RemoteNodeState]) @@ -213,25 +207,10 @@ stabiliseThread nsSTM = forever $ do -> m () parseNeighbourResponse (Left err) = throwError err parseNeighbourResponse (Right (succs, preds)) = liftIO $ do - -- ping each returned node before actually inserting them - -- send pings in parallel, check whether ID is part of the returned IDs - nsSnap <- readTVarIO nsSTM - pingThreads <- mapM (async . checkReachability nsSnap) $ preds <> succs - -- ToDo: exception handling, maybe log them - -- filter out own node - checkedNeighbours <- filter (/= toRemoteNodeState nsSnap) . catMaybes . rights <$> mapM waitCatch pingThreads - atomically $ do newerNsSnap <- readTVar nsSTM - writeTVar nsSTM $ addPredecessors checkedNeighbours . addSuccessors checkedNeighbours $ newerNsSnap + writeTVar nsSTM $ addPredecessors preds . addSuccessors succs $ newerNsSnap pure () - checkReachability :: LocalNodeState -> RemoteNodeState -> IO (Maybe RemoteNodeState) - checkReachability ns toCheck = do - resp <- requestPing ns toCheck - pure $ either (const Nothing) (\vss -> - if toCheck `elem` vss then Just toCheck else Nothing - ) resp - -- periodically contact immediate successor and predecessor -- If they respond, see whether there is a closer neighbour in between diff --git a/src/Hash2Pub/FediChordTypes.hs b/src/Hash2Pub/FediChordTypes.hs index 26a13f8..363e300 100644 --- a/src/Hash2Pub/FediChordTypes.hs +++ b/src/Hash2Pub/FediChordTypes.hs @@ -613,7 +613,6 @@ data FediChordConf = FediChordConf , confIP :: HostAddress6 , confDhtPort :: Int , confBootstrapNodes :: [(String, PortNumber)] - --, confStabiliseInterval :: Int } deriving (Show, Eq) diff --git a/test/FediChordSpec.hs b/test/FediChordSpec.hs index 4f05e72..dbb8e8b 100644 --- a/test/FediChordSpec.hs +++ b/test/FediChordSpec.hs @@ -154,7 +154,7 @@ spec = do describe "successors and predecessors do not disturb the ring characteristics of EpiChord operations (see #48)" $ do let emptyCache = initCache - -- implicitly relies on kNeighbours to be <= 3 + -- implicitly relies on kNieghbours to be <= 3 thisNid = toNodeID 1000 thisNode = setNid thisNid <$> exampleLocalNode nid2 = toNodeID 1003