add TransferScanner thread
Efficiently finding transfers that need to be done to get two repos back in sync seems like an interesting problem.
This commit is contained in:
parent
26e4e65307
commit
522f568450
6 changed files with 138 additions and 43 deletions
34
Assistant/Threads/TransferScanner.hs
Normal file
34
Assistant/Threads/TransferScanner.hs
Normal file
|
@ -0,0 +1,34 @@
|
|||
{- git-annex assistant thread to scan remotes to find needed transfers
|
||||
-
|
||||
- Copyright 2012 Joey Hess <joey@kitenet.net>
|
||||
-
|
||||
- Licensed under the GNU GPL version 3 or higher.
|
||||
-}
|
||||
|
||||
module Assistant.Threads.TransferScanner where
|
||||
|
||||
import Assistant.Common
|
||||
import Assistant.ScanRemotes
|
||||
import Assistant.TransferQueue
|
||||
import Assistant.ThreadedMonad
|
||||
import Logs.Transfer
|
||||
import Types.Remote
|
||||
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 lot priority. -}
|
||||
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
|
||||
|
||||
scan :: ThreadState -> Remote -> IO [(AssociatedFile, Transfer)]
|
||||
scan st r = do
|
||||
debug thisThread ["scanning", show r]
|
||||
return [] -- TODO
|
Loading…
Add table
Add a link
Reference in a new issue