refactor trying to join on any bootstrap node into own function
contributes to #56
This commit is contained in:
parent
d293cc05d1
commit
56ca2b53cc
2 changed files with 21 additions and 10 deletions
|
@ -40,6 +40,7 @@ module Hash2Pub.FediChord (
|
|||
, fediChordInit
|
||||
, fediChordJoin
|
||||
, fediChordBootstrapJoin
|
||||
, tryBootstrapJoining
|
||||
, fediMainThreads
|
||||
, RealNode (..)
|
||||
, nodeStateInit
|
||||
|
@ -166,6 +167,25 @@ fediChordBootstrapJoin nsSTM (joinHost, joinPort) =
|
|||
)
|
||||
`catch` (\e -> pure . Left $ "Error at bootstrap joining: " <> displayException (e :: IOException))
|
||||
|
||||
|
||||
-- | Try joining the DHT through any of the bootstrapping nodes until it succeeds.
|
||||
tryBootstrapJoining :: LocalNodeStateSTM -> IO (Either String LocalNodeStateSTM)
|
||||
tryBootstrapJoining nsSTM = do
|
||||
bss <- atomically $ do
|
||||
nsSnap <- readTVar nsSTM
|
||||
realNodeSnap <- readTVar $ parentRealNode nsSnap
|
||||
pure $ bootstrapNodes realNodeSnap
|
||||
tryJoining bss
|
||||
where
|
||||
tryJoining (bn:bns) = do
|
||||
j <- fediChordBootstrapJoin nsSTM bn
|
||||
case j of
|
||||
Left err -> putStrLn ("join error: " <> err) >> tryJoining bns
|
||||
Right joined -> pure $ Right joined
|
||||
tryJoining [] = pure $ Left "Exhausted all bootstrap points for joining."
|
||||
|
||||
|
||||
|
||||
-- | join a node to the DHT, using the provided cache snapshot for resolving the new
|
||||
-- node's position.
|
||||
fediChordJoin :: NodeCache -- ^ a snapshot of the NodeCache to
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue