mirror of https://github.com/voidlizard/hbs2
wip, timeout for download
This commit is contained in:
parent
599310a183
commit
3858ec35f7
|
@ -53,7 +53,7 @@ data RefChanWorkerEnv e =
|
||||||
RefChanWorkerEnv
|
RefChanWorkerEnv
|
||||||
{ _refChanWorkerEnvDownload :: DownloadEnv e
|
{ _refChanWorkerEnvDownload :: DownloadEnv e
|
||||||
, _refChanWorkerEnvHeadQ :: TQueue (RefChanHeadBlockTran e)
|
, _refChanWorkerEnvHeadQ :: TQueue (RefChanHeadBlockTran e)
|
||||||
, _refChaWorkerEnvDownload :: TVar (HashMap HashRef ()) -- таймстемп можно
|
, _refChaWorkerEnvDownload :: TVar (HashMap HashRef TimeSpec) -- таймстемп можно
|
||||||
}
|
}
|
||||||
|
|
||||||
makeLenses 'RefChanWorkerEnv
|
makeLenses 'RefChanWorkerEnv
|
||||||
|
@ -78,10 +78,11 @@ refChanAddDownload :: forall e m . ( m ~ PeerM e IO
|
||||||
=> RefChanWorkerEnv e -> HashRef -> m ()
|
=> RefChanWorkerEnv e -> HashRef -> m ()
|
||||||
refChanAddDownload env r = do
|
refChanAddDownload env r = do
|
||||||
penv <- ask
|
penv <- ask
|
||||||
|
t <- getTimeCoarse
|
||||||
withPeerM penv $ withDownload (_refChanWorkerEnvDownload env)
|
withPeerM penv $ withDownload (_refChanWorkerEnvDownload env)
|
||||||
$ processBlock @e (fromHashRef r)
|
$ processBlock @e (fromHashRef r)
|
||||||
|
|
||||||
atomically $ modifyTVar (view refChaWorkerEnvDownload env) (HashMap.insert r ())
|
atomically $ modifyTVar (view refChaWorkerEnvDownload env) (HashMap.insert r t)
|
||||||
|
|
||||||
checkDownloaded :: forall m . (MonadIO m, HasStorage m, Block ByteString ~ ByteString) => HashRef -> m Bool
|
checkDownloaded :: forall m . (MonadIO m, HasStorage m, Block ByteString ~ ByteString) => HashRef -> m Bool
|
||||||
checkDownloaded hr = do
|
checkDownloaded hr = do
|
||||||
|
@ -140,16 +141,20 @@ refChanWorker env = do
|
||||||
|
|
||||||
monitorDownloads = forever do
|
monitorDownloads = forever do
|
||||||
pause @'Seconds 2
|
pause @'Seconds 2
|
||||||
all <- atomically $ readTVar (view refChaWorkerEnvDownload env) <&> HashMap.keys
|
all <- atomically $ readTVar (view refChaWorkerEnvDownload env) <&> HashMap.toList
|
||||||
|
|
||||||
|
now <- getTimeCoarse
|
||||||
|
|
||||||
-- FIXME: consider-timeouts-or-leak-is-possible
|
-- FIXME: consider-timeouts-or-leak-is-possible
|
||||||
rest <- forM all $ \r -> do
|
rest <- forM all $ \(r,t) -> do
|
||||||
here <- checkDownloaded r
|
here <- checkDownloaded r
|
||||||
if here then do
|
if here then do
|
||||||
refChanOnHead env (RefChanHeadBlockTran r)
|
refChanOnHead env (RefChanHeadBlockTran r)
|
||||||
pure mempty
|
pure mempty
|
||||||
else do
|
else do
|
||||||
pure [(r,())]
|
-- FIXME: fix-timeout-hardcode
|
||||||
|
let expired = realToFrac (toNanoSecs $ now - t) / 1e9 > 600
|
||||||
|
if expired then pure mempty else pure [(r,t)]
|
||||||
|
|
||||||
atomically $ writeTVar (view refChaWorkerEnvDownload env) (HashMap.fromList (mconcat rest))
|
atomically $ writeTVar (view refChaWorkerEnvDownload env) (HashMap.fromList (mconcat rest))
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue