Julian Foad <julianf...@apache.org> writes: > I added a skeleton "protocol changes" section to the release notes: > > http://subversion.a.o.local/docs/release-notes/1.10.html#protocol-changes > > Here is a starting point. Can anyone help fill in the details?
[...] > Thoughts? Help? Maybe we could start with adding a subsection about that describes using LZ4 for http:// and svn:// to the users. If needed, we could then include the technical details about the negotiation into the "Client-Server Protocol Changes" and cross-link these two sections. For the http:// part, we could probably do something along the lines of the attached patch. Here is also the same content as plain text for convenience: [[[ LZ4 compression over the wire in http:// and svn:// connections Deltas transferred between Subversion 1.10 clients and servers may be compressed with LZ4. The actual choice of the compression algorithm depends on the used protocol, environment and its configuration — see below. For http:// protocol, use of LZ4 compression depends on the values of the server-side SVNCompressionLevel directive, client-side http-compression configuration option and on the network capabilities. LZ4 compression generally offers much faster compression and decompression speeds, but slightly worse compression ratio than zlib. By default, it is only preferred over low latency networks where the overhead associated with transferring the additional amount of data is assumed to be negligible. - On the server-side, SVNCompressionLevel 0 can be used to disable compression altogether. The special value of SVNCompressionLevel 1 forces the use of LZ4 compression for clients that support it. All other values result in negotiating the use of zlib compression with the respective compression level, unless the compression is disabled on the client. - On the client-side, setting http-compression to either yes or no will disable or enable compression that is then negotiated based on the server's configuration. The default value of auto will result in preferring LZ4 compression over low latency networks and zlib compression otherwise. Below is the table explaining the used compression algorithm in each combination of the client- and server-side configuration options: [table] <TODO about svn://> ]]] Thanks, Evgeny Kotkov
Index: docs/release-notes/1.10.html =================================================================== --- docs/release-notes/1.10.html (revision 1825639) +++ docs/release-notes/1.10.html (working copy) @@ -136,7 +136,7 @@ and what impact these changes may have.</p> <td>Use SVN 1.8 and above clients only for best results.</td></tr> <tr> <td> - <a href="#lz4">LZ4 compression over the wire in http:// connections</a> + <a href="#lz4-over-the-wire">LZ4 compression over the wire in http:// and svn:// connections</a> </td> <td>1.10</td> <td>1.10</td> @@ -526,7 +526,9 @@ containing large files. </p> <p>LZ4 compression is now used by default for the on-disk data in repositories -with filesystem format 8 (see below).</p> +with filesystem format 8. Also, Subversion 1.10 adds support for automatic +negotiation and use of LZ4 compression over the wire for http:// and svn:// +connections when it is supported by both endpoints.</p> <p><b>Note:</b> this does not apply to the pre-release <a href="https://lists.apache.org/thread.html/dd78432b301f3f95567930c242c46b308c8a017fd754c0f388245915@%3Cannounce.subversion.apache.org%3E">Subversion 1.10.0-alpha3</a> @@ -559,7 +561,7 @@ format number of a repository.)</p> <div class="h4" id="fsfs-lz4-configuration"> <h4>Configuring the repository to use LZ4 compression - <a class="sectionlink" href="#fsfs-format8" + <a class="sectionlink" href="#fsfs-lz4-configuration" title="Link to this section">¶</a> </h4> @@ -583,6 +585,116 @@ cycle into a new format 8 repository created with </div> <!-- fsfs-lz4-configuration --> +<div class="h4" id="lz4-over-the-wire"> +<h4>LZ4 compression over the wire in http:// and svn:// connections + <a class="sectionlink" href="#lz4-over-the-wire" + title="Link to this section">¶</a> +</h4> + +<p>Deltas transferred between Subversion 1.10 clients and servers may be +compressed with LZ4. The actual choice of the compression algorithm depends +on the used protocol, environment and its configuration — see below.</p> + +<p>For <b>http://</b> protocol, use of LZ4 compression depends on the values +of the server-side <tt>SVNCompressionLevel</tt> directive, client-side +<tt>http-compression</tt> configuration option and on the network +capabilities. LZ4 compression generally offers much faster compression +and decompression speeds, but slightly worse compression ratio than zlib. +By default, it is only preferred for low latency networks where the +overhead associated with transferring the additional amount of data is +assumed to be negligible.<p> + +<ul> + <li> + <p>On the <b>server-side</b>, <tt>SVNCompressionLevel 0</tt> + can be used to disable compression altogether. The special value of + <tt>SVNCompressionLevel 1</tt> forces the use of LZ4 compression for + clients that support it. All other values result in negotiating the + use of zlib compression with the respective compression level, unless + the compression is disabled on the client.</p> + </li> + <li> + <p>On the <b>client-side</b>, setting <tt>http-compression</tt> to + either <tt>yes</tt> or <tt>no</tt> will disable or enable compression + that is then negotiated based on the server's configuration. + The default value of <tt>auto</tt> will result in preferring LZ4 + compression for low latency networks and zlib compression otherwise.</p> + </li> +</ul> + +<p>Below is the table explaining the used compression algorithm in each +combination of the client- and server-side configuration options:</p> + +<table border="1"> + <tr> + <th></th> + <th colspan="3">1.10 Server<br />with SVNCompressionLevel:</th> + <th colspan="2">1.9 and older Server<br />with SVNCompressionLevel:</th> + </tr> + <tr> + <th>Subversion Client</th> + <th>0</th> + <th>1</th> + <th>2-9 (default: 5<sup>*</sup>)</th> + <th>0</th> + <th>1-9 (default: 5<sup>*</sup>)</th> + </tr> + <tr> + <td>1.10, <tt>http-compression: auto</tt><sup>*</sup>, low latency</td> + <td>No compression</td> + <td><b>LZ4</b> compression</td> + <td><b>LZ4</b> compression</td> + <td>No compression</td> + <td>zlib compression</td> + </tr> + <tr> + <td>1.10, <tt>http-compression: auto</tt><sup>*</sup>, high latency</td> + <td>No compression</td> + <td><b>LZ4</b> compression</td> + <td>zlib compression</td> + <td>No compression</td> + <td>zlib compression</td> + </tr> + <tr> + <td>1.10, <tt>http-compression: yes</tt></td> + <td>No compression</td> + <td><b>LZ4</b> compression</td> + <td>zlib compression</td> + <td>No compression</td> + <td>zlib compression</td> + </tr> + <tr> + <td>1.10, <tt>http-compression: no</tt></td> + <td>No compression</td> + <td>No compression</td> + <td>No compression</td> + <td>No compression</td> + <td>No compression</td> + </tr> + <tr> + <td>1.9 and older, <tt>http-compression: yes</tt><sup>*</sup></td> + <td>No compression</td> + <td>zlib compression</td> + <td>zlib compression</td> + <td>No compression</td> + <td>zlib compression</td> + </tr> + <tr> + <td>1.9 and older, <tt>http-compression: no</tt></td> + <td>No compression</td> + <td>No compression</td> + <td>No compression</td> + <td>No compression</td> + <td>No compression</td> + </tr> +</table> + +<p><sup>*</sup> Default configurations</p> + +<!-- TODO: describe LZ4 over svn:// --> + +</div> <!-- lz4-over-the-wire --> + </div> <!-- lz4 --> <div class="h3" id="shelving">