From 78bb0c45c1aff72861f4855faf984c4906443144 Mon Sep 17 00:00:00 2001 From: Sergey Ivanov Date: Fri, 12 May 2023 11:20:14 +0400 Subject: [PATCH] wip --- hbs2-core/lib/HBS2/Net/PeerLocator.hs | 2 ++ hbs2-core/lib/HBS2/Net/PeerLocator/Static.hs | 6 ++++++ hbs2-core/lib/HBS2/Net/Proto/PeerExchange.hs | 1 + hbs2-peer/app/BlockDownload.hs | 2 +- hbs2-peer/app/PeerMain.hs | 2 +- hbs2-peer/app/PeerTypes.hs | 2 ++ 6 files changed, 13 insertions(+), 2 deletions(-) diff --git a/hbs2-core/lib/HBS2/Net/PeerLocator.hs b/hbs2-core/lib/HBS2/Net/PeerLocator.hs index ab6182f0..e64ccf1e 100644 --- a/hbs2-core/lib/HBS2/Net/PeerLocator.hs +++ b/hbs2-core/lib/HBS2/Net/PeerLocator.hs @@ -8,6 +8,7 @@ import System.Random.Shuffle (shuffleM) class PeerLocator e l where knownPeers :: forall m . (HasPeer e, MonadIO m) => l -> m [Peer e] + -- knownListeningPeers :: forall m . (HasPeer e, MonadIO m) => l -> m [Peer e] addPeers :: forall m . (HasPeer e, MonadIO m) => l -> [Peer e] -> m () delPeers :: forall m . (HasPeer e, MonadIO m) => l -> [Peer e] -> m () bestPeers :: forall m . (HasPeer e, MonadIO m) => l -> m [Peer e] @@ -17,6 +18,7 @@ data AnyPeerLocator e = forall a . PeerLocator e a => AnyPeerLocator a instance HasPeer e => PeerLocator e (AnyPeerLocator e) where knownPeers (AnyPeerLocator l) = knownPeers l + -- knownListeningPeers (AnyPeerLocator l) = knownListeningPeers l addPeers (AnyPeerLocator l) = addPeers l delPeers (AnyPeerLocator l) = delPeers l addExcluded (AnyPeerLocator l) = addExcluded l diff --git a/hbs2-core/lib/HBS2/Net/PeerLocator/Static.hs b/hbs2-core/lib/HBS2/Net/PeerLocator/Static.hs index c96939db..22cf5920 100644 --- a/hbs2-core/lib/HBS2/Net/PeerLocator/Static.hs +++ b/hbs2-core/lib/HBS2/Net/PeerLocator/Static.hs @@ -33,6 +33,12 @@ instance (Ord (Peer e), Pretty (Peer e)) => PeerLocator e (StaticPeerLocator e) excl <- liftIO $ readTVarIO e pure $ Set.toList (ps `Set.difference` excl) + -- knownListeningPeers (StaticPeerLocator peers e) = do + -- -- pips <- knownPeers @e pl >>= filterM (liftIO . atomically . readTVar . _peerTcpAvailable) + -- ps <- liftIO $ readTVarIO peers + -- excl <- liftIO $ readTVarIO e + -- pure $ Set.toList (ps `Set.difference` excl) + addPeers (StaticPeerLocator peers te) new = do excl <- liftIO $ readTVarIO te liftIO $ atomically $ modifyTVar' peers ((`Set.difference` excl) . (<> Set.fromList new)) diff --git a/hbs2-core/lib/HBS2/Net/Proto/PeerExchange.hs b/hbs2-core/lib/HBS2/Net/Proto/PeerExchange.hs index 60d3a5fd..267884d3 100644 --- a/hbs2-core/lib/HBS2/Net/Proto/PeerExchange.hs +++ b/hbs2-core/lib/HBS2/Net/Proto/PeerExchange.hs @@ -105,6 +105,7 @@ peerExchangeProto msg = do pl <- getPeerLocator @e pips <- knownPeers @e pl + -- pips <- knownListeningPeers @e pl case pex of PEX1 -> do diff --git a/hbs2-peer/app/BlockDownload.hs b/hbs2-peer/app/BlockDownload.hs index 5c8230a1..56db73a0 100644 --- a/hbs2-peer/app/BlockDownload.hs +++ b/hbs2-peer/app/BlockDownload.hs @@ -594,7 +594,7 @@ postponedLoop env0 = do -- for_ (w:ws) $ addDownload mzero next - void $ liftIO $ async $ withPeerM e $ withDownload env0 do + void $ liftIO $ withPeerM e $ withDownload env0 do forever do pause @'Seconds 30 trace "UNPOSTPONE LOOP" diff --git a/hbs2-peer/app/PeerMain.hs b/hbs2-peer/app/PeerMain.hs index 815eab02..cfd60914 100644 --- a/hbs2-peer/app/PeerMain.hs +++ b/hbs2-peer/app/PeerMain.hs @@ -750,7 +750,7 @@ runPeer opts = Exception.handle myException $ do when useHttpDownload do peerThread "blockHttpDownloadLoop " (blockHttpDownloadLoop denv) - -- peerThread "postponedLoop" (postponedLoop denv) + peerThread "postponedLoop" (postponedLoop denv) peerThread "downloadQueue" (downloadQueue conf denv) diff --git a/hbs2-peer/app/PeerTypes.hs b/hbs2-peer/app/PeerTypes.hs index 9aa36b5a..08180ac3 100644 --- a/hbs2-peer/app/PeerTypes.hs +++ b/hbs2-peer/app/PeerTypes.hs @@ -65,6 +65,7 @@ data PeerInfo e = , _peerHttpApiAddress :: TVar (Either Int (Maybe String)) , _peerHttpDownloaded :: TVar Int , _peerMeta :: TVar (Maybe PeerMeta) + , _peerTcpAvailable :: TVar Bool } deriving stock (Generic,Typeable) @@ -89,6 +90,7 @@ newPeerInfo = liftIO do <*> newTVarIO (Left 0) <*> newTVarIO 0 <*> newTVarIO Nothing + <*> newTVarIO False type instance SessionData e (PeerInfo e) = PeerInfo e