Log Message: |
Stream svndiff deltas without creating temporary files during 'svn import'
over HTTP.
Creating the temporary files has a certain overhead (time to write them
and disk space), but what is more important, it prevents the client and
server from simultaneously processing the data, i.e., checksumming and
compressing it.
This can have a significant effect for large binary files, and the new
approach can be up to 2x faster. The actual improvement depends on the
configuration, but is generally more visible if the server and the client
process data with roughly the same speed. Several tests in my environment
showed that the import time was reduced from 63s to 32s, and from 8s to 5s
for two (different) large binary files.
Technically, this is achieved by teaching the delta editor driver that
is used in svn_client_import5() to use the new apply_textdelta_stream()
editor callback.
* subversion/libsvn_client/import.c
(open_txdelta_stream_baton_t): New.
(txdelta_stream_baton_t, txdelta_next_window, txdelta_md5_digest):
New. Used to create a custom txdelta stream that retargets the result
checksum into a supplied buffer. Used in open_txdelta_stream().
(send_file_contents): Move the core of this function, i.e., preparation
of the delta stream into ...
(open_txdelta_stream): ...this new svn_txdelta_stream_open_func_t
implementation, and pass the necessary arguments via baton. Use
result and scratch pools. Note that this function must be restartable,
as it can be called more than once, for example, if the HTTP server
decides to do a renegotiation, and we would be forced to resend
the whole request body.
(import_file): Use the new apply_textdelta_stream() editor callback.
|