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"
-- launch thread attempting to join on new cache entries
_ <- forkIO $ joinOnNewEntriesThread firstVSSTM
async (fediMainThreads serverSock firstVSSTM)
async (fediMainThreads serverSock realNodeSTM)
)
(\joinedNS -> do
-- 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.
-- Unjoined try joining instead.
convergenceSampleThread :: Service s (RealNodeSTM s) => LocalNodeStateSTM s -> IO ()
convergenceSampleThread nsSTM = forever $ do
convergenceSampleThread :: Service s (RealNodeSTM s) => RealNodeSTM s -> IO ()
convergenceSampleThread nodeSTM = forever $ do
node <- readTVarIO nodeSTM
forM_ (vservers node) $ \nsSTM -> do
nsSnap <- readTVarIO nsSTM
parentNode <- readTVarIO $ parentRealNode nsSnap
if isJoined nsSnap
@ -221,7 +223,8 @@ convergenceSampleThread nsSTM = forever $ do
) >> pure ()
-- unjoined node: try joining through all bootstrapping nodes
else tryBootstrapJoining nsSTM >> pure ()
let delaySecs = confBootstrapSamplingInterval . nodeConfig $ parentNode
let delaySecs = confBootstrapSamplingInterval . nodeConfig $ node
threadDelay delaySecs
@ -657,7 +660,7 @@ fediMainThreads sock nodeSTM = do
-- choose option 2 for the sake of limiting concurrency in simulation scenario
concurrently_ (stabiliseThread nodeSTM) $
concurrently_ (nodeCacheVerifyThread nodeSTM) $
concurrently_ (convergenceSampleThread nsSTM) $
concurrently_ (convergenceSampleThread nodeSTM) $
concurrently_ (lookupCacheCleanup $ parentRealNode ns) $
concurrently_
(sendThread sock sendQ)