re-structure convergenceSampleThread to work on a RealNode and iterate over all joined vservers

contributes to #34
This commit is contained in:
Trolli Schmittlauch 2020-09-21 02:18:28 +02:00
parent 33ae904d17
commit 8e8ea41dc4

View file

@ -133,7 +133,7 @@ fediChordInit initConf serviceRunner = do
putStrLn $ err <> " Error joining, start listening for incoming requests anyways" putStrLn $ err <> " Error joining, start listening for incoming requests anyways"
-- launch thread attempting to join on new cache entries -- launch thread attempting to join on new cache entries
_ <- forkIO $ joinOnNewEntriesThread firstVSSTM _ <- forkIO $ joinOnNewEntriesThread firstVSSTM
async (fediMainThreads serverSock firstVSSTM) async (fediMainThreads serverSock realNodeSTM)
) )
(\joinedNS -> do (\joinedNS -> do
-- launch main eventloop with successfully joined state -- launch main eventloop with successfully joined state
@ -195,8 +195,10 @@ fediChordBootstrapJoin nsSTM bootstrapNode = do
-- Periodically lookup own ID through a random bootstrapping node to discover and merge separated DHT clusters. -- Periodically lookup own ID through a random bootstrapping node to discover and merge separated DHT clusters.
-- Unjoined try joining instead. -- Unjoined try joining instead.
convergenceSampleThread :: Service s (RealNodeSTM s) => LocalNodeStateSTM s -> IO () convergenceSampleThread :: Service s (RealNodeSTM s) => RealNodeSTM s -> IO ()
convergenceSampleThread nsSTM = forever $ do convergenceSampleThread nodeSTM = forever $ do
node <- readTVarIO nodeSTM
forM_ (vservers node) $ \nsSTM -> do
nsSnap <- readTVarIO nsSTM nsSnap <- readTVarIO nsSTM
parentNode <- readTVarIO $ parentRealNode nsSnap parentNode <- readTVarIO $ parentRealNode nsSnap
if isJoined nsSnap if isJoined nsSnap
@ -221,7 +223,8 @@ convergenceSampleThread nsSTM = forever $ do
) >> pure () ) >> pure ()
-- unjoined node: try joining through all bootstrapping nodes -- unjoined node: try joining through all bootstrapping nodes
else tryBootstrapJoining nsSTM >> pure () else tryBootstrapJoining nsSTM >> pure ()
let delaySecs = confBootstrapSamplingInterval . nodeConfig $ parentNode
let delaySecs = confBootstrapSamplingInterval . nodeConfig $ node
threadDelay delaySecs threadDelay delaySecs
@ -657,7 +660,7 @@ fediMainThreads sock nodeSTM = do
-- choose option 2 for the sake of limiting concurrency in simulation scenario -- choose option 2 for the sake of limiting concurrency in simulation scenario
concurrently_ (stabiliseThread nodeSTM) $ concurrently_ (stabiliseThread nodeSTM) $
concurrently_ (nodeCacheVerifyThread nodeSTM) $ concurrently_ (nodeCacheVerifyThread nodeSTM) $
concurrently_ (convergenceSampleThread nsSTM) $ concurrently_ (convergenceSampleThread nodeSTM) $
concurrently_ (lookupCacheCleanup $ parentRealNode ns) $ concurrently_ (lookupCacheCleanup $ parentRealNode ns) $
concurrently_ concurrently_
(sendThread sock sendQ) (sendThread sock sendQ)