catch and handle bootstrap join errors

This commit is contained in:
Trolli Schmittlauch 2020-05-27 18:59:38 +02:00
parent 27e5c5f9ce
commit 6ff765c63e
2 changed files with 14 additions and 1 deletions

View file

@ -138,6 +138,7 @@ fediChordBootstrapJoin ns (joinHost, joinPort) =
initCache bootstrapResponse
fediChordJoin bootstrapCache ns
)
`catch` (\e -> pure . Left $ "Error at bootstrap joining: " <> displayException (e :: IOException))
-- | join a node to the DHT, using the provided cache snapshot for resolving the new
-- node's position.

View file

@ -4,6 +4,7 @@ import Control.Concurrent
import Control.Exception
import Data.IP (IPv6, toHostAddress6)
import System.Environment
import Data.Either
import Hash2Pub.FediChord
@ -23,10 +24,21 @@ main = do
tryJoining (bn:bns) = do
j <- fediChordBootstrapJoin thisNode bn
case j of
Left _ -> tryJoining bns
Left err -> putStrLn ("join error: " <> err) >> tryJoining bns
Right joined -> pure $ Right joined
tryJoining [] = pure $ Left "Exhausted all bootstrap points for joining."
joinedState <- tryJoining $ confBootstrapNodes conf
either (\err ->
-- handle unsuccessful join
putStrLn $ err <> " Error joining, start listening for incoming requests anyways"
-- TODO: periodic retry
)
(\joinedNS ->
-- launch main eventloop with successfully joined state
putStrLn ("successful join at " <> (show . getNid $ joinedNS))
)
joinedState
-- stop main thread from terminating during development
getChar
pure ()