better transfer queue management
Allow transfers to be added with blocking until the queue is sufficiently small. Better control over which end of the queue to add a transfer to.
This commit is contained in:
parent
6107328a6b
commit
a9dbfdf28d
4 changed files with 52 additions and 25 deletions
|
@ -161,7 +161,7 @@ handleAdds st changechan transferqueue dstatus cs = returnWhen (null pendingadds
|
|||
sha <- inRepo $
|
||||
Git.HashObject.hashObject BlobObject link
|
||||
stageSymlink file sha
|
||||
queueTransfers transferqueue dstatus key (Just file) Upload
|
||||
queueTransfers Next transferqueue dstatus key (Just file) Upload
|
||||
showEndOk
|
||||
return $ Just change
|
||||
|
||||
|
|
|
@ -18,16 +18,23 @@ import Utility.ThreadScheduler
|
|||
thisThread :: ThreadName
|
||||
thisThread = "TransferScanner"
|
||||
|
||||
{- This thread scans remotes, to find transfers that need to be made to
|
||||
- keep their data in sync. The transfers are queued with low priority. -}
|
||||
{- This thread waits until a remote needs to be scanned, to find transfers
|
||||
- that need to be made, to keep data in sync.
|
||||
-
|
||||
- Remotes are scanned in the background; the scan is blocked when the
|
||||
- transfer queue gets too large.
|
||||
-}
|
||||
transferScannerThread :: ThreadState -> ScanRemoteMap -> TransferQueue -> IO ()
|
||||
transferScannerThread st scanremotes transferqueue = do
|
||||
runEvery (Seconds 2) $ do
|
||||
r <- getScanRemote scanremotes
|
||||
needtransfer <- scan st r
|
||||
forM_ needtransfer $ \(f, t) ->
|
||||
queueLaterTransfer transferqueue f t
|
||||
queueTransferAt smallsize Later transferqueue f t
|
||||
where
|
||||
smallsize = 10
|
||||
|
||||
{- -}
|
||||
scan :: ThreadState -> Remote -> IO [(AssociatedFile, Transfer)]
|
||||
scan st r = do
|
||||
debug thisThread ["scanning", show r]
|
||||
|
|
|
@ -206,7 +206,7 @@ onAddSymlink threadname file filestatus dstatus transferqueue = go =<< Backend.l
|
|||
- try to get the key's content. -}
|
||||
checkcontent key daemonstatus
|
||||
| scanComplete daemonstatus = unlessM (inAnnex key) $
|
||||
queueTransfers transferqueue dstatus
|
||||
queueTransfers Next transferqueue dstatus
|
||||
key (Just file) Download
|
||||
| otherwise = noop
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue