Commit Graph

5 Commits

Author SHA1 Message Date
Olivier Goffart
00984b6738 Fix crash in delta sync test.
The test was accessing dangling char* payload, as the QByteArray was
going out of scope
2018-09-20 13:09:36 +02:00
Christian Kamm
638f5c8752 Deltasync: Add growth/shrink unittest for downloads
Similar to the one for uploads, to test these corner cases more.
2018-04-18 08:57:31 +02:00
Christian Kamm
74f46d470b Zsync upload: Add unit tests for file growth and shrinkage
No matter whether it's aligned to zsync blocksize or not.
2018-03-16 10:51:48 +01:00
Christian Kamm
cc3304364d Zsync tests: Fix and improve GET test
It was sending way too much data (begin-of-range until end of file) and
not verifying that the final file actually had the expected contents.
2018-02-19 13:19:02 +01:00
Ahmed Ammar
12aeb890c9 Implementation of delta-sync support on client-side.
This commit adds client-side support for delta-sync, this adds a new
3rdparty submodule `gh:ahmedammar/zsync`. This zsync tree is a modified
version of upstream, adding some needed support for the upload path and
other requirements.

If the server does not announce the required zsync capability then a
full upload/download is fallen back to. Delta synchronization can be
enabled/disabled using command line, config, or gui options.

On both upload and download paths, a check is made for the existance of
a zsync metadata file on the server for a given path. This is provided
by a dav property called `zsync`, found during discovery phase. If it
doesn't exist the code reverts back to a complete upload or download,
i.e. previous implementations. In the case of upload, a new zsync
metadata file will be uploaded as part of the chunked upload and future
synchronizations will be delta-sync capable.

Chunked uploads no longer use sequential file names for each chunk id,
instead, they are named as the byte offset into the remote file, this is
a minimally intrusive modification to allow fo delta-sync and legacy
code paths to run seamlessly. A new http header OC-Total-File-Length is
sent, which informs the server of the final expected size of the file
not just the total transmitted bytes as reported by OC-Total-Length.

The seeding and generation of the zsync metadata file is done in a
separate thread since this is a cpu intensive task, ensuring main thread
is not blocked.

This commit closes owncloud/client#179.
2018-01-15 10:34:57 -05:00