mirror of https://github.com/voidlizard/hbs2
betta or not?
This commit is contained in:
parent
3e0464d1d7
commit
4151d06158
|
@ -743,56 +743,30 @@ downloadDispatcher brains env = flip runContT pure do
|
||||||
|
|
||||||
PChoose -> do
|
PChoose -> do
|
||||||
|
|
||||||
-- liftIO newStdGen >>= writeTVar rndGen
|
|
||||||
-- gen <- liftIO $ readTVarIO rndGen
|
|
||||||
let grab = 64
|
|
||||||
|
|
||||||
what <- atomically do
|
what <- atomically do
|
||||||
TSem.waitTSem sem
|
TSem.waitTSem sem
|
||||||
r <- newTVar ( HPSQ.empty @HashRef @Double @DCB )
|
|
||||||
|
|
||||||
blocks <- readTVar wip <&> HM.toList
|
wpsize <- readTVar wip <&> HM.size
|
||||||
let len = L.length blocks
|
let trsh = if wpsize < 10 then 3 else 0
|
||||||
|
|
||||||
-- k <- stateTVar rndGen (randomR (0, len))
|
blocks <- readTVar wip
|
||||||
-- let k = (me + grab) `mod` len -- stateTVar rndGen (randomR (0, len `div` 2))
|
|
||||||
|
|
||||||
-- let todo = let (a,b) = L.splitAt (min 0 k) blocks in (b <> a)
|
when (HM.null blocks) retry
|
||||||
-- et (a,b) = L.splitAt (min 0 k) blocks in (b <> a)
|
|
||||||
-- let todo = shuffle' blocks len gen
|
|
||||||
let todo = blocks
|
|
||||||
|
|
||||||
flip fix todo $ \loop w -> do
|
let todo = V.fromList (HM.toList blocks)
|
||||||
case w of
|
let len = V.length todo
|
||||||
[] -> none
|
i <- stateTVar rndGen ( randomR (0, len - 1) )
|
||||||
|
|
||||||
(h,dcb@DCB{..}):xs -> do
|
let (h,dcb@DCB{..}) = V.unsafeIndex todo (i `mod` len)
|
||||||
wpsize <- readTVar wip <&> HM.size
|
|
||||||
let trsh = if wpsize < 10 then 3 else 0
|
|
||||||
busy <- readTVar dcbBusy
|
|
||||||
down <- readTVar dcbDownloaded
|
|
||||||
absent <- readTVar _sizeCache <&> (== Just Nothing) . HM.lookup h
|
|
||||||
if busy > trsh || down || absent then
|
|
||||||
loop xs
|
|
||||||
else do
|
|
||||||
sizeCache <- readTVar _sizeCache
|
|
||||||
|
|
||||||
let eps = case dcbParent of
|
busy <- readTVar dcbBusy
|
||||||
Nothing -> 1.0
|
down <- readTVar dcbDownloaded
|
||||||
Just hp -> case HM.lookup hp sizeCache of
|
absent <- readTVar _sizeCache <&> (== Just Nothing) . HM.lookup h
|
||||||
Just (Just _) -> 0.5
|
|
||||||
_ -> 1.0
|
|
||||||
|
|
||||||
modifyTVar r (HPSQ.insert h eps dcb)
|
if busy > trsh || down || absent then
|
||||||
s <- readTVar r <&> HPSQ.size
|
retry
|
||||||
if s >= grab then pure () else loop xs
|
else do
|
||||||
|
pure (Just (h,dcb))
|
||||||
w <- readTVar r <&> HPSQ.findMin
|
|
||||||
case w of
|
|
||||||
Nothing -> retry
|
|
||||||
Just (h,_,d) -> do
|
|
||||||
modifyTVar (dcbBusy d) succ
|
|
||||||
pure (Just (h,d))
|
|
||||||
|
|
||||||
case what of
|
case what of
|
||||||
Just (hx, dcb) -> go (PInit hx dcb)
|
Just (hx, dcb) -> go (PInit hx dcb)
|
||||||
|
|
Loading…
Reference in New Issue