This commit is contained in:
Joey Hess 2019-02-12 22:02:02 -04:00
parent 024120065e
commit 2514c26ed8
No known key found for this signature in database
GPG key ID: DB12DB0FF05F8F38

View file

@ -198,21 +198,23 @@ ExportActions api.
getContentIdentifier :: ExportLocation -> Annex (Maybe ContentIdentifier)
retrieveExportWithContentIdentifier :: ExportLocation -> ContentIdentifier -> FilePath -> MeterUpdate -> Annex Bool
retrieveExportWithContentIdentifier :: ExportLocation -> ContentIdentifier -> (FilePath -> Annex Key) -> MeterUpdate -> Annex (Maybe Key)
storeExportWithContentIdentifier :: FilePath -> Key -> ExportLocation -> MeterUpdate -> Annex (Maybe ContentIdentifier)
retrieveExportWithContentIdentifier is used when downloading a new file from
the remote that listContents found. retrieveExport can't be used because
it has a Key parameter and the key is not yet known in this case.
(The callback generating a key will let eg S3 record the S3 version id for
the key.)
storeExportWithContentIdentifier is used to get the content identifier
corresponding to what was just stored. It can either get the content
corresponding to what it stores. It can either get the content
identifier in reply to the store (as S3 does with versioning), or it can
store to a temp location, get the content identifier of that, and then
rename the content into place. When there's a race with a concurrent
writer, it needs to avoid getting the ContentIdentifier for data written by
the other writer.
writer, it needs to avoid getting the wrong ContentIdentifier for data
written by the other writer.
TODO what's needed to work around the other race condition discussed above?