docs: add file transfer safety section.

This commit is contained in:
David Wilson 2018-04-29 02:14:29 +01:00
parent bba2a42e44
commit 29f6c46e97
1 changed files with 26 additions and 5 deletions

View File

@ -268,16 +268,37 @@ machines, for example when ``become`` is active, or in the presence of
connection delegation. It also neatly avoids the problem of securely sharing connection delegation. It also neatly avoids the problem of securely sharing
temporary files between accounts and machines. temporary files between accounts and machines.
One roundtrip is required to initiate a transfer. For any tool that operates
via SSH multiplexing, 5 are required to configure the associated IO channel, in
addition to the time needed to start the local and remote processes. A complete
localhost invocation of ``scp`` requires around 15 ms.
As the implementation is self-contained, it is simple to make future As the implementation is self-contained, it is simple to make future
improvements like prioritizing transfers, supporting resume, or displaying improvements like prioritizing transfers, supporting resume, or displaying
progress bars. progress bars.
Safety
^^^^^^
Incomplete transfers proceed to a hidden file in the destination directory,
with content and metadata synced using `fsync(2)
<https://linux.die.net/man/2/fsync>`_ prior to being renamed over any existing
file. This ensures the file remains consistent in the event of a crash, or when
overlapping `ansible-playbook` runs deploy differing file contents.
The ``sftp`` and ``scp`` tools may cause undetectable data corruption in the
form of truncated files, or files containing partial data copies from
overlapping runs of `ansible-playbook`. Both tools additionally expose a window
where users of the file may observe inconsistent contents.
Performance
^^^^^^^^^^^
One roundtrip in each direction is required to initiate a transfer larger than
32KiB. For smaller transfers content is embedded in the RPC towards the target.
For any tool that operates via SSH multiplexing, 5 roundtrips are required to
configure the associated IO channel, in addition to the time needed to start
the local and remote copy subprocesses. A complete localhost invocation of
``scp`` with an empty ``.profile`` requires around 15 ms.
Interpreter Reuse Interpreter Reuse
~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~