thoughts
This commit is contained in:
parent
4a3c5ca071
commit
137450c9fe
1 changed files with 57 additions and 0 deletions
|
@ -0,0 +1,57 @@
|
|||
[[!comment format=mdwn
|
||||
username="joey"
|
||||
subject="""comment 1"""
|
||||
date="2020-06-30T15:18:37Z"
|
||||
content="""
|
||||
It could look like this:
|
||||
|
||||
> EXTENSIONS INFO ASYNC
|
||||
< EXTENSIONS ASYNC
|
||||
> TRANSFER RETRIEVE Key1 file
|
||||
< TRANSFER-ASYNC Key1
|
||||
< PROGRESS-ASYNC Key1 10
|
||||
> TRANSFER RETRIEVE Key2 file
|
||||
< PROGRESS-ASYNC Key1 100
|
||||
< TRANSFER-ASYNC Key1
|
||||
< PROGRESS-ASYNC Key2 10
|
||||
< TRANSFER-SUCCESS RETRIEVE Key1
|
||||
< TRANSFER-SUCCESS RETRIEVE Key2
|
||||
|
||||
Having separate job ids does not seem necessary since it has the key.
|
||||
|
||||
When both negotiate the ASYNC extension, then the special remote, for simplicity,
|
||||
should always use this async protocol, not mix in the non-async protocol.
|
||||
|
||||
From when git-annex sends TRANSFER until the special remote sends TRANSFER-ASYNC,
|
||||
the special remote can use send of the other special remote messages it
|
||||
needs to in order to handle the transfer, eg DIRHASH and GETCREDS.
|
||||
git-annex will avoid starting up any other transfers until after
|
||||
TRANSFER-ASYNC. This avoids what seems like it could
|
||||
be a lot of complexity in the special remote. (Imagine if git-annex sent
|
||||
another TRANSFER at the same time the special remote had sent DIRHASH;
|
||||
the special remote would need to defer handling that TRANSFER until it
|
||||
got the reply.)
|
||||
And after the TRANSFER-ASYNC, the special remote should refrain from
|
||||
sending anything further for that transfer except for PROGRESS-ASYNC
|
||||
and TRANSFER-SUCCESS/TRANSFER-FAILURE.
|
||||
|
||||
I don't think implementation in git-annex would be very hard, basically
|
||||
make a worker thread that's used for async transfers, that takes an
|
||||
external process from the pool and keeps it for its use as long as any
|
||||
transfers are running.
|
||||
|
||||
---
|
||||
|
||||
Note: This would be a further road block to implementating
|
||||
[[todo/more_extensive_retries_to_mask_transient_failures]], because there
|
||||
would be this one external process that's handling multiple transfers and
|
||||
killing it would stop them all rather than just the one that is wanted to
|
||||
be stopped..
|
||||
|
||||
Unless the protocol included a way to cancel a
|
||||
single transfer, eg "TRANSFER CANCEL Key1".
|
||||
But then the external program would need to support canceling a transfer,
|
||||
which it could be some protocols or libraries can't do cleanly, leading to
|
||||
the same kind of resource cleanup issues that are blocking that todo
|
||||
in git-annex.
|
||||
"""]]
|
Loading…
Reference in a new issue