You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by st...@apache.org on 2011/02/19 10:51:29 UTC

svn commit: r1072287 - in /subversion/branches/integrate-compression-level/subversion: libsvn_ra_neon/ mod_dav_svn/ mod_dav_svn/reports/

Author: stefan2
Date: Sat Feb 19 09:51:28 2011
New Revision: 1072287

URL: http://svn.apache.org/viewvc?rev=1072287&view=rev
Log:
Introduce SVNCompressionLevel mod_dav_svn parameter to make its
features symmetric to svnserve's. However, it seems that serf never
uses svndiff1 and compression is never done.

* subversion/mod_dav_svn/dav_svn.h
  (dav_svn__get_compression_level): get the compression level setting
* subversion/mod_dav_svn/mod_dav_svn.c
  (svn__compression_level): global compression level setting
  (SVNCompressionLevel_cmd): process compression level config setting
  (dav_svn__get_compression_level): implement
  (cmds): declare SVNCompressionLevel config parameter
* subversion/libsvn_ra_neon/commit.c
  (commit_apply_txdelta): use user-defined compression level

Modified:
    subversion/branches/integrate-compression-level/subversion/libsvn_ra_neon/commit.c
    subversion/branches/integrate-compression-level/subversion/mod_dav_svn/dav_svn.h
    subversion/branches/integrate-compression-level/subversion/mod_dav_svn/mod_dav_svn.c
    subversion/branches/integrate-compression-level/subversion/mod_dav_svn/reports/file-revs.c
    subversion/branches/integrate-compression-level/subversion/mod_dav_svn/reports/replay.c
    subversion/branches/integrate-compression-level/subversion/mod_dav_svn/reports/update.c
    subversion/branches/integrate-compression-level/subversion/mod_dav_svn/repos.c

Modified: subversion/branches/integrate-compression-level/subversion/libsvn_ra_neon/commit.c
URL: http://svn.apache.org/viewvc/subversion/branches/integrate-compression-level/subversion/libsvn_ra_neon/commit.c?rev=1072287&r1=1072286&r2=1072287&view=diff
==============================================================================
--- subversion/branches/integrate-compression-level/subversion/libsvn_ra_neon/commit.c (original)
+++ subversion/branches/integrate-compression-level/subversion/libsvn_ra_neon/commit.c Sat Feb 19 09:51:28 2011
@@ -1215,7 +1215,8 @@ commit_apply_txdelta(void *file_baton,
   stream = svn_stream_create(baton, pool);
   svn_stream_set_write(stream, commit_stream_write);
 
-  svn_txdelta_to_svndiff2(handler, handler_baton, stream, 0, pool);
+  svn_txdelta_to_svndiff3(handler, handler_baton, stream, 0,
+                          dav_svn__get_compression_level(), pool);
 
   /* Add this path to the valid targets hash. */
   add_valid_target(file->cc, file->rsrc->local_path, svn_nonrecursive);

Modified: subversion/branches/integrate-compression-level/subversion/mod_dav_svn/dav_svn.h
URL: http://svn.apache.org/viewvc/subversion/branches/integrate-compression-level/subversion/mod_dav_svn/dav_svn.h?rev=1072287&r1=1072286&r2=1072287&view=diff
==============================================================================
--- subversion/branches/integrate-compression-level/subversion/mod_dav_svn/dav_svn.h (original)
+++ subversion/branches/integrate-compression-level/subversion/mod_dav_svn/dav_svn.h Sat Feb 19 09:51:28 2011
@@ -370,6 +370,8 @@ const char *dav_svn__get_activities_db(r
 /* ### Is this assumed to be URI-encoded? */
 const char *dav_svn__get_root_dir(request_rec *r);
 
+/* Return the data compression level to be used over the wire. */
+int dav_svn__get_compression_level();
 
 /** For HTTP protocol v2, these are the new URIs and URI stubs
     returned to the client in our OPTIONS response.  They all depend

Modified: subversion/branches/integrate-compression-level/subversion/mod_dav_svn/mod_dav_svn.c
URL: http://svn.apache.org/viewvc/subversion/branches/integrate-compression-level/subversion/mod_dav_svn/mod_dav_svn.c?rev=1072287&r1=1072286&r2=1072287&view=diff
==============================================================================
--- subversion/branches/integrate-compression-level/subversion/mod_dav_svn/mod_dav_svn.c (original)
+++ subversion/branches/integrate-compression-level/subversion/mod_dav_svn/mod_dav_svn.c Sat Feb 19 09:51:28 2011
@@ -101,6 +101,10 @@ extern module AP_MODULE_DECLARE_DATA dav
 /* The authz_svn provider for bypassing path authz. */
 static authz_svn__subreq_bypass_func_t pathauthz_bypass_func = NULL;
 
+/* The compression level we will pass to svn_txdelta_to_svndiff3()
+ * for wire-compression */
+static int svn__compression_level = SVN_DEFAULT_COMPRESSSION_LEVEL;
+
 static int
 init(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *s)
 {
@@ -440,6 +444,32 @@ SVNInMemoryCacheSize_cmd(cmd_parms *cmd,
   return NULL;
 }
 
+static const char *
+SVNCompressionLevel_cmd(cmd_parms *cmd, void *config, const char *arg1)
+{
+  svn_fs_cache_config_t settings = *svn_fs_get_cache_config();
+
+  int value = 0;
+  svn_error_t *err = svn_cstring_atoi(&value, arg1);
+  if (err)
+    {
+      svn_error_clear(err);
+      return "Invalid decimal number for the SVN compression level.";
+    }
+
+  if ((value < SVN_NO_COMPRESSION_LEVEL) || (value > SVN_BEST_COMPRESSION_LEVEL))
+    return apr_psprintf(cmd->pool,
+                        "%d is not a valid compression level. "
+                        "The valid range is %d .. %d.",
+                        value,
+                        (int)SVN_NO_COMPRESSION_LEVEL,
+                        (int)SVN_BEST_COMPRESSION_LEVEL);
+
+  svn__compression_level = value;
+
+  return NULL;
+}
+
 
 /** Accessor functions for the module's configuration state **/
 
@@ -675,6 +705,12 @@ dav_svn__get_activities_db(request_rec *
 }
 
 
+int
+dav_svn__get_compression_level()
+{
+  return svn__compression_level;
+}
+
 static void
 merge_xml_filter_insert(request_rec *r)
 {
@@ -881,9 +917,15 @@ static const command_rec cmds[] =
   /* per server */
   AP_INIT_TAKE1("SVNInMemoryCacheSize", SVNInMemoryCacheSize_cmd, NULL,
                 RSRC_CONF,
-                "specify the maximum size im MB per process of Subversion's "
+                "specifies the maximum size im MB per process of Subversion's "
                 "in-memory object cache (default value is 16; 0 deactivates "
                 "the cache)."),
+  /* per server */
+  AP_INIT_TAKE1("SVNCompressionLevel", SVNCompressionLevel_cmd, NULL,
+                RSRC_CONF,
+                "specifies the ZIP compression level used before sending file "
+                "content over the network (0 for no compression, 9 for best, "
+                "5 is default)."),
 
   { NULL }
 };

Modified: subversion/branches/integrate-compression-level/subversion/mod_dav_svn/reports/file-revs.c
URL: http://svn.apache.org/viewvc/subversion/branches/integrate-compression-level/subversion/mod_dav_svn/reports/file-revs.c?rev=1072287&r1=1072286&r2=1072287&view=diff
==============================================================================
--- subversion/branches/integrate-compression-level/subversion/mod_dav_svn/reports/file-revs.c (original)
+++ subversion/branches/integrate-compression-level/subversion/mod_dav_svn/reports/file-revs.c Sat Feb 19 09:51:28 2011
@@ -206,8 +206,9 @@ file_rev_handler(void *baton,
 
       base64_stream = dav_svn__make_base64_output_stream(frb->bb, frb->output,
                                                          pool);
-      svn_txdelta_to_svndiff2(&frb->window_handler, &frb->window_baton,
-                              base64_stream, frb->svndiff_version, pool);
+      svn_txdelta_to_svndiff3(&frb->window_handler, &frb->window_baton,
+                              base64_stream, frb->svndiff_version,
+                              dav_svn__get_compression_level(), pool);
       *window_handler = delta_window_handler;
       *window_baton = frb;
       /* Start the txdelta element wich will be terminated by the window

Modified: subversion/branches/integrate-compression-level/subversion/mod_dav_svn/reports/replay.c
URL: http://svn.apache.org/viewvc/subversion/branches/integrate-compression-level/subversion/mod_dav_svn/reports/replay.c?rev=1072287&r1=1072286&r2=1072287&view=diff
==============================================================================
--- subversion/branches/integrate-compression-level/subversion/mod_dav_svn/reports/replay.c (original)
+++ subversion/branches/integrate-compression-level/subversion/mod_dav_svn/reports/replay.c Sat Feb 19 09:51:28 2011
@@ -320,12 +320,13 @@ apply_textdelta(void *file_baton,
   else
     SVN_ERR(dav_svn__brigade_puts(eb->bb, eb->output, ">"));
 
-  svn_txdelta_to_svndiff2(handler,
+  svn_txdelta_to_svndiff3(handler,
                           handler_baton,
                           dav_svn__make_base64_output_stream(eb->bb,
                                                              eb->output,
                                                              pool),
                           0,
+                          dav_svn__get_compression_level(),
                           pool);
 
   eb->sending_textdelta = TRUE;

Modified: subversion/branches/integrate-compression-level/subversion/mod_dav_svn/reports/update.c
URL: http://svn.apache.org/viewvc/subversion/branches/integrate-compression-level/subversion/mod_dav_svn/reports/update.c?rev=1072287&r1=1072286&r2=1072287&view=diff
==============================================================================
--- subversion/branches/integrate-compression-level/subversion/mod_dav_svn/reports/update.c (original)
+++ subversion/branches/integrate-compression-level/subversion/mod_dav_svn/reports/update.c Sat Feb 19 09:51:28 2011
@@ -779,9 +779,9 @@ upd_apply_textdelta(void *file_baton,
                                                      wb->uc->output,
                                                      file->pool);
 
-  svn_txdelta_to_svndiff2(&(wb->handler), &(wb->handler_baton),
+  svn_txdelta_to_svndiff3(&(wb->handler), &(wb->handler_baton),
                           base64_stream, file->uc->svndiff_version,
-                          file->pool);
+                          dav_svn__get_compression_level(), file->pool);
 
   *handler = window_handler;
   *handler_baton = wb;

Modified: subversion/branches/integrate-compression-level/subversion/mod_dav_svn/repos.c
URL: http://svn.apache.org/viewvc/subversion/branches/integrate-compression-level/subversion/mod_dav_svn/repos.c?rev=1072287&r1=1072286&r2=1072287&view=diff
==============================================================================
--- subversion/branches/integrate-compression-level/subversion/mod_dav_svn/repos.c (original)
+++ subversion/branches/integrate-compression-level/subversion/mod_dav_svn/repos.c Sat Feb 19 09:51:28 2011
@@ -3508,8 +3508,9 @@ deliver(const dav_resource *resource, ap
           svn_stream_set_close(o_stream, close_filter);
 
           /* get a handler/baton for writing into the output stream */
-          svn_txdelta_to_svndiff2(&handler, &h_baton,
+          svn_txdelta_to_svndiff3(&handler, &h_baton,
                                   o_stream, resource->info->svndiff_version,
+                                  dav_svn__get_compression_level(),
                                   resource->pool);
 
           /* got everything set up. read in delta windows and shove them into