mirror of https://github.com/voidlizard/hbs2
download fixes
This commit is contained in:
parent
677d6f1fd8
commit
cc7f2dd948
|
@ -9,3 +9,4 @@ cabal.project.local
|
||||||
|
|
||||||
*.key
|
*.key
|
||||||
|
|
||||||
|
.backup/
|
||||||
|
|
1
Makefile
1
Makefile
|
@ -14,7 +14,6 @@ BINS := \
|
||||||
hbs2-keyman \
|
hbs2-keyman \
|
||||||
git-remote-hbs2 \
|
git-remote-hbs2 \
|
||||||
git-hbs2 \
|
git-hbs2 \
|
||||||
git-remote-hbs21 \
|
|
||||||
|
|
||||||
ifeq ($(origin .RECIPEPREFIX), undefined)
|
ifeq ($(origin .RECIPEPREFIX), undefined)
|
||||||
$(error This Make does not support .RECIPEPREFIX. Please use GNU Make 4.0 or later)
|
$(error This Make does not support .RECIPEPREFIX. Please use GNU Make 4.0 or later)
|
||||||
|
|
|
@ -277,6 +277,7 @@ instance ( MonadIO m
|
||||||
allowed <- tryLockForPeriod peer_e msg
|
allowed <- tryLockForPeriod peer_e msg
|
||||||
|
|
||||||
unless allowed do
|
unless allowed do
|
||||||
|
-- trace $ "REQUEST: not allowed to send for proto" <+> viaShow proto
|
||||||
trace $ "REQUEST: not allowed to send for proto" <+> viaShow proto
|
trace $ "REQUEST: not allowed to send for proto" <+> viaShow proto
|
||||||
|
|
||||||
when allowed do
|
when allowed do
|
||||||
|
|
|
@ -2,8 +2,10 @@
|
||||||
module HBS2.Clock
|
module HBS2.Clock
|
||||||
( module HBS2.Clock
|
( module HBS2.Clock
|
||||||
, module System.Clock
|
, module System.Clock
|
||||||
|
, POSIXTime, getPOSIXTime, getEpoch
|
||||||
)where
|
)where
|
||||||
|
|
||||||
|
import Data.Functor
|
||||||
import Control.Concurrent (threadDelay)
|
import Control.Concurrent (threadDelay)
|
||||||
import Control.Monad.IO.Class
|
import Control.Monad.IO.Class
|
||||||
import Data.Fixed
|
import Data.Fixed
|
||||||
|
@ -13,6 +15,8 @@ import Data.Time
|
||||||
import Prettyprinter
|
import Prettyprinter
|
||||||
import System.Clock
|
import System.Clock
|
||||||
import Data.Time.Clock
|
import Data.Time.Clock
|
||||||
|
import Data.Time.Clock.POSIX (POSIXTime, getPOSIXTime)
|
||||||
|
import Data.Word
|
||||||
|
|
||||||
data TimeoutKind = MilliSeconds | Seconds | Minutes | NomDiffTime | TS
|
data TimeoutKind = MilliSeconds | Seconds | Minutes | NomDiffTime | TS
|
||||||
|
|
||||||
|
@ -104,6 +108,9 @@ class Expires a where
|
||||||
-- FIXME: dangerous!
|
-- FIXME: dangerous!
|
||||||
expiresIn _ = Nothing
|
expiresIn _ = Nothing
|
||||||
|
|
||||||
|
getEpoch :: MonadIO m => m Word64
|
||||||
|
getEpoch = liftIO getPOSIXTime <&> floor
|
||||||
|
|
||||||
-- | Use coarse clock timer. This timer has 1ms resolution but is much
|
-- | Use coarse clock timer. This timer has 1ms resolution but is much
|
||||||
-- faster comparing to the ordinary one. Is used on Linux, on MacOS
|
-- faster comparing to the ordinary one. Is used on Linux, on MacOS
|
||||||
-- provides ordinary one.
|
-- provides ordinary one.
|
||||||
|
|
|
@ -114,6 +114,7 @@ data MTreeEncryption
|
||||||
| EncryptGroupNaClSymm1 (Hash HbSync) ByteString
|
| EncryptGroupNaClSymm1 (Hash HbSync) ByteString
|
||||||
| EncryptGroupNaClSymm2 EncryptGroupNaClSymmOpts (Hash HbSync) ByteString
|
| EncryptGroupNaClSymm2 EncryptGroupNaClSymmOpts (Hash HbSync) ByteString
|
||||||
deriving stock (Eq,Generic,Data,Show)
|
deriving stock (Eq,Generic,Data,Show)
|
||||||
|
{-# COMPLETE NullEncryption, CryptAccessKeyNaClAsymm, EncryptGroupNaClSymm #-}
|
||||||
|
|
||||||
instance Serialise MTreeEncryption
|
instance Serialise MTreeEncryption
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
{-# Language AllowAmbiguousTypes #-}
|
||||||
module HBS2.OrDie
|
module HBS2.OrDie
|
||||||
( module HBS2.OrDie
|
( module HBS2.OrDie
|
||||||
) where
|
) where
|
||||||
|
@ -7,6 +8,7 @@ import Control.Monad.IO.Class
|
||||||
import System.Exit
|
import System.Exit
|
||||||
import Prettyprinter
|
import Prettyprinter
|
||||||
import UnliftIO
|
import UnliftIO
|
||||||
|
import Control.Monad.Except
|
||||||
|
|
||||||
class OrDie m a where
|
class OrDie m a where
|
||||||
type family OrDieResult a :: Type
|
type family OrDieResult a :: Type
|
||||||
|
@ -39,13 +41,13 @@ class OrThrow a where
|
||||||
type family OrThrowResult a :: Type
|
type family OrThrowResult a :: Type
|
||||||
orThrow :: forall e m . (MonadIO m, Exception e) => e -> a -> m (OrThrowResult a)
|
orThrow :: forall e m . (MonadIO m, Exception e) => e -> a -> m (OrThrowResult a)
|
||||||
|
|
||||||
|
|
||||||
instance OrThrow (Maybe a) where
|
instance OrThrow (Maybe a) where
|
||||||
type instance OrThrowResult (Maybe a) = a
|
type instance OrThrowResult (Maybe a) = a
|
||||||
orThrow e a = case a of
|
orThrow e a = case a of
|
||||||
Nothing -> throwIO e
|
Nothing -> throwIO e
|
||||||
Just x -> pure x
|
Just x -> pure x
|
||||||
|
|
||||||
|
|
||||||
instance OrThrow (Either b a) where
|
instance OrThrow (Either b a) where
|
||||||
type instance OrThrowResult (Either b a) = a
|
type instance OrThrowResult (Either b a) = a
|
||||||
orThrow e a = case a of
|
orThrow e a = case a of
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
{-# Language FunctionalDependencies #-}
|
||||||
module HBS2.Prelude
|
module HBS2.Prelude
|
||||||
( module Data.String
|
( module Data.String
|
||||||
, module Safe
|
, module Safe
|
||||||
|
@ -19,7 +20,7 @@ module HBS2.Prelude
|
||||||
, FromByteString(..)
|
, FromByteString(..)
|
||||||
, Text.Text
|
, Text.Text
|
||||||
, (&), (<&>), for_, for
|
, (&), (<&>), for_, for
|
||||||
, HasErrorStatus(..), ErrorStatus(..), SomeError(..)
|
, HasErrorStatus(..), ErrorStatus(..), SomeError(..), WithSomeError(..), mayE, someE
|
||||||
) where
|
) where
|
||||||
|
|
||||||
import Data.Typeable as X
|
import Data.Typeable as X
|
||||||
|
@ -47,6 +48,7 @@ import Data.Word
|
||||||
import GHC.Generics
|
import GHC.Generics
|
||||||
import Data.Time.Clock (NominalDiffTime(..))
|
import Data.Time.Clock (NominalDiffTime(..))
|
||||||
import Codec.Serialise
|
import Codec.Serialise
|
||||||
|
import Control.Monad.Except
|
||||||
|
|
||||||
import UnliftIO
|
import UnliftIO
|
||||||
import Control.Monad.IO.Unlift
|
import Control.Monad.IO.Unlift
|
||||||
|
@ -113,6 +115,41 @@ class HasErrorStatus e where
|
||||||
data SomeError = forall e . (Show e, HasErrorStatus e) =>
|
data SomeError = forall e . (Show e, HasErrorStatus e) =>
|
||||||
SomeError e
|
SomeError e
|
||||||
|
|
||||||
|
instance Show SomeError where
|
||||||
|
show (SomeError x) = show x
|
||||||
|
|
||||||
|
instance HasErrorStatus SomeError where
|
||||||
|
getStatus (SomeError e) = getStatus e
|
||||||
|
|
||||||
|
someE :: forall e . (Show e, HasErrorStatus e) => e -> SomeError
|
||||||
|
someE = SomeError
|
||||||
|
|
||||||
|
mayE :: forall e b . (Show e, HasErrorStatus e) => e -> b -> SomeError
|
||||||
|
mayE e _ = SomeError e
|
||||||
|
|
||||||
|
class WithSomeError m a b | a -> b where
|
||||||
|
toSomeError :: (forall e . Show e => e -> SomeError) -> m a -> ExceptT SomeError m b
|
||||||
|
|
||||||
|
|
||||||
|
instance Monad m => WithSomeError m (Maybe a) a where
|
||||||
|
toSomeError f m = do
|
||||||
|
lift m >>= \case
|
||||||
|
Nothing -> throwError (f ())
|
||||||
|
Just v -> pure v
|
||||||
|
|
||||||
|
instance (Monad m, Show e) => WithSomeError m (Either e a) a where
|
||||||
|
toSomeError f m = do
|
||||||
|
lift m >>= \case
|
||||||
|
Left e -> throwError (f e)
|
||||||
|
Right v -> pure v
|
||||||
|
|
||||||
|
|
||||||
|
instance (MonadUnliftIO m, Exception e) => MonadUnliftIO (ExceptT e m) where
|
||||||
|
withRunInIO exceptToIO = ExceptT $ try $ do
|
||||||
|
withRunInIO $ \runInIO ->
|
||||||
|
exceptToIO (runInIO . (either throwIO pure <=< runExceptT))
|
||||||
|
|
||||||
|
|
||||||
asyncLinked :: MonadUnliftIO m => m a -> m (Async a)
|
asyncLinked :: MonadUnliftIO m => m a -> m (Async a)
|
||||||
asyncLinked m = do
|
asyncLinked m = do
|
||||||
l <- async m
|
l <- async m
|
||||||
|
|
|
@ -44,3 +44,4 @@ expandPath = liftIO . D.canonicalizePath
|
||||||
doesDirectoryExist :: MonadIO m => FilePath -> m Bool
|
doesDirectoryExist :: MonadIO m => FilePath -> m Bool
|
||||||
doesDirectoryExist = liftIO . D.doesDirectoryExist
|
doesDirectoryExist = liftIO . D.doesDirectoryExist
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,7 @@ module HBS2.System.Logger.Simple
|
||||||
( withSimpleLogger
|
( withSimpleLogger
|
||||||
, trace
|
, trace
|
||||||
, debug
|
, debug
|
||||||
, log
|
, writeLog
|
||||||
, err
|
, err
|
||||||
, warn
|
, warn
|
||||||
, notice
|
, notice
|
||||||
|
@ -41,6 +41,8 @@ import Data.Map (Map)
|
||||||
import Data.Map.Strict qualified as Map
|
import Data.Map.Strict qualified as Map
|
||||||
import Control.Concurrent.STM
|
import Control.Concurrent.STM
|
||||||
|
|
||||||
|
import Prettyprinter.Render.Terminal
|
||||||
|
|
||||||
data LoggerType = LoggerStdout
|
data LoggerType = LoggerStdout
|
||||||
| LoggerStderr
|
| LoggerStderr
|
||||||
| LoggerFile FilePath
|
| LoggerFile FilePath
|
||||||
|
@ -161,37 +163,40 @@ withLogger f = do
|
||||||
maybeLoggerEntry <- liftIO $ readIORef loggers <&> IntMap.lookup (logKey @a)
|
maybeLoggerEntry <- liftIO $ readIORef loggers <&> IntMap.lookup (logKey @a)
|
||||||
maybe (pure ()) f maybeLoggerEntry
|
maybe (pure ()) f maybeLoggerEntry
|
||||||
|
|
||||||
log :: forall a s m . (MonadIO m, HasLogLevel a, ToLogStr s) => s -> m ()
|
writeLog :: forall a s m . (MonadIO m, HasLogLevel a, ToLogStr s) => s -> m ()
|
||||||
log s = liftIO $ withLogger @a $ \loggerEntry -> do
|
writeLog s = liftIO $ withLogger @a $ \loggerEntry -> do
|
||||||
loggerSets' <- readTVarIO loggerSets
|
loggerSets' <- readTVarIO loggerSets
|
||||||
let loggerType' = view loggerType loggerEntry
|
let loggerType' = view loggerType loggerEntry
|
||||||
maybeLoggerSet = Map.lookup loggerType' loggerSets'
|
maybeLoggerSet = Map.lookup loggerType' loggerSets'
|
||||||
msg = view loggerTr loggerEntry (toLogStr s)
|
msg = view loggerTr loggerEntry (toLogStr s)
|
||||||
maybe (pure ()) (\x -> pushLogStrLn (view loggerSet x) msg) maybeLoggerSet
|
maybe (pure ()) (\x -> pushLogStrLn (view loggerSet x) msg) maybeLoggerSet
|
||||||
|
|
||||||
trace :: (ToLogStr a, MonadIO m) => a -> m ()
|
trace :: forall a m . (ToLogStr (Doc a), MonadIO m) => Doc a -> m ()
|
||||||
trace = log @TRACE
|
trace = writeLog @TRACE
|
||||||
|
|
||||||
debug :: (ToLogStr a, MonadIO m) => a -> m ()
|
debug :: forall a m . (ToLogStr (Doc a), MonadIO m) => Doc a -> m ()
|
||||||
debug = log @DEBUG
|
debug = writeLog @DEBUG
|
||||||
|
|
||||||
warn :: (ToLogStr a, MonadIO m) => a -> m ()
|
warn :: forall a m . (ToLogStr (Doc a), MonadIO m) => Doc a -> m ()
|
||||||
warn = log @WARN
|
warn = writeLog @WARN
|
||||||
|
|
||||||
err :: (ToLogStr a, MonadIO m) => a -> m ()
|
err :: forall a m . (ToLogStr (Doc a), MonadIO m) => Doc a -> m ()
|
||||||
err = log @ERROR
|
err = writeLog @ERROR
|
||||||
|
|
||||||
notice :: (ToLogStr a, MonadIO m) => a -> m ()
|
notice :: forall a m . (ToLogStr (Doc a), MonadIO m) => Doc a -> m ()
|
||||||
notice = log @NOTICE
|
notice = writeLog @NOTICE
|
||||||
|
|
||||||
info :: (ToLogStr a, MonadIO m) => a -> m ()
|
info :: forall a m . (ToLogStr (Doc a), MonadIO m) => Doc a -> m ()
|
||||||
info = log @INFO
|
info = writeLog @INFO
|
||||||
|
|
||||||
-- instance {-# OVERLAPPABLE #-} Pretty a => ToLogStr a where
|
-- instance {-# OVERLAPPABLE #-} Pretty a => ToLogStr a where
|
||||||
-- toLogStr p = toLogStr (show (pretty p))
|
-- toLogStr p = toLogStr (show (pretty p))
|
||||||
|
|
||||||
|
|
||||||
instance {-# OVERLAPPABLE #-} ToLogStr (Doc ann) where
|
instance {-# OVERLAPPABLE #-} ToLogStr (Doc ann) where
|
||||||
toLogStr = toLogStr . show
|
toLogStr = toLogStr . show
|
||||||
|
|
||||||
|
|
||||||
logPrefix :: LogStr -> LoggerEntry-> LoggerEntry
|
logPrefix :: LogStr -> LoggerEntry-> LoggerEntry
|
||||||
logPrefix s = set loggerTr (s <>)
|
logPrefix s = set loggerTr (s <>)
|
||||||
|
|
||||||
|
|
|
@ -1,42 +1,59 @@
|
||||||
{-# OPTIONS_GHC -fno-warn-orphans #-}
|
{-# OPTIONS_GHC -fno-warn-orphans #-}
|
||||||
module HBS2.System.Logger.Simple.ANSI
|
module HBS2.System.Logger.Simple.ANSI
|
||||||
( trace
|
( module HBS2.System.Logger.Simple.Class
|
||||||
|
, trace
|
||||||
, debug
|
, debug
|
||||||
, err
|
, err
|
||||||
, warn
|
, warn
|
||||||
, notice
|
, notice
|
||||||
, info
|
, info
|
||||||
|
, writeLog
|
||||||
, AnsiStyle
|
, AnsiStyle
|
||||||
, ToLogStr(..)
|
, ToLogStr(..)
|
||||||
, INFO,NOTICE,WARN,ERROR,DEBUG,TRACE
|
-- , INFO,NOTICE,WARN,ERROR,DEBUG
|
||||||
, setLogging,setLoggingOff
|
, setLogging,setLoggingOff
|
||||||
, toStderr,toStdout,logPrefix,defLog
|
, toStderr,toStdout,logPrefix,defLog
|
||||||
|
, SetLoggerEntry
|
||||||
|
, withSimpleLogger
|
||||||
|
, HasLogLevel(..)
|
||||||
) where
|
) where
|
||||||
|
|
||||||
import Prettyprinter.Render.Terminal
|
import Prettyprinter.Render.Terminal
|
||||||
|
import HBS2.System.Logger.Simple.Class
|
||||||
import HBS2.System.Logger.Simple qualified as Logger
|
import HBS2.System.Logger.Simple qualified as Logger
|
||||||
import HBS2.System.Logger.Simple (INFO,NOTICE,WARN,ERROR,DEBUG,TRACE,setLoggingOff,setLogging,toStderr,toStdout,logPrefix,defLog)
|
import HBS2.System.Logger.Simple ( setLoggingOff
|
||||||
|
, setLogging
|
||||||
|
, toStderr
|
||||||
|
, toStdout
|
||||||
|
, logPrefix
|
||||||
|
, defLog
|
||||||
|
, SetLoggerEntry
|
||||||
|
, writeLog
|
||||||
|
, withSimpleLogger
|
||||||
|
)
|
||||||
import Control.Monad.IO.Class
|
import Control.Monad.IO.Class
|
||||||
import Prettyprinter
|
import Prettyprinter
|
||||||
import System.Log.FastLogger
|
import System.Log.FastLogger
|
||||||
|
|
||||||
trace :: MonadIO m => Doc AnsiStyle -> m ()
|
|
||||||
trace = Logger.trace @(Doc AnsiStyle)
|
|
||||||
|
|
||||||
debug :: MonadIO m => Doc AnsiStyle -> m ()
|
|
||||||
debug = Logger.debug @(Doc AnsiStyle)
|
|
||||||
|
|
||||||
warn :: MonadIO m => Doc AnsiStyle -> m ()
|
|
||||||
warn = Logger.warn @(Doc AnsiStyle)
|
|
||||||
|
|
||||||
err :: MonadIO m => Doc AnsiStyle -> m ()
|
|
||||||
err = Logger.err @(Doc AnsiStyle)
|
|
||||||
|
|
||||||
notice :: MonadIO m => Doc AnsiStyle -> m ()
|
|
||||||
notice = Logger.notice @(Doc AnsiStyle)
|
|
||||||
|
|
||||||
info :: MonadIO m => Doc AnsiStyle -> m ()
|
|
||||||
info = Logger.info @(Doc AnsiStyle)
|
|
||||||
|
|
||||||
instance ToLogStr (Doc AnsiStyle) where
|
instance ToLogStr (Doc AnsiStyle) where
|
||||||
toLogStr = toLogStr . renderStrict . layoutPretty defaultLayoutOptions
|
toLogStr = toLogStr . renderStrict . layoutPretty defaultLayoutOptions
|
||||||
|
|
||||||
|
trace :: forall m . MonadIO m => Doc AnsiStyle -> m ()
|
||||||
|
trace = Logger.trace @AnsiStyle
|
||||||
|
|
||||||
|
debug :: forall m . MonadIO m => Doc AnsiStyle -> m ()
|
||||||
|
debug = Logger.debug @AnsiStyle
|
||||||
|
|
||||||
|
warn :: forall m. MonadIO m => Doc AnsiStyle -> m ()
|
||||||
|
warn = Logger.warn @AnsiStyle
|
||||||
|
|
||||||
|
err :: forall m . MonadIO m => Doc AnsiStyle -> m ()
|
||||||
|
err = Logger.err @AnsiStyle
|
||||||
|
|
||||||
|
notice :: forall m . MonadIO m => Doc AnsiStyle -> m ()
|
||||||
|
notice = Logger.notice @AnsiStyle
|
||||||
|
|
||||||
|
info :: MonadIO m => Doc AnsiStyle -> m ()
|
||||||
|
info = Logger.info @AnsiStyle
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -37,3 +37,5 @@ instance HasLogLevel WARN where
|
||||||
instance HasLogLevel NOTICE where
|
instance HasLogLevel NOTICE where
|
||||||
type instance LogLevel NOTICE = 6
|
type instance LogLevel NOTICE = 6
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -3,6 +3,7 @@ module TestFileLogger where
|
||||||
import HBS2.System.Logger.Simple
|
import HBS2.System.Logger.Simple
|
||||||
import System.Directory
|
import System.Directory
|
||||||
import Test.Tasty.HUnit
|
import Test.Tasty.HUnit
|
||||||
|
import Prettyprinter
|
||||||
|
|
||||||
logFile :: FilePath
|
logFile :: FilePath
|
||||||
logFile = "/tmp/testFileLogger.log"
|
logFile = "/tmp/testFileLogger.log"
|
||||||
|
@ -21,8 +22,8 @@ testFileLogger = do
|
||||||
setLogging @DEBUG debugPrefix
|
setLogging @DEBUG debugPrefix
|
||||||
setLogging @WARN warnPrefix
|
setLogging @WARN warnPrefix
|
||||||
|
|
||||||
debug msg1
|
debug $ pretty msg1
|
||||||
warn msg2
|
warn $ pretty msg2
|
||||||
|
|
||||||
setLoggingOff @DEBUG
|
setLoggingOff @DEBUG
|
||||||
setLoggingOff @WARN
|
setLoggingOff @WARN
|
||||||
|
|
|
@ -17,6 +17,7 @@ common shared-properties
|
||||||
ghc-options:
|
ghc-options:
|
||||||
-Wall
|
-Wall
|
||||||
-Wno-type-defaults
|
-Wno-type-defaults
|
||||||
|
-fprint-potential-instances
|
||||||
-- -fno-warn-unused-matches
|
-- -fno-warn-unused-matches
|
||||||
-- -fno-warn-unused-do-bind
|
-- -fno-warn-unused-do-bind
|
||||||
-- -Werror=missing-methods
|
-- -Werror=missing-methods
|
||||||
|
|
|
@ -21,7 +21,7 @@ import HBS2.Net.Proto.Sessions
|
||||||
import HBS2.Prelude.Plated
|
import HBS2.Prelude.Plated
|
||||||
import HBS2.Storage
|
import HBS2.Storage
|
||||||
import HBS2.Storage.Operations.Missed
|
import HBS2.Storage.Operations.Missed
|
||||||
import HBS2.System.Logger.Simple
|
import HBS2.Misc.PrettyStuff
|
||||||
|
|
||||||
import PeerTypes
|
import PeerTypes
|
||||||
import PeerInfo
|
import PeerInfo
|
||||||
|
@ -635,7 +635,6 @@ blockDownloadLoop env0 = do
|
||||||
let refs = withPeerM e (getKnownPeers @e <&> fmap (,60))
|
let refs = withPeerM e (getKnownPeers @e <&> fmap (,60))
|
||||||
|
|
||||||
polling (Polling 5 60) refs $ \peer -> do
|
polling (Polling 5 60) refs $ \peer -> do
|
||||||
debug $ "SOME FUCKING PEER:" <+> pretty peer
|
|
||||||
|
|
||||||
-- ШАГ 1. Поллим пиров, создаём новых, если для них нет зареганой очереди
|
-- ШАГ 1. Поллим пиров, создаём новых, если для них нет зареганой очереди
|
||||||
here <- readTVarIO (_dPeerInbox state) <&> HashMap.member peer
|
here <- readTVarIO (_dPeerInbox state) <&> HashMap.member peer
|
||||||
|
@ -676,16 +675,16 @@ blockDownloadLoop env0 = do
|
||||||
next (PWork todo)
|
next (PWork todo)
|
||||||
|
|
||||||
PCheckPeer -> do
|
PCheckPeer -> do
|
||||||
debug $ "PEER CHECK" <+> pretty peer
|
trace $ "PEER CHECK" <+> pretty peer
|
||||||
auth <- withPeerM e (find (KnownPeerKey peer) id <&> isJust)
|
auth <- withPeerM e (find (KnownPeerKey peer) id <&> isJust)
|
||||||
|
|
||||||
when auth do
|
when auth do
|
||||||
next PIdle
|
next PIdle
|
||||||
|
|
||||||
debug "PEER FINISHING"
|
debug $ yellow "PEER FINISHING" <+> pretty peer
|
||||||
|
|
||||||
PWork (DTask{..}) -> do
|
PWork (DTask{..}) -> do
|
||||||
debug $ "PEER IS WORKING" <+> pretty peer <+> pretty _dtaskBlock
|
trace $ "PEER IS WORKING" <+> pretty peer <+> pretty _dtaskBlock
|
||||||
|
|
||||||
let (p,h) = (peer, _dtaskBlock)
|
let (p,h) = (peer, _dtaskBlock)
|
||||||
|
|
||||||
|
@ -703,7 +702,7 @@ blockDownloadLoop env0 = do
|
||||||
-- liftIO $ atomically $ modifyTVar downFail succ
|
-- liftIO $ atomically $ modifyTVar downFail succ
|
||||||
failedDownload p h
|
failedDownload p h
|
||||||
atomically $ modifyTVar downFail succ
|
atomically $ modifyTVar downFail succ
|
||||||
debug $ "DOWNLOAD FAILED!" <+> pretty p <+> pretty h
|
trace $ "DOWNLOAD FAILED!" <+> pretty p <+> pretty h
|
||||||
-- addDownload Nothing h
|
-- addDownload Nothing h
|
||||||
|
|
||||||
Right{} -> do
|
Right{} -> do
|
||||||
|
@ -712,7 +711,7 @@ blockDownloadLoop env0 = do
|
||||||
writeTVar downFail 0
|
writeTVar downFail 0
|
||||||
modifyTVar downBlk succ
|
modifyTVar downBlk succ
|
||||||
|
|
||||||
debug $ "DOWNLOAD SUCCEED" <+> pretty p <+> pretty h
|
trace $ "DOWNLOAD SUCCEED" <+> pretty p <+> pretty h
|
||||||
|
|
||||||
next PIdle
|
next PIdle
|
||||||
|
|
||||||
|
@ -748,24 +747,26 @@ postponedLoop env0 = do
|
||||||
|
|
||||||
pause @'Seconds 2.57
|
pause @'Seconds 2.57
|
||||||
|
|
||||||
void $ liftIO $ async $ withPeerM e $ withDownload env0 do
|
flip runContT pure do
|
||||||
q <- asks (view blockDelayTo)
|
|
||||||
fix \next -> do
|
|
||||||
w <- liftIO $ atomically $ readTQueue q
|
|
||||||
pause defInterBlockDelay
|
|
||||||
addDownload mzero w
|
|
||||||
-- ws <- liftIO $ atomically $ flushTQueue q
|
|
||||||
-- for_ (w:ws) $ addDownload mzero
|
|
||||||
next
|
|
||||||
|
|
||||||
void $ liftIO $ withPeerM e $ withDownload env0 do
|
void $ ContT $ withAsync $ liftIO $ withPeerM e $ withDownload env0 do
|
||||||
forever do
|
q <- asks (view blockDelayTo)
|
||||||
pause @'Seconds 30
|
fix \next -> do
|
||||||
trace "UNPOSTPONE LOOP"
|
w <- liftIO $ atomically $ readTQueue q
|
||||||
po <- asks (view blockPostponedTo) >>= liftIO . Cache.toList
|
pause defInterBlockDelay
|
||||||
for_ po $ \(h, _, expired) -> do
|
addDownload mzero w
|
||||||
when (isJust expired) do
|
-- ws <- liftIO $ atomically $ flushTQueue q
|
||||||
unpostponeBlock h
|
-- for_ (w:ws) $ addDownload mzero
|
||||||
|
next
|
||||||
|
|
||||||
|
void $ liftIO $ withPeerM e $ withDownload env0 do
|
||||||
|
forever do
|
||||||
|
pause @'Seconds 30
|
||||||
|
trace "UNPOSTPONE LOOP"
|
||||||
|
po <- asks (view blockPostponedTo) >>= liftIO . Cache.toList
|
||||||
|
for_ po $ \(h, _, expired) -> do
|
||||||
|
when (isJust expired) do
|
||||||
|
unpostponeBlock h
|
||||||
|
|
||||||
doBlockSizeRequest :: forall e m . ( MyPeer e
|
doBlockSizeRequest :: forall e m . ( MyPeer e
|
||||||
, Sessions e (KnownPeer e) m
|
, Sessions e (KnownPeer e) m
|
||||||
|
|
|
@ -11,7 +11,7 @@ import HBS2.Net.Proto.Sessions
|
||||||
import HBS2.Peer.Brains
|
import HBS2.Peer.Brains
|
||||||
|
|
||||||
import PeerConfig
|
import PeerConfig
|
||||||
import HBS2.System.Logger.Simple
|
import PeerLogger
|
||||||
|
|
||||||
import Network.DNS
|
import Network.DNS
|
||||||
import Control.Monad.Reader
|
import Control.Monad.Reader
|
||||||
|
|
|
@ -18,8 +18,8 @@ import HBS2.Base58
|
||||||
import HBS2.Net.IP.Addr
|
import HBS2.Net.IP.Addr
|
||||||
|
|
||||||
import HBS2.Peer.Brains
|
import HBS2.Peer.Brains
|
||||||
import HBS2.System.Logger.Simple
|
|
||||||
|
|
||||||
|
import PeerLogger
|
||||||
import PeerConfig
|
import PeerConfig
|
||||||
|
|
||||||
import Control.Concurrent.STM
|
import Control.Concurrent.STM
|
||||||
|
|
|
@ -4,8 +4,6 @@ import HBS2.Prelude
|
||||||
import HBS2.Clock
|
import HBS2.Clock
|
||||||
import HBS2.Actors.Peer
|
import HBS2.Actors.Peer
|
||||||
import HBS2.Net.Messaging.Encrypted.ByPass
|
import HBS2.Net.Messaging.Encrypted.ByPass
|
||||||
import HBS2.System.Logger.Simple
|
|
||||||
|
|
||||||
|
|
||||||
import HBS2.Net.Proto.Peer
|
import HBS2.Net.Proto.Peer
|
||||||
import HBS2.Net.Proto.PeerExchange
|
import HBS2.Net.Proto.PeerExchange
|
||||||
|
@ -16,11 +14,10 @@ import PeerTypes
|
||||||
|
|
||||||
import Control.Monad
|
import Control.Monad
|
||||||
import UnliftIO
|
import UnliftIO
|
||||||
|
import Control.Monad.Trans.Cont
|
||||||
|
|
||||||
byPassWorker :: ( ForByPass e
|
byPassWorker :: ( ForByPass e
|
||||||
, MonadUnliftIO m
|
, MonadUnliftIO m
|
||||||
, MonadIO m
|
|
||||||
, HasPeer e
|
, HasPeer e
|
||||||
, HasPeerLocator e m
|
, HasPeerLocator e m
|
||||||
, Sessions e (KnownPeer e) m
|
, Sessions e (KnownPeer e) m
|
||||||
|
@ -32,26 +29,21 @@ byPassWorker :: ( ForByPass e
|
||||||
|
|
||||||
byPassWorker bp penv = do
|
byPassWorker bp penv = do
|
||||||
|
|
||||||
tstat <- async $ forever do
|
flip runContT pure do
|
||||||
stats <- getStat bp
|
|
||||||
info $ "ByPass stats"
|
|
||||||
<> line
|
|
||||||
<> indent 2 (pretty stats)
|
|
||||||
<> line
|
|
||||||
|
|
||||||
pause @'Seconds 60
|
void $ ContT $ withAsync $ forever do
|
||||||
|
stats <- getStat bp
|
||||||
|
info $ "ByPass stats"
|
||||||
|
<> line
|
||||||
|
<> indent 2 (pretty stats)
|
||||||
|
<> line
|
||||||
|
|
||||||
link tstat
|
pause @'Seconds 60
|
||||||
|
|
||||||
gc <- async $ withPeerM penv $ forever do
|
|
||||||
pips <- getKnownPeers
|
|
||||||
cleanupByPassMessaging bp pips
|
|
||||||
pause @'Seconds 600
|
|
||||||
|
|
||||||
link gc
|
|
||||||
|
|
||||||
void $ waitAnyCatchCancel [tstat, gc]
|
|
||||||
|
|
||||||
|
forever do
|
||||||
|
pips <- getKnownPeers
|
||||||
|
cleanupByPassMessaging bp pips
|
||||||
|
pause @'Seconds 600
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -32,9 +32,7 @@ import HBS2.Peer.RefChanNotifyLog
|
||||||
|
|
||||||
import CLI.Common
|
import CLI.Common
|
||||||
import RPC2()
|
import RPC2()
|
||||||
|
import PeerLogger hiding (info)
|
||||||
import HBS2.System.Logger.Simple hiding (info)
|
|
||||||
import HBS2.System.Logger.Simple qualified as Log
|
|
||||||
|
|
||||||
import Control.Monad.Cont
|
import Control.Monad.Cont
|
||||||
import Control.Monad.Reader
|
import Control.Monad.Reader
|
||||||
|
|
|
@ -16,8 +16,6 @@ import CheckPeer (peerBanned)
|
||||||
import BlockDownload
|
import BlockDownload
|
||||||
import DownloadQ
|
import DownloadQ
|
||||||
|
|
||||||
import HBS2.System.Logger.Simple
|
|
||||||
|
|
||||||
import Control.Monad.Trans.Maybe
|
import Control.Monad.Trans.Maybe
|
||||||
import Control.Monad.Reader
|
import Control.Monad.Reader
|
||||||
import Data.Set qualified as Set
|
import Data.Set qualified as Set
|
||||||
|
|
|
@ -2,12 +2,10 @@ module CheckMetrics where
|
||||||
|
|
||||||
import HBS2.Prelude.Plated
|
import HBS2.Prelude.Plated
|
||||||
import HBS2.Clock
|
import HBS2.Clock
|
||||||
import HBS2.System.Logger.Simple
|
|
||||||
|
|
||||||
import Data.Foldable
|
import PeerLogger
|
||||||
import Data.Functor
|
|
||||||
import Control.Monad
|
import Control.Monad
|
||||||
-- import GHC.Stats
|
|
||||||
import System.Metrics
|
import System.Metrics
|
||||||
import Data.HashMap.Strict qualified as HashMap
|
import Data.HashMap.Strict qualified as HashMap
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,7 @@ module DispatchProxy
|
||||||
import HBS2.Prelude.Plated
|
import HBS2.Prelude.Plated
|
||||||
import HBS2.Net.Messaging
|
import HBS2.Net.Messaging
|
||||||
|
|
||||||
import HBS2.System.Logger.Simple
|
import PeerLogger
|
||||||
|
|
||||||
import Control.Concurrent.STM.TQueue qualified as TQ
|
import Control.Concurrent.STM.TQueue qualified as TQ
|
||||||
import Data.ByteString.Lazy (ByteString)
|
import Data.ByteString.Lazy (ByteString)
|
||||||
|
|
|
@ -3,8 +3,6 @@ module DownloadMon where
|
||||||
|
|
||||||
import HBS2.Prelude.Plated
|
import HBS2.Prelude.Plated
|
||||||
|
|
||||||
import HBS2.System.Logger.Simple
|
|
||||||
|
|
||||||
import HBS2.Actors.Peer
|
import HBS2.Actors.Peer
|
||||||
import PeerTypes
|
import PeerTypes
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,6 @@ import HBS2.Net.PeerLocator
|
||||||
import HBS2.Peer.Brains
|
import HBS2.Peer.Brains
|
||||||
import HBS2.Storage
|
import HBS2.Storage
|
||||||
import HBS2.Storage.Operations.Missed
|
import HBS2.Storage.Operations.Missed
|
||||||
import HBS2.System.Logger.Simple
|
|
||||||
|
|
||||||
import PeerTypes
|
import PeerTypes
|
||||||
import PeerConfig
|
import PeerConfig
|
||||||
|
|
|
@ -17,7 +17,6 @@ import HBS2.Net.Proto.Sessions
|
||||||
import HBS2.Prelude.Plated
|
import HBS2.Prelude.Plated
|
||||||
import HBS2.Storage
|
import HBS2.Storage
|
||||||
import HBS2.Net.Proto.Definition()
|
import HBS2.Net.Proto.Definition()
|
||||||
import HBS2.System.Logger.Simple
|
|
||||||
|
|
||||||
import PeerConfig
|
import PeerConfig
|
||||||
import PeerTypes
|
import PeerTypes
|
||||||
|
|
|
@ -6,8 +6,6 @@ import HBS2.Data.Types.Refs
|
||||||
import HBS2.Storage.Operations.Missed
|
import HBS2.Storage.Operations.Missed
|
||||||
import HBS2.Net.Proto.Types
|
import HBS2.Net.Proto.Types
|
||||||
|
|
||||||
import HBS2.System.Logger.Simple
|
|
||||||
|
|
||||||
import PeerTypes
|
import PeerTypes
|
||||||
import BlockDownload
|
import BlockDownload
|
||||||
|
|
||||||
|
|
|
@ -11,8 +11,6 @@ import HBS2.Net.Proto.Types
|
||||||
import HBS2.Net.Proto.RefLog
|
import HBS2.Net.Proto.RefLog
|
||||||
import HBS2.Events
|
import HBS2.Events
|
||||||
|
|
||||||
import HBS2.System.Logger.Simple
|
|
||||||
|
|
||||||
import PeerTypes
|
import PeerTypes
|
||||||
import PeerConfig
|
import PeerConfig
|
||||||
import RefLog ( doRefLogBroadCast )
|
import RefLog ( doRefLogBroadCast )
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
module Log where
|
module Log (module Log, module PeerLogger) where
|
||||||
|
|
||||||
import HBS2.System.Logger.Simple
|
import PeerLogger
|
||||||
|
|
||||||
|
-- import HBS2.System.Logger.Simple (SetLoggerEntry)
|
||||||
|
|
||||||
tracePrefix :: SetLoggerEntry
|
tracePrefix :: SetLoggerEntry
|
||||||
tracePrefix = logPrefix "[trace] "
|
tracePrefix = logPrefix "[trace] "
|
||||||
|
|
|
@ -13,12 +13,13 @@ import HBS2.Base58
|
||||||
import HBS2.Net.Proto.Types
|
import HBS2.Net.Proto.Types
|
||||||
import HBS2.Net.Auth.Credentials
|
import HBS2.Net.Auth.Credentials
|
||||||
import HBS2.Net.Proto.Definition()
|
import HBS2.Net.Proto.Definition()
|
||||||
import HBS2.System.Logger.Simple
|
|
||||||
|
|
||||||
import Data.Config.Suckless.Syntax
|
import Data.Config.Suckless.Syntax
|
||||||
import Data.Config.Suckless.Parse
|
import Data.Config.Suckless.Parse
|
||||||
import Data.Config.Suckless.KeyValue
|
import Data.Config.Suckless.KeyValue
|
||||||
|
|
||||||
|
import PeerLogger
|
||||||
|
|
||||||
import Control.Exception
|
import Control.Exception
|
||||||
import Control.Monad.Reader
|
import Control.Monad.Reader
|
||||||
import Data.Maybe
|
import Data.Maybe
|
||||||
|
|
|
@ -14,7 +14,6 @@ import HBS2.Net.Proto.PeerExchange
|
||||||
import HBS2.Net.Proto.Sessions
|
import HBS2.Net.Proto.Sessions
|
||||||
import HBS2.Net.Proto.Types
|
import HBS2.Net.Proto.Types
|
||||||
import HBS2.Prelude.Plated
|
import HBS2.Prelude.Plated
|
||||||
import HBS2.System.Logger.Simple
|
|
||||||
|
|
||||||
import HBS2.Net.Messaging.TCP
|
import HBS2.Net.Messaging.TCP
|
||||||
|
|
||||||
|
@ -22,8 +21,8 @@ import PeerConfig
|
||||||
import PeerTypes
|
import PeerTypes
|
||||||
import Brains
|
import Brains
|
||||||
|
|
||||||
import Control.Concurrent.Async
|
-- import Control.Concurrent.Async
|
||||||
import Control.Concurrent.STM
|
import Control.Concurrent.STM qualified as STM
|
||||||
import Control.Monad
|
import Control.Monad
|
||||||
import Control.Monad.Reader
|
import Control.Monad.Reader
|
||||||
import Data.Foldable hiding (find)
|
import Data.Foldable hiding (find)
|
||||||
|
@ -33,6 +32,11 @@ import Lens.Micro.Platform
|
||||||
import Numeric (showGFloat)
|
import Numeric (showGFloat)
|
||||||
import System.Random.Shuffle
|
import System.Random.Shuffle
|
||||||
import Data.HashMap.Strict qualified as HashMap
|
import Data.HashMap.Strict qualified as HashMap
|
||||||
|
import Data.Either
|
||||||
|
import Control.Monad.Trans.Cont
|
||||||
|
import Control.Exception qualified as E
|
||||||
|
|
||||||
|
import UnliftIO
|
||||||
|
|
||||||
|
|
||||||
data PeerPingIntervalKey
|
data PeerPingIntervalKey
|
||||||
|
@ -80,11 +84,11 @@ pexLoop :: forall e brains m . ( HasPeerLocator e m
|
||||||
, HasNonces (PeerExchange e) m
|
, HasNonces (PeerExchange e) m
|
||||||
, Request e (PeerExchange e) m
|
, Request e (PeerExchange e) m
|
||||||
, Sessions e (PeerExchange e) m
|
, Sessions e (PeerExchange e) m
|
||||||
, MonadIO m
|
, MonadUnliftIO m
|
||||||
, e ~ L4Proto
|
, e ~ L4Proto
|
||||||
) => brains -> Maybe MessagingTCP -> m ()
|
) => brains -> Maybe MessagingTCP -> m ()
|
||||||
|
|
||||||
pexLoop brains tcpEnv = do
|
pexLoop brains tcpEnv = forever do
|
||||||
|
|
||||||
pause @'Seconds 5
|
pause @'Seconds 5
|
||||||
|
|
||||||
|
@ -94,44 +98,50 @@ pexLoop brains tcpEnv = do
|
||||||
-- Есть подозрения, что TCP сессии не чистятся
|
-- Есть подозрения, что TCP сессии не чистятся
|
||||||
-- надлежащим образом. Требуется расследовать.
|
-- надлежащим образом. Требуется расследовать.
|
||||||
|
|
||||||
-- NOTE: tcpPexInfo
|
flip runContT pure do
|
||||||
-- Этот кусок говорит Brains о том,
|
|
||||||
-- какие TCP сессии есть в наличии.
|
|
||||||
-- Убирать пока нельзя
|
|
||||||
tcpPexInfo <- liftIO $ async $ forever do
|
|
||||||
-- FIXME: fix-hardcode
|
|
||||||
pause @'Seconds 20
|
|
||||||
|
|
||||||
pips <- knownPeers @e pl
|
-- NOTE: tcpPexInfo
|
||||||
onKnownPeers brains pips
|
-- Этот кусок говорит Brains о том,
|
||||||
|
-- какие TCP сессии есть в наличии.
|
||||||
|
-- Убирать пока нельзя
|
||||||
|
void $ ContT $ withAsync $ forever do
|
||||||
|
-- FIXME: fix-hardcode
|
||||||
|
pause @'Seconds 20
|
||||||
|
|
||||||
conns <- maybe1 (view tcpPeerConn <$> tcpEnv) (pure mempty) $ \tconn -> do
|
pips <- knownPeers @e pl
|
||||||
liftIO $ readTVarIO tconn <&> HashMap.toList
|
onKnownPeers brains pips
|
||||||
|
|
||||||
ssids <- forM conns $ \(p,coo) -> do
|
conns <- maybe1 (view tcpPeerConn <$> tcpEnv) (pure mempty) $ \tconn -> do
|
||||||
debug $ "ACTUAL TCP SESSIONS" <+> pretty p <+> pretty coo
|
try @_ @SomeException $ readTVarIO tconn <&> HashMap.toList
|
||||||
pa <- toPeerAddr p
|
>>= either (const $ warn "tcpSessionWait issue" >> pause @'Seconds 1 >> pure mempty) pure
|
||||||
pure (pa, coo)
|
|
||||||
|
|
||||||
setActiveTCPSessions @e brains ssids
|
ssids <- forM conns $ \(p,coo) -> do
|
||||||
|
debug $ "ACTUAL TCP SESSIONS" <+> pretty p <+> pretty coo
|
||||||
|
pa <- toPeerAddr p
|
||||||
|
pure (pa, coo)
|
||||||
|
|
||||||
pure ()
|
setActiveTCPSessions @e brains ssids
|
||||||
|
|
||||||
liftIO $ mapM_ link [tcpPexInfo]
|
pure ()
|
||||||
|
|
||||||
forever do
|
void $ ContT $ withAsync $ forever do
|
||||||
|
|
||||||
pips <- knownPeers @e pl
|
pips <- knownPeers @e pl
|
||||||
|
|
||||||
peers' <- forM pips $ \p -> do
|
peers' <- forM pips $ \p -> do
|
||||||
au <- find @e (KnownPeerKey p) id
|
au <- find @e (KnownPeerKey p) id
|
||||||
pure $ maybe1 au mempty (const [p])
|
pure $ maybe1 au mempty (const [p])
|
||||||
|
|
||||||
peers <- liftIO (shuffleM (mconcat peers')) <&> take 10 -- FIXME: defaults
|
peers <- liftIO (shuffleM (mconcat peers')) <&> take 10 -- FIXME: defaults
|
||||||
|
|
||||||
for_ peers sendPeerExchangeGet
|
for_ peers sendPeerExchangeGet
|
||||||
|
|
||||||
pause @'Seconds 180 -- FIXME: defaults
|
pause @'Seconds 180 -- FIXME: defaults
|
||||||
|
|
||||||
|
forever do
|
||||||
|
pips <- knownPeers @e pl
|
||||||
|
onKnownPeers brains pips
|
||||||
|
pause @'Seconds 60
|
||||||
|
|
||||||
peerPingLoop :: forall e m . ( HasPeerLocator e m
|
peerPingLoop :: forall e m . ( HasPeerLocator e m
|
||||||
, HasPeer e
|
, HasPeer e
|
||||||
|
@ -170,81 +180,83 @@ peerPingLoop (PeerConfig syn) penv = do
|
||||||
-- liftIO $ atomically $ writeTQueue wake [p]
|
-- liftIO $ atomically $ writeTQueue wake [p]
|
||||||
|
|
||||||
|
|
||||||
-- TODO: peer info loop
|
flip runContT pure do
|
||||||
infoLoop <- liftIO $ async $ forever $ withPeerM e $ do
|
|
||||||
pause @'Seconds 10
|
|
||||||
pee <- knownPeers @e pl
|
|
||||||
|
|
||||||
npi <- newPeerInfo
|
-- TODO: peer info loop
|
||||||
|
void $ ContT $ withAsync $ forever $ withPeerM e $ do
|
||||||
|
pause @'Seconds 10
|
||||||
|
pee <- knownPeers @e pl
|
||||||
|
|
||||||
now <- getTimeCoarse
|
npi <- newPeerInfo
|
||||||
|
|
||||||
debug $ "known peers" <+> pretty pee
|
now <- getTimeCoarse
|
||||||
|
|
||||||
for_ pee $ \p -> do
|
debug $ "known peers" <+> pretty pee
|
||||||
pinfo <- fetch True npi (PeerInfoKey p) id
|
|
||||||
burst <- liftIO $ readTVarIO (view peerBurst pinfo)
|
|
||||||
buM <- liftIO $ readTVarIO (view peerBurstMax pinfo)
|
|
||||||
errors <- liftIO $ readTVarIO (view peerErrorsPerSec pinfo)
|
|
||||||
downFails <- liftIO $ readTVarIO (view peerDownloadFail pinfo)
|
|
||||||
downMiss <- liftIO $ readTVarIO (view peerDownloadMiss pinfo)
|
|
||||||
down <- liftIO $ readTVarIO (view peerDownloadedBlk pinfo)
|
|
||||||
rtt <- liftIO $ medianPeerRTT pinfo <&> fmap realToFrac
|
|
||||||
httpDownloaded <- liftIO $ readTVarIO (_peerHttpDownloaded pinfo)
|
|
||||||
seen <- liftIO $ readTVarIO (view peerLastWatched pinfo)
|
|
||||||
let l = realToFrac (toNanoSecs $ now - seen) / 1e9
|
|
||||||
|
|
||||||
let rttMs = (/1e6) <$> rtt <&> (\x -> showGFloat (Just 2) x "") <&> (<> "ms")
|
for_ pee $ \p -> do
|
||||||
let ls = showGFloat (Just 2) l "" <> "s"
|
pinfo <- fetch True npi (PeerInfoKey p) id
|
||||||
|
burst <- liftIO $ readTVarIO (view peerBurst pinfo)
|
||||||
|
buM <- liftIO $ readTVarIO (view peerBurstMax pinfo)
|
||||||
|
errors <- liftIO $ readTVarIO (view peerErrorsPerSec pinfo)
|
||||||
|
downFails <- liftIO $ readTVarIO (view peerDownloadFail pinfo)
|
||||||
|
downMiss <- liftIO $ readTVarIO (view peerDownloadMiss pinfo)
|
||||||
|
down <- liftIO $ readTVarIO (view peerDownloadedBlk pinfo)
|
||||||
|
rtt <- liftIO $ medianPeerRTT pinfo <&> fmap realToFrac
|
||||||
|
httpDownloaded <- liftIO $ readTVarIO (_peerHttpDownloaded pinfo)
|
||||||
|
seen <- liftIO $ readTVarIO (view peerLastWatched pinfo)
|
||||||
|
let l = realToFrac (toNanoSecs $ now - seen) / 1e9
|
||||||
|
|
||||||
notice $ "peer" <+> pretty p <+> "burst:" <+> pretty burst
|
let rttMs = (/1e6) <$> rtt <&> (\x -> showGFloat (Just 2) x "") <&> (<> "ms")
|
||||||
<+> "burst-max:" <+> pretty buM
|
let ls = showGFloat (Just 2) l "" <> "s"
|
||||||
<+> "errors:" <+> pretty (downFails + errors)
|
|
||||||
<+> "down:" <+> pretty down
|
notice $ "peer" <+> pretty p <+> "burst:" <+> pretty burst
|
||||||
<+> "miss:" <+> pretty downMiss
|
<+> "burst-max:" <+> pretty buM
|
||||||
<+> "rtt:" <+> pretty rttMs
|
<+> "errors:" <+> pretty (downFails + errors)
|
||||||
<+> "http:" <+> pretty httpDownloaded
|
<+> "down:" <+> pretty down
|
||||||
<+> "seen" <+> pretty ls
|
<+> "miss:" <+> pretty downMiss
|
||||||
pure ()
|
<+> "rtt:" <+> pretty rttMs
|
||||||
|
<+> "http:" <+> pretty httpDownloaded
|
||||||
|
<+> "seen" <+> pretty ls
|
||||||
|
pure ()
|
||||||
|
|
||||||
|
|
||||||
watch <- liftIO $ async $ forever $ withPeerM e $ do
|
void $ ContT $ withAsync $ liftIO $ forever $ withPeerM e $ do
|
||||||
pause @'Seconds 120
|
pause @'Seconds 120
|
||||||
pips <- getKnownPeers @e
|
pips <- getKnownPeers @e
|
||||||
now <- getTimeCoarse
|
now <- getTimeCoarse
|
||||||
for_ pips $ \p -> do
|
for_ pips $ \p -> do
|
||||||
pinfo' <- find (PeerInfoKey p) id
|
pinfo' <- find (PeerInfoKey p) id
|
||||||
maybe1 pinfo' none $ \pinfo -> do
|
maybe1 pinfo' none $ \pinfo -> do
|
||||||
seen <- liftIO $ readTVarIO (view peerLastWatched pinfo)
|
seen <- liftIO $ readTVarIO (view peerLastWatched pinfo)
|
||||||
-- FIXME: do-something-with-this-nanosec-boilerplate-everywhere
|
-- FIXME: do-something-with-this-nanosec-boilerplate-everywhere
|
||||||
let l = realToFrac (toNanoSecs $ now - seen) / 1e9
|
let l = realToFrac (toNanoSecs $ now - seen) / 1e9
|
||||||
-- FIXME: time-hardcode
|
-- FIXME: time-hardcode
|
||||||
when ( l > 300 ) do
|
when ( l > 300 ) do
|
||||||
mpeerData <- find (KnownPeerKey p) id
|
mpeerData <- find (KnownPeerKey p) id
|
||||||
delPeers pl [p]
|
delPeers pl [p]
|
||||||
expire (PeerInfoKey p)
|
expire (PeerInfoKey p)
|
||||||
expire (KnownPeerKey p)
|
expire (KnownPeerKey p)
|
||||||
emit PeerExpiredEventKey (PeerExpiredEvent @e p {-mpeerData-})
|
emit PeerExpiredEventKey (PeerExpiredEvent @e p {-mpeerData-})
|
||||||
|
|
||||||
liftIO $ mapM_ link [watch, infoLoop]
|
|
||||||
|
|
||||||
forever do
|
forever do
|
||||||
|
|
||||||
-- FIXME: defaults
|
-- FIXME: defaults
|
||||||
r <- liftIO $ race (pause @'Seconds pingTime)
|
r <- liftIO $ race (pause @'Seconds pingTime)
|
||||||
(atomically $ readTQueue wake)
|
(atomically $ readTQueue wake)
|
||||||
|
|
||||||
sas' <- liftIO $ atomically $ flushTQueue wake <&> mconcat
|
sas' <- liftIO $ atomically $ STM.flushTQueue wake <&> mconcat
|
||||||
|
|
||||||
let sas = case r of
|
let sas = case r of
|
||||||
Left{} -> sas'
|
Left{} -> sas'
|
||||||
Right sa -> sa <> sas'
|
Right sa -> sa <> sas'
|
||||||
|
|
||||||
debug "peerPingLoop"
|
debug "peerPingLoop"
|
||||||
|
|
||||||
pips <- knownPeers @e pl <&> (<> sas) <&> List.nub
|
pips <- knownPeers @e pl <&> (<> sas) <&> List.nub
|
||||||
|
|
||||||
|
for_ pips $ \p -> do
|
||||||
|
-- trace $ "SEND PING TO" <+> pretty p
|
||||||
|
lift $ sendPing @e p
|
||||||
|
-- trace $ "SENT PING TO" <+> pretty p
|
||||||
|
|
||||||
for_ pips $ \p -> do
|
|
||||||
-- trace $ "SEND PING TO" <+> pretty p
|
|
||||||
sendPing @e p
|
|
||||||
-- trace $ "SENT PING TO" <+> pretty p
|
|
||||||
|
|
|
@ -0,0 +1,15 @@
|
||||||
|
module PeerLogger
|
||||||
|
( module Logger
|
||||||
|
, trace1, TRACE1
|
||||||
|
) where
|
||||||
|
|
||||||
|
import HBS2.Prelude.Plated
|
||||||
|
import HBS2.System.Logger.Simple.ANSI as Logger
|
||||||
|
|
||||||
|
data TRACE1
|
||||||
|
|
||||||
|
instance HasLogLevel TRACE1 where
|
||||||
|
type instance LogLevel TRACE1 = 101
|
||||||
|
|
||||||
|
trace1 :: forall a m . (MonadIO m, ToLogStr a) => a -> m ()
|
||||||
|
trace1 = Logger.writeLog @TRACE1
|
|
@ -38,14 +38,13 @@ import HBS2.Storage.Simple
|
||||||
import HBS2.Storage.Operations.Missed
|
import HBS2.Storage.Operations.Missed
|
||||||
import HBS2.Data.Detect
|
import HBS2.Data.Detect
|
||||||
|
|
||||||
import HBS2.System.Logger.Simple hiding (info)
|
|
||||||
import HBS2.Version
|
import HBS2.Version
|
||||||
import Paths_hbs2_peer qualified as Pkg
|
import Paths_hbs2_peer qualified as Pkg
|
||||||
|
|
||||||
import Brains
|
import Brains
|
||||||
import BrainyPeerLocator
|
import BrainyPeerLocator
|
||||||
import ByPassWorker
|
import ByPassWorker
|
||||||
import PeerTypes
|
import PeerTypes hiding (info)
|
||||||
import BlockDownload
|
import BlockDownload
|
||||||
import CheckBlockAnnounce (checkBlockAnnounce)
|
import CheckBlockAnnounce (checkBlockAnnounce)
|
||||||
import CheckPeer (peerBanned)
|
import CheckPeer (peerBanned)
|
||||||
|
@ -64,8 +63,9 @@ import CLI.RefChan
|
||||||
import RefChan
|
import RefChan
|
||||||
import RefChanNotifyLog
|
import RefChanNotifyLog
|
||||||
import Fetch (fetchHash)
|
import Fetch (fetchHash)
|
||||||
import Log
|
import Log hiding (info)
|
||||||
|
|
||||||
|
import HBS2.Misc.PrettyStuff
|
||||||
import HBS2.Peer.RPC.Internal.Types()
|
import HBS2.Peer.RPC.Internal.Types()
|
||||||
import HBS2.Peer.RPC.Internal.Storage()
|
import HBS2.Peer.RPC.Internal.Storage()
|
||||||
|
|
||||||
|
@ -540,8 +540,7 @@ runCLI = do
|
||||||
hashP = maybeReader fromStringMay
|
hashP = maybeReader fromStringMay
|
||||||
|
|
||||||
myException :: SomeException -> IO ()
|
myException :: SomeException -> IO ()
|
||||||
myException e = err ( show e )
|
myException e = err ( viaShow e )
|
||||||
|
|
||||||
|
|
||||||
newtype CredentialsM e s m a =
|
newtype CredentialsM e s m a =
|
||||||
CredentialsM { fromCredentials :: ReaderT (PeerCredentials s) m a }
|
CredentialsM { fromCredentials :: ReaderT (PeerCredentials s) m a }
|
||||||
|
@ -995,16 +994,15 @@ runPeer opts = Exception.handle (\e -> myException e
|
||||||
debug "sending first peer announce"
|
debug "sending first peer announce"
|
||||||
request localMulticast (PeerAnnounce @e pnonce)
|
request localMulticast (PeerAnnounce @e pnonce)
|
||||||
|
|
||||||
let peerThread t mx = W.tell . L.singleton =<< (liftIO . async) do
|
let peerThread t mx = ContT $ withAsync $ liftIO $
|
||||||
withPeerM env mx
|
withPeerM env mx
|
||||||
`U.withException` \e -> case fromException e of
|
`U.withException` \e -> case fromException e of
|
||||||
Just (_ :: AsyncCancelled) -> pure ()
|
Just (_ :: AsyncCancelled) -> pure ()
|
||||||
Nothing -> do
|
Nothing -> do
|
||||||
err ("peerThread" <+> viaShow t <+> "Failed with" <+> viaShow e)
|
err $ red "Exception" <+> "in thread" <+> pretty t <+> viaShow e
|
||||||
|
liftIO $ throwTo myself GoAgainException
|
||||||
|
|
||||||
debug $ "peerThread Finished:" <+> t
|
flip runContT pure do
|
||||||
|
|
||||||
workers <- W.execWriterT do
|
|
||||||
|
|
||||||
peerThread "local multicast" $ forever $ do
|
peerThread "local multicast" $ forever $ do
|
||||||
pause defPeerAnnounceTime -- FIXME: setting!
|
pause defPeerAnnounceTime -- FIXME: setting!
|
||||||
|
@ -1039,7 +1037,7 @@ runPeer opts = Exception.handle (\e -> myException e
|
||||||
|
|
||||||
peerThread "refChanNotifyLogWorker" (refChanNotifyLogWorker @e conf (SomeBrains brains))
|
peerThread "refChanNotifyLogWorker" (refChanNotifyLogWorker @e conf (SomeBrains brains))
|
||||||
|
|
||||||
peerThread "all protos" do
|
liftIO $ withPeerM penv do
|
||||||
runProto @e
|
runProto @e
|
||||||
[ makeResponse (blockSizeProto blk (downloadOnBlockSize denv) onNoBlock)
|
[ makeResponse (blockSizeProto blk (downloadOnBlockSize denv) onNoBlock)
|
||||||
, makeResponse (blockChunksProto adapter)
|
, makeResponse (blockChunksProto adapter)
|
||||||
|
@ -1055,8 +1053,6 @@ runPeer opts = Exception.handle (\e -> myException e
|
||||||
, makeResponse (refChanNotifyProto False refChanAdapter)
|
, makeResponse (refChanNotifyProto False refChanAdapter)
|
||||||
]
|
]
|
||||||
|
|
||||||
void $ liftIO $ waitAnyCancel workers
|
|
||||||
liftIO $ throwTo myself GoAgainException
|
|
||||||
|
|
||||||
let refChanHeadPostAction href = do
|
let refChanHeadPostAction href = do
|
||||||
void $ liftIO $ withPeerM penv $ do
|
void $ liftIO $ withPeerM penv $ do
|
||||||
|
|
|
@ -13,7 +13,6 @@ import HBS2.Net.Proto.Peer
|
||||||
import HBS2.Net.Proto.PeerMeta
|
import HBS2.Net.Proto.PeerMeta
|
||||||
import HBS2.Net.Proto.Sessions
|
import HBS2.Net.Proto.Sessions
|
||||||
import HBS2.Prelude.Plated
|
import HBS2.Prelude.Plated
|
||||||
import HBS2.System.Logger.Simple
|
|
||||||
|
|
||||||
import PeerTypes
|
import PeerTypes
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
{-# Language MultiWayIf #-}
|
{-# Language MultiWayIf #-}
|
||||||
module PeerTypes
|
module PeerTypes
|
||||||
( module PeerTypes
|
( module PeerTypes
|
||||||
|
, module PeerLogger
|
||||||
, module HBS2.Net.PeerLocator
|
, module HBS2.Net.PeerLocator
|
||||||
, module HBS2.Polling
|
, module HBS2.Polling
|
||||||
) where
|
) where
|
||||||
|
@ -30,11 +31,10 @@ import HBS2.Storage
|
||||||
import HBS2.Storage.Operations.Missed
|
import HBS2.Storage.Operations.Missed
|
||||||
import HBS2.Net.PeerLocator
|
import HBS2.Net.PeerLocator
|
||||||
import HBS2.Net.Proto.PeerMeta
|
import HBS2.Net.Proto.PeerMeta
|
||||||
import HBS2.System.Logger.Simple
|
|
||||||
|
|
||||||
-- import PeerInfo
|
|
||||||
import Brains
|
import Brains
|
||||||
import PeerConfig
|
import PeerConfig
|
||||||
|
import PeerLogger
|
||||||
|
|
||||||
import Prelude hiding (log)
|
import Prelude hiding (log)
|
||||||
import Control.Monad.Reader
|
import Control.Monad.Reader
|
||||||
|
@ -541,12 +541,5 @@ simpleBlockAnnounce size h = do
|
||||||
let annInfo = BlockAnnounceInfo 0 NoBlockInfoMeta size h
|
let annInfo = BlockAnnounceInfo 0 NoBlockInfoMeta size h
|
||||||
pure $ BlockAnnounce @e no annInfo
|
pure $ BlockAnnounce @e no annInfo
|
||||||
|
|
||||||
data TRACE1
|
|
||||||
|
|
||||||
instance HasLogLevel TRACE1 where
|
|
||||||
type instance LogLevel TRACE1 = 101
|
|
||||||
|
|
||||||
trace1 :: (MonadIO m, ToLogStr a) => a -> m ()
|
|
||||||
trace1 = log @TRACE1
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -6,13 +6,13 @@ import HBS2.Prelude.Plated
|
||||||
import HBS2.Data.Types.Refs (HashRef(..))
|
import HBS2.Data.Types.Refs (HashRef(..))
|
||||||
import HBS2.Net.Proto.Service
|
import HBS2.Net.Proto.Service
|
||||||
|
|
||||||
import HBS2.System.Logger.Simple
|
|
||||||
|
|
||||||
import SendBlockAnnounce
|
import SendBlockAnnounce
|
||||||
|
|
||||||
import HBS2.Peer.RPC.Internal.Types
|
import HBS2.Peer.RPC.Internal.Types
|
||||||
import HBS2.Peer.RPC.API.Peer
|
import HBS2.Peer.RPC.API.Peer
|
||||||
|
|
||||||
|
import PeerLogger
|
||||||
|
|
||||||
|
|
||||||
instance (MonadIO m,HasRpcContext PeerAPI RPC2Context m) => HandleMethod m RpcAnnounce where
|
instance (MonadIO m,HasRpcContext PeerAPI RPC2Context m) => HandleMethod m RpcAnnounce where
|
||||||
|
|
||||||
|
|
|
@ -5,12 +5,13 @@ module RPC2.Downloads where
|
||||||
import HBS2.Prelude.Plated
|
import HBS2.Prelude.Plated
|
||||||
import HBS2.Net.Proto.Service
|
import HBS2.Net.Proto.Service
|
||||||
import HBS2.Peer.Brains
|
import HBS2.Peer.Brains
|
||||||
import HBS2.System.Logger.Simple
|
|
||||||
import HBS2.Net.Proto.Definition()
|
import HBS2.Net.Proto.Definition()
|
||||||
|
|
||||||
import HBS2.Peer.RPC.API.Peer
|
import HBS2.Peer.RPC.API.Peer
|
||||||
import HBS2.Peer.RPC.Internal.Types
|
import HBS2.Peer.RPC.Internal.Types
|
||||||
|
|
||||||
|
import PeerLogger
|
||||||
|
|
||||||
instance (MonadIO m, HasRpcContext PeerAPI RPC2Context m) => HandleMethod m RpcDownloadList where
|
instance (MonadIO m, HasRpcContext PeerAPI RPC2Context m) => HandleMethod m RpcDownloadList where
|
||||||
|
|
||||||
handleMethod _ = do
|
handleMethod _ = do
|
||||||
|
|
|
@ -5,11 +5,11 @@ module RPC2.Fetch where
|
||||||
import HBS2.Prelude.Plated
|
import HBS2.Prelude.Plated
|
||||||
import HBS2.Net.Proto.Service
|
import HBS2.Net.Proto.Service
|
||||||
|
|
||||||
import HBS2.System.Logger.Simple
|
|
||||||
|
|
||||||
import HBS2.Peer.RPC.Internal.Types
|
import HBS2.Peer.RPC.Internal.Types
|
||||||
import HBS2.Peer.RPC.API.Peer
|
import HBS2.Peer.RPC.API.Peer
|
||||||
|
|
||||||
|
import PeerLogger
|
||||||
|
|
||||||
instance (MonadIO m, HasRpcContext PeerAPI RPC2Context m) => HandleMethod m RpcFetch where
|
instance (MonadIO m, HasRpcContext PeerAPI RPC2Context m) => HandleMethod m RpcFetch where
|
||||||
|
|
||||||
handleMethod href = do
|
handleMethod href = do
|
||||||
|
|
|
@ -8,7 +8,6 @@ import Log
|
||||||
|
|
||||||
import HBS2.Peer.RPC.API.Peer
|
import HBS2.Peer.RPC.API.Peer
|
||||||
|
|
||||||
import HBS2.System.Logger.Simple
|
|
||||||
|
|
||||||
instance (MonadIO m) => HandleMethod m RpcLogLevel where
|
instance (MonadIO m) => HandleMethod m RpcLogLevel where
|
||||||
|
|
||||||
|
|
|
@ -6,8 +6,6 @@ import HBS2.Prelude.Plated
|
||||||
import HBS2.Actors.Peer
|
import HBS2.Actors.Peer
|
||||||
import HBS2.Net.Proto.Service
|
import HBS2.Net.Proto.Service
|
||||||
|
|
||||||
import HBS2.System.Logger.Simple
|
|
||||||
|
|
||||||
import HBS2.Peer.RPC.Internal.Types
|
import HBS2.Peer.RPC.Internal.Types
|
||||||
|
|
||||||
import PeerTypes
|
import PeerTypes
|
||||||
|
|
|
@ -5,11 +5,10 @@ module RPC2.Poke where
|
||||||
import HBS2.Prelude.Plated
|
import HBS2.Prelude.Plated
|
||||||
import HBS2.Net.Proto.Service
|
import HBS2.Net.Proto.Service
|
||||||
|
|
||||||
import HBS2.System.Logger.Simple
|
|
||||||
|
|
||||||
import HBS2.Peer.RPC.Internal.Types
|
import HBS2.Peer.RPC.Internal.Types
|
||||||
import HBS2.Peer.RPC.API.Peer
|
import HBS2.Peer.RPC.API.Peer
|
||||||
|
|
||||||
|
import PeerLogger
|
||||||
|
|
||||||
instance ( MonadIO m
|
instance ( MonadIO m
|
||||||
, HasRpcContext PeerAPI RPC2Context m)
|
, HasRpcContext PeerAPI RPC2Context m)
|
||||||
|
|
|
@ -5,12 +5,13 @@ module RPC2.Poll where
|
||||||
import HBS2.Prelude.Plated
|
import HBS2.Prelude.Plated
|
||||||
import HBS2.Net.Proto.Service
|
import HBS2.Net.Proto.Service
|
||||||
import HBS2.Peer.Brains
|
import HBS2.Peer.Brains
|
||||||
import HBS2.System.Logger.Simple
|
|
||||||
import HBS2.Net.Proto.Definition()
|
import HBS2.Net.Proto.Definition()
|
||||||
|
|
||||||
import HBS2.Peer.RPC.API.Peer
|
import HBS2.Peer.RPC.API.Peer
|
||||||
import HBS2.Peer.RPC.Internal.Types
|
import HBS2.Peer.RPC.Internal.Types
|
||||||
|
|
||||||
|
import PeerLogger
|
||||||
|
|
||||||
instance (MonadIO m, HasRpcContext PeerAPI RPC2Context m) => HandleMethod m RpcPollList where
|
instance (MonadIO m, HasRpcContext PeerAPI RPC2Context m) => HandleMethod m RpcPollList where
|
||||||
|
|
||||||
handleMethod _ = do
|
handleMethod _ = do
|
||||||
|
|
|
@ -19,7 +19,6 @@ import HBS2.Storage
|
||||||
import HBS2.Peer.RPC.API.RefChan
|
import HBS2.Peer.RPC.API.RefChan
|
||||||
import HBS2.Peer.RPC.Internal.Types
|
import HBS2.Peer.RPC.Internal.Types
|
||||||
|
|
||||||
import HBS2.System.Logger.Simple
|
|
||||||
import PeerTypes
|
import PeerTypes
|
||||||
|
|
||||||
import Data.Functor
|
import Data.Functor
|
||||||
|
|
|
@ -18,7 +18,6 @@ import HBS2.Net.Proto.Service
|
||||||
import HBS2.Storage
|
import HBS2.Storage
|
||||||
import HBS2.Net.Messaging.Unix
|
import HBS2.Net.Messaging.Unix
|
||||||
|
|
||||||
import HBS2.System.Logger.Simple
|
|
||||||
import PeerTypes
|
import PeerTypes
|
||||||
import RefLog (doRefLogBroadCast)
|
import RefLog (doRefLogBroadCast)
|
||||||
|
|
||||||
|
|
|
@ -36,8 +36,6 @@ import HBS2.Net.Proto.Sessions
|
||||||
import HBS2.Storage
|
import HBS2.Storage
|
||||||
import HBS2.Storage.Operations.Missed
|
import HBS2.Storage.Operations.Missed
|
||||||
|
|
||||||
import HBS2.System.Logger.Simple
|
|
||||||
|
|
||||||
import PeerTypes hiding (downloads)
|
import PeerTypes hiding (downloads)
|
||||||
import PeerConfig
|
import PeerConfig
|
||||||
import BlockDownload
|
import BlockDownload
|
||||||
|
@ -513,6 +511,8 @@ runRefChanRelyWorker env adapter = liftIO $ forever do
|
||||||
runResponseM me $ do
|
runResponseM me $ do
|
||||||
refChanNotifyProto True adapter mess
|
refChanNotifyProto True adapter mess
|
||||||
|
|
||||||
|
{- HLINT ignore "Functor law" -}
|
||||||
|
|
||||||
refChanWorker :: forall e s m . ( MonadIO m
|
refChanWorker :: forall e s m . ( MonadIO m
|
||||||
, MonadUnliftIO m
|
, MonadUnliftIO m
|
||||||
, MyPeer e
|
, MyPeer e
|
||||||
|
|
|
@ -22,8 +22,6 @@ import HBS2.Net.Proto.Peer
|
||||||
import HBS2.Net.Proto.RefChan
|
import HBS2.Net.Proto.RefChan
|
||||||
import HBS2.Net.Proto.Sessions
|
import HBS2.Net.Proto.Sessions
|
||||||
|
|
||||||
import HBS2.System.Logger.Simple
|
|
||||||
|
|
||||||
import HBS2.Peer.RefChanNotifyLog
|
import HBS2.Peer.RefChanNotifyLog
|
||||||
|
|
||||||
import PeerTypes hiding (downloads)
|
import PeerTypes hiding (downloads)
|
||||||
|
|
|
@ -20,8 +20,6 @@ import HBS2.Net.Proto.Sessions
|
||||||
import HBS2.Net.Auth.Credentials
|
import HBS2.Net.Auth.Credentials
|
||||||
import HBS2.Merkle
|
import HBS2.Merkle
|
||||||
|
|
||||||
import HBS2.System.Logger.Simple
|
|
||||||
|
|
||||||
import Brains
|
import Brains
|
||||||
import PeerConfig
|
import PeerConfig
|
||||||
import PeerTypes
|
import PeerTypes
|
||||||
|
@ -95,6 +93,8 @@ data RefLogWorkerAdapter e =
|
||||||
, reflogUpdated :: (RefLogKey (Encryption e), Hash HbSync) -> IO ()
|
, reflogUpdated :: (RefLogKey (Encryption e), Hash HbSync) -> IO ()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
{- HLINT ignore "Functor law" -}
|
||||||
|
|
||||||
reflogWorker :: forall e s m . ( e ~ L4Proto
|
reflogWorker :: forall e s m . ( e ~ L4Proto
|
||||||
, MonadIO m, MyPeer e
|
, MonadIO m, MyPeer e
|
||||||
, EventListener e (RefLogUpdateEv e) m
|
, EventListener e (RefLogUpdateEv e) m
|
||||||
|
@ -164,10 +164,6 @@ reflogWorker conf brains adapter = do
|
||||||
reflogMon <- liftIO $ newTVarIO (mempty :: HashSet (Hash HbSync))
|
reflogMon <- liftIO $ newTVarIO (mempty :: HashSet (Hash HbSync))
|
||||||
|
|
||||||
subscribe @e RefLogReqAnswerKey $ \(RefLogReqAnswerData reflog h) -> do
|
subscribe @e RefLogReqAnswerKey $ \(RefLogReqAnswerData reflog h) -> do
|
||||||
-- TODO: ASAP-only-process-link-if-we-subscribed
|
|
||||||
-- TODO: ASAP-start-only-one-instance-for-link-monitor
|
|
||||||
-- TODO: ASAP-dont-do-if-already-done
|
|
||||||
|
|
||||||
-- TODO: use-download-mon
|
-- TODO: use-download-mon
|
||||||
here <- liftIO $ readTVarIO reflogMon <&> HashSet.member h
|
here <- liftIO $ readTVarIO reflogMon <&> HashSet.member h
|
||||||
unless here do
|
unless here do
|
||||||
|
|
|
@ -9,8 +9,6 @@ import HBS2.Net.Proto.BlockAnnounce
|
||||||
|
|
||||||
import PeerTypes
|
import PeerTypes
|
||||||
|
|
||||||
import HBS2.System.Logger.Simple
|
|
||||||
|
|
||||||
sendBlockAnnounce :: forall e m . (e ~ L4Proto, MonadIO m)
|
sendBlockAnnounce :: forall e m . (e ~ L4Proto, MonadIO m)
|
||||||
=> PeerEnv e
|
=> PeerEnv e
|
||||||
-> Peer e
|
-> Peer e
|
||||||
|
|
|
@ -152,6 +152,7 @@ library
|
||||||
HBS2.Peer.CLI.Detect
|
HBS2.Peer.CLI.Detect
|
||||||
|
|
||||||
other-modules:
|
other-modules:
|
||||||
|
-- HBS2.System.Logger.Simple
|
||||||
|
|
||||||
executable hbs2-peer
|
executable hbs2-peer
|
||||||
import: shared-properties
|
import: shared-properties
|
||||||
|
@ -190,6 +191,7 @@ executable hbs2-peer
|
||||||
, RPC2.RefLog
|
, RPC2.RefLog
|
||||||
, RPC2.RefChan
|
, RPC2.RefChan
|
||||||
, PeerTypes
|
, PeerTypes
|
||||||
|
, PeerLogger
|
||||||
, PeerConfig
|
, PeerConfig
|
||||||
, RefLog
|
, RefLog
|
||||||
, RefChan
|
, RefChan
|
||||||
|
|
|
@ -99,7 +99,7 @@ library
|
||||||
|
|
||||||
-- other-modules:
|
-- other-modules:
|
||||||
-- other-extensions:
|
-- other-extensions:
|
||||||
build-depends: base
|
build-depends: base, hbs2-peer
|
||||||
hs-source-dirs: src
|
hs-source-dirs: src
|
||||||
|
|
||||||
executable hbs2-share
|
executable hbs2-share
|
||||||
|
@ -108,7 +108,7 @@ executable hbs2-share
|
||||||
-- other-modules:
|
-- other-modules:
|
||||||
-- other-extensions:
|
-- other-extensions:
|
||||||
build-depends:
|
build-depends:
|
||||||
base, hbs2-share
|
base, hbs2-share, hbs2-peer
|
||||||
, optparse-applicative
|
, optparse-applicative
|
||||||
|
|
||||||
hs-source-dirs: app
|
hs-source-dirs: app
|
||||||
|
|
|
@ -44,7 +44,7 @@ import HBS2.Share.Keys
|
||||||
import HBS2.Share.MetaData
|
import HBS2.Share.MetaData
|
||||||
import HBS2.Share.LocalHash
|
import HBS2.Share.LocalHash
|
||||||
|
|
||||||
import HBS2.System.Logger.Simple
|
import HBS2.System.Logger.Simple.ANSI
|
||||||
import DBPipe.SQLite
|
import DBPipe.SQLite
|
||||||
|
|
||||||
import Control.Applicative
|
import Control.Applicative
|
||||||
|
|
|
@ -295,16 +295,16 @@
|
||||||
"suckless-conf": "suckless-conf_2"
|
"suckless-conf": "suckless-conf_2"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1707747161,
|
"lastModified": 1708329902,
|
||||||
"narHash": "sha256-eVTLMpxXUeto7Socc02vQg5sc59O64KQUpkOKcFF7IY=",
|
"narHash": "sha256-DrXP90f4etkB+AyqnHXNfdB3fE8Eg4f4uEcDbk5ppQI=",
|
||||||
"ref": "new-git-export-3",
|
"ref": "newest-hbs2-git",
|
||||||
"rev": "e17ca1578e6843c0edd4bee8ae976475cff867b9",
|
"rev": "f1ded0ae7d580a00f23574cc11c2ba6793857b0c",
|
||||||
"revCount": 1096,
|
"revCount": 1046,
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "http://git.hbs2/BTThPdHKF8XnEq4m6wzbKHKA6geLFK4ydYhBXAqBdHSP"
|
"url": "http://git.hbs2/BTThPdHKF8XnEq4m6wzbKHKA6geLFK4ydYhBXAqBdHSP"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"ref": "new-git-export-3",
|
"ref": "newest-hbs2-git",
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "http://git.hbs2/BTThPdHKF8XnEq4m6wzbKHKA6geLFK4ydYhBXAqBdHSP"
|
"url": "http://git.hbs2/BTThPdHKF8XnEq4m6wzbKHKA6geLFK4ydYhBXAqBdHSP"
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
inputs = {
|
inputs = {
|
||||||
extra-container.url = "github:erikarvstedt/extra-container";
|
extra-container.url = "github:erikarvstedt/extra-container";
|
||||||
nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable";
|
nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable";
|
||||||
hbs2.url = "git+http://git.hbs2/BTThPdHKF8XnEq4m6wzbKHKA6geLFK4ydYhBXAqBdHSP?ref=new-git-export-3";
|
hbs2.url = "git+http://git.hbs2/BTThPdHKF8XnEq4m6wzbKHKA6geLFK4ydYhBXAqBdHSP?ref=newest-hbs2-git";
|
||||||
hbs2.inputs.nixpkgs.follows = "nixpkgs";
|
hbs2.inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
|
||||||
home-manager.url = "github:nix-community/home-manager";
|
home-manager.url = "github:nix-community/home-manager";
|
||||||
|
|
Loading…
Reference in New Issue