Evgeny Kotkov <kot...@apache.org> writes:

> +     -0.5: kotkov (could not reproduce the improvement with a real-world 1.9
> +                   server; see my e-mail to <dev@subversion.apache.org>)

I regret to say that I failed to reproduce the improvement with a deployed
server and a couple of real-world repositories.

After setting up a D-series Microsoft Azure virtual machine [1] with
Apache 2.2.29, Subversion 1.9.x and simplest httpd.conf content, I tried to
reproduce the lag by just running 'svn log' for both http:// URIs and working
copies.  I couldn't tell the difference by eye, so, I cooked up a dirty patch
for the command-line client that measures the time between svn_client_log5()
call and the print call for the first log entry.

Then, I repeated my tests against the patched and the non-patched 1.9.x
servers.  The results are attached, and they do not show any noticeable
difference.  Does anybody have a strict reproduction script with a 1.9.x
server that shows the practical benefit from this patch?

Thanks in advance.

[1] http://azure.microsoft.com/en-us/pricing/details/virtual-machines/


Regards,
Evgeny Kotkov
svn log http://server.com/fsfs6-freebsd
613 ms

svn log http://server.com/fsfs7-freebsd
513 ms

svn log http://server.com/fsfs6-freebsd --xml --with-no-revprops
519 ms

svn log http://server.com/fsfs7-freebsd --xml --with-no-revprops
524 ms

svn log http://server.com/fsfs6-freebsd --limit 1
532 ms

svn log http://server.com/fsfs7-freebsd --limit 1
548 ms

svn log http://server.com/fsfs6-freebsd --xml --with-no-revprops --limit 1
526 ms

svn log http://server.com/fsfs7-freebsd --xml --with-no-revprops --limit 1
524 ms

svn log http://server.com/fsfs6-serf/trunk
506 ms

svn log http://server.com/fsfs7-serf/trunk
516 ms

svn log http://server.com/fsfs6-serf/trunk --xml --with-no-revprops
518 ms

svn log http://server.com/fsfs7-serf/trunk --xml --with-no-revprops
539 ms

svn log http://server.com/fsfs6-serf/trunk --limit 1
508 ms

svn log http://server.com/fsfs7-serf/trunk --limit 1
532 ms

svn log http://server.com/fsfs6-serf/trunk --xml --with-no-revprops --limit 1
497 ms

svn log http://server.com/fsfs7-serf/trunk --xml --with-no-revprops --limit 1
492 ms

svn log fsfs6-serf-wc
305 ms

svn log fsfs7-serf-wc
297 ms

svn log fsfs6-serf-wc --xml --with-no-revprops
306 ms

svn log fsfs7-serf-wc --xml --with-no-revprops
289 ms

svn log fsfs6-serf-wc --limit 1
293 ms

svn log fsfs7-serf-wc --limit 1
294 ms

svn log fsfs6-serf-wc --xml --with-no-revprops --limit 1
291 ms

svn log fsfs7-serf-wc --xml --with-no-revprops --limit 1
301 ms
svn log http://server.com/fsfs6-freebsd
569 ms

svn log http://server.com/fsfs7-freebsd
495 ms

svn log http://server.com/fsfs6-freebsd --xml --with-no-revprops
517 ms

svn log http://server.com/fsfs7-freebsd --xml --with-no-revprops
497 ms

svn log http://server.com/fsfs6-freebsd --limit 1
476 ms

svn log http://server.com/fsfs7-freebsd --limit 1
478 ms

svn log http://server.com/fsfs6-freebsd --xml --with-no-revprops --limit 1
508 ms

svn log http://server.com/fsfs7-freebsd --xml --with-no-revprops --limit 1
493 ms

svn log http://server.com/fsfs6-serf/trunk
501 ms

svn log http://server.com/fsfs7-serf/trunk
549 ms

svn log http://server.com/fsfs6-serf/trunk --xml --with-no-revprops
526 ms

svn log http://server.com/fsfs7-serf/trunk --xml --with-no-revprops
492 ms

svn log http://server.com/fsfs6-serf/trunk --limit 1
508 ms

svn log http://server.com/fsfs7-serf/trunk --limit 1
523 ms

svn log http://server.com/fsfs6-serf/trunk --xml --with-no-revprops --limit 1
507 ms

svn log http://server.com/fsfs7-serf/trunk --xml --with-no-revprops --limit 1
512 ms

svn log fsfs6-serf-wc
312 ms

svn log fsfs7-serf-wc
282 ms

svn log fsfs6-serf-wc --xml --with-no-revprops
296 ms

svn log fsfs7-serf-wc --xml --with-no-revprops
301 ms

svn log fsfs6-serf-wc --limit 1
286 ms

svn log fsfs7-serf-wc --limit 1
306 ms

svn log fsfs6-serf-wc --xml --with-no-revprops --limit 1
291 ms

svn log fsfs7-serf-wc --xml --with-no-revprops --limit 1
289 ms
  Listen 80
  LoadModule dav_module bin/mod_dav.so
  LoadModule dav_svn_module bin/mod_dav_svn.so

  <Location />
    DAV svn
    SVNParentPath C:/Repositories
  </Location>
Index: subversion/svn/log-cmd.c
===================================================================
--- subversion/svn/log-cmd.c    (revision 1673891)
+++ subversion/svn/log-cmd.c    (working copy)
@@ -47,6 +47,7 @@
 
 /*** Code. ***/
 
+static apr_time_t LOG_BEGIN_TIME;
 
 
 /* Display a diff of the subtree TARGET_PATH_OR_URL@TARGET_PEG_REVISION as
@@ -297,6 +298,7 @@ svn_cl__log_entry_receiver(void *baton,
   const char *author;
   const char *date;
   const char *message;
+  int time;
 
   if (lb->ctx->cancel_func)
     SVN_ERR(lb->ctx->cancel_func(lb->ctx->cancel_baton));
@@ -344,6 +346,12 @@ svn_cl__log_entry_receiver(void *baton,
       return SVN_NO_ERROR;
     }
 
+  time = apr_time_msec(apr_time_now() - LOG_BEGIN_TIME);
+
+  SVN_ERR(svn_cmdline_printf(pool, "%d ms\n", time));
+
+  return svn_error_create(APR_EGENERAL, NULL, NULL);
+
   SVN_ERR(svn_cmdline_printf(pool,
                              SVN_CL__LOG_SEP_STRING "r%ld | %s | %s",
                              log_entry->revision, author, date));
@@ -513,6 +521,7 @@ svn_cl__log_entry_receiver_xml(void *baton,
   const char *author;
   const char *date;
   const char *message;
+  int time;
 
   if (lb->ctx->cancel_func)
     SVN_ERR(lb->ctx->cancel_func(lb->ctx->cancel_baton));
@@ -672,7 +681,11 @@ svn_cl__log_entry_receiver_xml(void *baton,
   else
     svn_xml_make_close_tag(&sb, pool, "logentry");
 
-  return svn_cl__error_checked_fputs(sb->data, stdout);
+  time = apr_time_msec(apr_time_now() - LOG_BEGIN_TIME);
+
+  SVN_ERR(svn_cmdline_printf(pool, "%d ms\n", time));
+
+  return svn_error_create(APR_EGENERAL, NULL, NULL);
 }
 
 
@@ -839,6 +852,9 @@ svn_cl__log(apr_getopt_t *os,
           if (!opt_state->quiet)
             APR_ARRAY_PUSH(revprops, const char *) = SVN_PROP_REVISION_LOG;
         }
+
+      LOG_BEGIN_TIME = apr_time_now();
+
       SVN_ERR(svn_client_log5(targets,
                               &lb.target_peg_revision,
                               opt_state->revision_ranges,
@@ -862,6 +878,9 @@ svn_cl__log(apr_getopt_t *os,
       APR_ARRAY_PUSH(revprops, const char *) = SVN_PROP_REVISION_DATE;
       if (!opt_state->quiet)
         APR_ARRAY_PUSH(revprops, const char *) = SVN_PROP_REVISION_LOG;
+
+      LOG_BEGIN_TIME = apr_time_now();
+
       SVN_ERR(svn_client_log5(targets,
                               &lb.target_peg_revision,
                               opt_state->revision_ranges,

Reply via email to