design for finally slaying this beast
This commit was sponsored by Ethan Aubin.
This commit is contained in:
parent
7fcbb92dfe
commit
46371797ec
1 changed files with 34 additions and 0 deletions
|
@ -0,0 +1,34 @@
|
||||||
|
[[!comment format=mdwn
|
||||||
|
username="joey"
|
||||||
|
subject="""comment 19"""
|
||||||
|
date="2020-10-08T13:45:37Z"
|
||||||
|
content="""
|
||||||
|
New plan for this: Extend `git-annex transferkeys` to send back progress
|
||||||
|
and success/failure info. Make it stop updating location tracking
|
||||||
|
and other state (the caller should instead) and only handle the actual
|
||||||
|
data movement and possibly low-level locking associated with it.
|
||||||
|
|
||||||
|
Then running multiple concurrent processes of it should be reasonably
|
||||||
|
efficient. There will still be some added overhead from pipe communication.
|
||||||
|
And some remotes will need to do more work. Eg, ones that use a tcp connection
|
||||||
|
will need to open more connections (one per -J level), even if earlier
|
||||||
|
non-transfer use already cached one. So git-annex should only use
|
||||||
|
transferkeys when annex.retry is enabled, and do the transfers in-process
|
||||||
|
otherwise.
|
||||||
|
|
||||||
|
Some remote backends should not be used via transferkeys. One, I think, is
|
||||||
|
the external special remote backend, at least when the async extension is
|
||||||
|
used. Instead, the external backend can expose something (ie a TChan) that
|
||||||
|
can be used to stop or restart a transfer that its running, and can just
|
||||||
|
kill the external process to do it. And if this is implemented for the async
|
||||||
|
extension it will work just as well for the other externals too, so may as
|
||||||
|
well do it for all of them. (When the async extension is used, that will
|
||||||
|
also stop other concurrent transfers, unless that gets extended with the
|
||||||
|
ability to cancel specific jobs.)
|
||||||
|
|
||||||
|
Also, all parts of Messages that remotes use will need to be serialized
|
||||||
|
over the transferkeys protocol. Eg, Messages.prompt when the transferkeys
|
||||||
|
process is doing something like ssh that is prompting for a password.
|
||||||
|
So transferkeys will need its own OutputType to make Messages communicate
|
||||||
|
over the pipe.
|
||||||
|
"""]]
|
Loading…
Add table
Add a link
Reference in a new issue