mirror of https://github.com/voidlizard/hbs2
wip
This commit is contained in:
parent
ceba76ddc4
commit
75d34f18d7
|
@ -34,6 +34,8 @@ import Control.Concurrent.STM.TVar
|
||||||
import Control.Concurrent.STM
|
import Control.Concurrent.STM
|
||||||
import Data.Hashable (hash)
|
import Data.Hashable (hash)
|
||||||
|
|
||||||
|
import Codec.Serialise (serialise, deserialiseOrFail)
|
||||||
|
|
||||||
import Prettyprinter hiding (pipe)
|
import Prettyprinter hiding (pipe)
|
||||||
|
|
||||||
data AnyStorage = forall zu . (Block ByteString ~ ByteString, Storage zu HbSync ByteString IO) => AnyStorage zu
|
data AnyStorage = forall zu . (Block ByteString ~ ByteString, Storage zu HbSync ByteString IO) => AnyStorage zu
|
||||||
|
@ -46,7 +48,7 @@ instance (IsKey HbSync, Key HbSync ~ Hash HbSync, Block ByteString ~ ByteString)
|
||||||
getChunk (AnyStorage s) = getChunk s
|
getChunk (AnyStorage s) = getChunk s
|
||||||
hasBlock (AnyStorage s) = hasBlock s
|
hasBlock (AnyStorage s) = hasBlock s
|
||||||
|
|
||||||
data AnyMessage enc e = AnyMessage Integer (Encoded e)
|
data AnyMessage enc e = AnyMessage !Integer !(Encoded e)
|
||||||
deriving stock (Generic)
|
deriving stock (Generic)
|
||||||
|
|
||||||
class Monad m => HasOwnPeer e m where
|
class Monad m => HasOwnPeer e m where
|
||||||
|
@ -70,9 +72,16 @@ instance Messaging (Fabriq e) e (AnyMessage (Encoded e) e) => PeerMessaging e
|
||||||
|
|
||||||
|
|
||||||
instance (HasPeer e, Encoded e ~ ByteString) => Messaging (Fabriq e) e (AnyMessage ByteString e) where
|
instance (HasPeer e, Encoded e ~ ByteString) => Messaging (Fabriq e) e (AnyMessage ByteString e) where
|
||||||
sendTo (Fabriq bus) = undefined -- sendTo bus
|
sendTo (Fabriq bus) t f (AnyMessage n bs) = sendTo bus t f (serialise (n, bs))
|
||||||
receive (Fabriq bus) = undefined -- receive bus
|
|
||||||
|
|
||||||
|
receive (Fabriq bus) t = do
|
||||||
|
recv <- receive @_ @e @ByteString bus t
|
||||||
|
r <- forM recv $ \(f, msg) ->
|
||||||
|
case deserialiseOrFail msg of
|
||||||
|
Right (n,bs) -> pure $ Just (f, AnyMessage n bs)
|
||||||
|
Left _ -> liftIO (print "FUCK!") >> pure Nothing -- FIXME what to do with undecoded messages?
|
||||||
|
|
||||||
|
pure $ catMaybes r
|
||||||
|
|
||||||
data AnyProtocol e m = forall p . ( HasProtocol e p
|
data AnyProtocol e m = forall p . ( HasProtocol e p
|
||||||
, Response e p m
|
, Response e p m
|
||||||
|
|
|
@ -30,14 +30,14 @@ defProtoPipelineSize :: Int
|
||||||
defProtoPipelineSize = 2000
|
defProtoPipelineSize = 2000
|
||||||
|
|
||||||
defCookieTimeout :: TimeSpec
|
defCookieTimeout :: TimeSpec
|
||||||
defCookieTimeout = toTimeSpec ( 120 :: Timeout 'Minutes)
|
defCookieTimeout = toTimeSpec ( 300 :: Timeout 'Minutes)
|
||||||
|
|
||||||
defBlockInfoTimeout :: TimeSpec
|
defBlockInfoTimeout :: TimeSpec
|
||||||
defBlockInfoTimeout = toTimeSpec ( 120 :: Timeout 'Minutes)
|
defBlockInfoTimeout = toTimeSpec ( 300 :: Timeout 'Minutes)
|
||||||
|
|
||||||
-- how much time wait for block from peer?
|
-- how much time wait for block from peer?
|
||||||
defBlockWaitMax :: Timeout 'Seconds
|
defBlockWaitMax :: Timeout 'Seconds
|
||||||
defBlockWaitMax = 60 :: Timeout 'Seconds
|
defBlockWaitMax = 300 :: Timeout 'Seconds
|
||||||
|
|
||||||
defSweepTimeout :: Timeout 'Seconds
|
defSweepTimeout :: Timeout 'Seconds
|
||||||
defSweepTimeout = 5 -- FIXME: only for debug!
|
defSweepTimeout = 5 -- FIXME: only for debug!
|
||||||
|
|
|
@ -153,7 +153,7 @@ simpleStorageWorker ss = do
|
||||||
Just a -> a >> next
|
Just a -> a >> next
|
||||||
|
|
||||||
killer <- async $ forever $ do
|
killer <- async $ forever $ do
|
||||||
pause ( 20 :: Timeout 'Seconds ) -- FIXME: setting
|
pause ( 30 :: Timeout 'Seconds ) -- FIXME: setting
|
||||||
|
|
||||||
atomically $ do
|
atomically $ do
|
||||||
|
|
||||||
|
@ -232,7 +232,7 @@ simpleGetChunkLazy s key off size = do
|
||||||
let action = do
|
let action = do
|
||||||
let fn = simpleBlockFileName s key
|
let fn = simpleBlockFileName s key
|
||||||
|
|
||||||
bs <- (Just <$> touchForRead s key) `catchAny` const (pure Nothing) -- FIXME: log this situation (file not found)
|
bs <- (Just <$> touchForRead s key) `catchAny` \e -> liftIO (print "CANT MMAP") >> (pure Nothing) -- FIXME: log this situation (file not found)
|
||||||
|
|
||||||
let result = BS.take (fromIntegral size) . BS.drop (fromIntegral off) <$> bs
|
let result = BS.take (fromIntegral size) . BS.drop (fromIntegral off) <$> bs
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue