Issue triage: issues 3429 and 3474

2010-11-08 Thread Johan Corveleyn
Hi,

I recently verified that the following two issues are fixed on trunk:

- #3429: svn mv A B; svn mv B A generates replace without history

- #3474: making a new subdir, moving files into it and then renaming
the subdir, breaks history of the moved files

Should I mark these as fixed in the issue tracker, or will someone
else do that, after double-checking my findings?

Or, maybe the best approach: I could add a regression test for these
issues, so we can all be sure that they are fixed (and remain fixed),
after which they can be marked as fixed.

I have not written a test for Subversion before, but I guess I should
be able to manage after reading the relevant section from the
community guide, and the subversion/tests/README and
subversion/tests/cmdline/README it references. Any other pointers or
tips are welcome of course :-).

Cheers,
-- 
Johan


Re: Issue triage: issues 3429 and 3474

2010-11-08 Thread Philip Martin
Johan Corveleyn jcor...@gmail.com writes:

 Or, maybe the best approach: I could add a regression test for these
 issues, so we can all be sure that they are fixed (and remain fixed),
 after which they can be marked as fixed.

Yes, please.  Are there any existing XFAIL tests that apply?  They
sometimes don't XPASS automatically when the bug is fixed because the
test expectation is wrong.

 I have not written a test for Subversion before, but I guess I should
 be able to manage after reading the relevant section from the
 community guide, and the subversion/tests/README and
 subversion/tests/cmdline/README it references. Any other pointers or
 tips are welcome of course :-).

It's probably easiest to look at some of the recently added tests.
Julian added some in r1031411, I added some in r1027031.

-- 
Philip


[PATCH] svn-dev.el - Update paths and links

2010-11-08 Thread Noorul Islam K M

Log 

[[[

Update paths and links

* tools/dev/svn-dev.el
  (svn-site-source-tree-top): Rename svn-source-tree-top as
  svn-site-source-tree-top as now the web site code resides in a
  separate location. Update doc string.
  (svn-faq-file, svn-faq-file, svn-url-base, svn-hacking-url): Update
  location

]]]

Thanks and Regards
Noorul

Index: tools/dev/svn-dev.el
===
--- tools/dev/svn-dev.el(revision 1032461)
+++ tools/dev/svn-dev.el(working copy)
@@ -152,15 +152,18 @@
 ;;; Net if you don't have a local copy, but it requires a very recent
 ;;; version of Emacs, so I didn't bother with it here.  -kfogel)
 
-(defvar svn-source-tree-top (expand-file-name ~/projects/svn/)
-  *Top directory of your Subversion source tree.  You almost
-certainly want to set this in your .emacs, to override the default;
-use `(setq svn-source-tree-top \/path/to/the/tree\)'.)
+(defvar svn-site-source-tree-top (expand-file-name ~/projects/svn/site/)
+  *Top directory of your Subversion site source tree of
+repository \http://svn.apache.org/repos/asf/subversion/site\;.
+You almost certainly want to set this in your .emacs, to override
+the default; use `(setq svn-site-source-tree-top
+\/path/to/the/site/tree\)'.)
 
-(defvar svn-faq-file (concat svn-source-tree-top /www/faq.html)
+(defvar svn-faq-file (concat svn-site-source-tree-top /publish/faq.html)
   *A local copy of the Subversion FAQ.)
 
-(defvar svn-hacking-file (concat svn-source-tree-top /www/hacking.html)
+(defvar svn-hacking-file (concat svn-site-source-tree-top 
+ /docs/community-guide/community-guide.html)
   *A local copy of the Subversion hacking.html file.)
 
 ;; Helper for referring to issue numbers in a user-friendly way.
@@ -188,11 +191,13 @@
  (start (car bounds))
  (end   (cdr bounds)))
 (delete-region start end)))
-  (insert (format http://svn.collab.net/viewcvs/svn?rev=%sview=rev; rev)))
+  (insert (format http://svn.apache.org/viewcvs?view=revisionrevision=%s; 
+  rev)))
 
-(defconst svn-url-base http://subversion.tigris.org/;)
+(defconst svn-url-base http://subversion.apache.org/;)
 (defconst svn-faq-url (concat svn-url-base faq.html))
-(defconst svn-hacking-url (concat svn-url-base hacking.html))
+(defconst svn-hacking-url (concat svn-url-base 
+  docs/community-guide/community-guide.html))
 
 (defun svn-html-get-targets (file)
   Build a list of targets for the Subversion web file FILE.


Re: [PATCH] error leak on performance branch

2010-11-08 Thread Hyrum K. Wright
On Sun, Nov 7, 2010 at 11:58 AM, Stefan Sperling s...@elego.de wrote:
 [[[
 * subversion/libsvn_fs_util/caching.c
  (svn_fs__get_global_membuffer_cache): Fix a possible error leak.
 ]]]

 Index: subversion/libsvn_fs_util/caching.c
 ===
 --- subversion/libsvn_fs_util/caching.c (revision 1032308)
 +++ subversion/libsvn_fs_util/caching.c (working copy)
 @@ -62,6 +62,7 @@ svn_fs__get_global_membuffer_cache(void)
       /* auto-allocate cache*/
       apr_allocator_t *allocator = NULL;
       apr_pool_t *pool = NULL;
 +      svn_error_t *err;

       if (apr_allocator_create(allocator))
         return NULL;
 @@ -75,12 +76,17 @@ svn_fs__get_global_membuffer_cache(void)
       apr_allocator_max_free_set(allocator, 1);
       pool = svn_pool_create_ex(NULL, allocator);

 -      svn_cache__membuffer_cache_create
 -          (cache,
 -           (apr_size_t)cache_size,
 -           (apr_size_t)(cache_size / 16),
 -           ! svn_fs_get_cache_config()-single_threaded,
 -           pool);

If we're choosing to ignore the error above, you can just wrap the
entire call in an svn_error_clear().  No need to introduce and check a
temp variable.

 +      err = svn_cache__membuffer_cache_create
 +              (cache,
 +               (apr_size_t)cache_size,
 +               (apr_size_t)(cache_size / 16),
 +               ! svn_fs_get_cache_config()-single_threaded,
 +               pool);
 +      if (err)
 +        {
 +          svn_error_clear(err);
 +          return NULL;
 +        }

Does this early return actually change functionality?  If so, this
patch is about more than just fixing an error leak...

     }

   return cache;



Re: [PATCH] mailer.py : Use python difflib.unified_diff instead of *nix diff command

2010-11-08 Thread Kamesh Jayachandran

On 11/05/2010 09:45 PM, Noorul Islam K M wrote:

[[[

If diff command does not exist on the system then use
difflib.unified_diff() to generate diff contents.

* tools/hook-scripts/mailer/mailer.py: Fall back to
   difflib.unified_diff() if the script fails to execute native 'diff'
   command.

Patch by: Noorul Islam K Mnoorul{_AT_}collab.net
Suggested by: Kamesh Jayachandrankamesh{_AT_}collab.net

]]]

Thanks for the patch Noorul.

I could not *see* the difference in the output. I tried with few file 
mod commit mails both via external diff and difflib.


I committed this patch with small refactoring at r1032568.

With regards
Kamesh Jayachandran


Re: svn blame -g causing svnserve to hang mem usage to hit 2GB

2010-11-08 Thread Paul Burba
On Thu, Nov 4, 2010 at 8:59 PM, Chris Tashjian ct...@thepond.com wrote:
 I posted this on the users list, but I'm confident that this is a bug.

 Background:
 For a while now (off and on for over a year, but more frequently in the last
 6+ months) we've been having problems with svn crashing, yet there's no
 error in the log file.  In talking to someone the users list it sounds like
 svn is actually just hanging.  Clients get the following response:

   svn: Can't connect to host 'svn': No connection could be made
   because the target machine actively refused it.

 Our repository has 129K revisions.  The format is 4 layout linear, it was
 created with svnadmin 1.4.x and has since had svnadmin upgrade run both in
 1.5 and 1.6.  We're currently running SlikSVN 1.6.13 (Win32), but I have
 previously had this problem dating back to versions of 1.5, both stock and
 from CollabNet.  The issue now happens numerous times per day and it looks
 like I've discovered why


 As a test I ran svn blame -g on a file with a bunch of revisions and
 watched memory usage on the server spin up to 2GB.

Chris,

By a bunch of revisions what exactly do you mean?  Many revisions
which were the result of a merge?  Or simply many changes made
directly to the file (not the result of a merge)?

 Paul - I'll see if I can get a test repo up with the error.  In the
 meantime, would a copy of the svn:mergeinfo help?

Any luck?  I should have asked this out of the gate (though I'm sure I
know the answer): Is your repos public?  Obviously the most direct
route to replicating this would be with a copy of your actual data :-)

Paul


[PATCH] To improve the documentation of svn_path.h

2010-11-08 Thread Arwin Arni

Hi All,

I am a new-comer to the Subversion code-base. I was looking at some of the
header files (svn_path.h) and wanted to use some of the functions
(svn_path_join()) and noticed that they were deprecated. I thought it
would be nice to have a link to the deprecating functions as a part of
the documentation. Hence this patch.
The log message and patch are as follows.

[[[
Improved the documentation of deprecated functions by providing links
to the deprecating functions.

* subversion/include/svn_path.h
  (svn_path_internal_style, svn_path_local_style,
   svn_path_join, svn_path_join_many,
   svn_path_basename, svn_path_dirname,
   svn_path_split, svn_path_canonicalize,
   svn_path_is_canonical, svn_path_get_longest_ancestor,
   svn_path_get_absolute, svn_path_split,
   svn_path_condense_targets, svn_path_is_child,
   svn_path_is_ancestor, svn_path_split_if_file,
   svn_path_url_add_component)

Patch by: Arwin Arni arwin_at_collab.net
]]]

Index: subversion/include/svn_path.h
===
--- subversion/include/svn_path.h(revision 1032465)
+++ subversion/include/svn_path.h(working copy)
@@ -64,6 +64,10 @@
 

 /** Convert @a path from the local style to the canonical internal style.
+ *
+ * New code should use either svn_dirent_internal_style() (for local 
paths) or

+ * svn_relpath_internal_style() (for relative paths).
+ *
  * @deprecated Provided for backward compatibility with the 1.6 API.
  */
 SVN_DEPRECATED
@@ -71,6 +75,10 @@
 svn_path_internal_style(const char *path, apr_pool_t *pool);

 /** Convert @a path from the canonical internal style to the local style.
+ *
+ * New code should use either svn_dirent_local_style() (for local paths) or
+ * svn_relpath_local_style() (for relative paths).
+ *
  * @deprecated Provided for backward compatibility with the 1.6 API.
  */
 SVN_DEPRECATED
@@ -101,6 +109,9 @@
  * @a component won't be detected. An absolute URI can only be used
  * for the base.
  *
+ * New code should use either svn_dirent_join() (for local paths) or
+ * svn_uri_join() (for urls) or svn_relpath_join() (for relative paths).
+ *
  * @deprecated Provided for backward compatibility with the 1.6 API.
  */
 SVN_DEPRECATED
@@ -118,7 +129,9 @@
  * This function does not support URLs.
  *
  * See svn_path_join() for further notes about joining paths.
- *
+ *
+ * New code should use svn_dirent_join_many() instead.
+ *
  * @deprecated Provided for backward compatibility with the 1.6 API.
  */
 SVN_DEPRECATED
@@ -139,7 +152,7 @@
  * @note If an empty string is passed, then an empty string will be 
returned.

  *
  * New code should use either svn_dirent_basename() (for local paths) or
- * svn_uri_basename() (for urls and repository paths).
+ * svn_uri_basename() (for urls) or svn_relpath_basename (for relative 
paths).

  *
  * @deprecated Provided for backward compatibility with the 1.6 API.
  */
@@ -154,7 +167,7 @@
  * The returned dirname will be allocated in @a pool.
  *
  * New code should use either svn_dirent_dirname() (for local paths) or
- * svn_uri_dirname() (for urls and repository paths).
+ * svn_uri_dirname() (for urls) or svn_relpath_dirname() (for relative 
paths).

  *
  * @deprecated Provided for backward compatibility with the 1.6 API.
  */
@@ -227,7 +240,7 @@
  * - pre  == and /pre
  *
  * New code should use either svn_dirent_split() (for local paths) or
- * svn_uri_split() (for urls and repository paths).
+ * svn_uri_split() (for urls) or svn_relpath_split() (for relative paths).
  *
  * @deprecated Provided for backward compatibility with the 1.6 API.
  */
@@ -266,6 +279,10 @@
  * The returned path may be statically allocated, equal to @a path, or
  * allocated from @a pool.
  *
+ * New code should use either svn_dirent_canonicalize() (for local 
paths) or

+ * svn_uri_canonicalize() (for urls) or svn_relpath_canonicalize() (for
+ * relative paths).
+ *
  * @deprecated Provided for backward compatibility with the 1.6 API.
  */
 SVN_DEPRECATED
@@ -275,6 +292,10 @@
 /** Return @c TRUE iff path is canonical. Use @a pool for temporary
  * allocations.
  *
+ * New code should use either svn_dirent_is_canonical() (for local 
paths) or

+ * svn_uri_is_canonical() (for urls) or svn_relpath_is_canonical() (for
+ * relative paths).
+ *
  * @since New in 1.5.
  * @deprecated Provided for backward compatibility with the 1.6 API.
  */
@@ -300,6 +321,10 @@
  * different resources), and (b) share a common ancestor in their path
  * component, i.e. 'protocol://' is not a sufficient ancestor.
  *
+ * New code should use either svn_dirent_get_longest_ancestor()
+ * (for local paths) or svn_uri_get_longest_ancestor() (for urls)
+ * or svn_relpath_get_longest_ancestor() (for relative paths).
+ *
  * @deprecated Provided for backward compatibility with the 1.6 API.
  */
 SVN_DEPRECATED
@@ -314,6 +339,8 @@
  * @a relative may be a URL, in which case no attempt is made to 
convert it,

  * and a copy of the 

Re: [PATCH] To improve the documentation of svn_path.h

2010-11-08 Thread Arwin Arni

On Monday 08 November 2010 07:57 PM, Arwin Arni wrote:

Hi All,

I am a new-comer to the Subversion code-base. I was looking at some of the
header files (svn_path.h) and wanted to use some of the functions
(svn_path_join()) and noticed that they were deprecated. I thought it
would be nice to have a link to the deprecating functions as a part of
the documentation. Hence this patch.
The log message and patch are as follows.

[[[
Improved the documentation of deprecated functions by providing links
to the deprecating functions.

* subversion/include/svn_path.h
  (svn_path_internal_style, svn_path_local_style,
   svn_path_join, svn_path_join_many,
   svn_path_basename, svn_path_dirname,
   svn_path_split, svn_path_canonicalize,
   svn_path_is_canonical, svn_path_get_longest_ancestor,
   svn_path_get_absolute, svn_path_split,
   svn_path_condense_targets, svn_path_is_child,
   svn_path_is_ancestor, svn_path_split_if_file,
   svn_path_url_add_component)

Patch by: Arwin Arni arwin_at_collab.net
]]]

Index: subversion/include/svn_path.h
===
--- subversion/include/svn_path.h(revision 1032465)
+++ subversion/include/svn_path.h(working copy)
@@ -64,6 +64,10 @@
 

 /** Convert @a path from the local style to the canonical internal style.
+ *
+ * New code should use either svn_dirent_internal_style() (for local 
paths) or

+ * svn_relpath_internal_style() (for relative paths).
+ *
  * @deprecated Provided for backward compatibility with the 1.6 API.
  */
 SVN_DEPRECATED
@@ -71,6 +75,10 @@
 svn_path_internal_style(const char *path, apr_pool_t *pool);

 /** Convert @a path from the canonical internal style to the local style.
+ *
+ * New code should use either svn_dirent_local_style() (for local 
paths) or

+ * svn_relpath_local_style() (for relative paths).
+ *
  * @deprecated Provided for backward compatibility with the 1.6 API.
  */
 SVN_DEPRECATED
@@ -101,6 +109,9 @@
  * @a component won't be detected. An absolute URI can only be used
  * for the base.
  *
+ * New code should use either svn_dirent_join() (for local paths) or
+ * svn_uri_join() (for urls) or svn_relpath_join() (for relative paths).
+ *
  * @deprecated Provided for backward compatibility with the 1.6 API.
  */
 SVN_DEPRECATED
@@ -118,7 +129,9 @@
  * This function does not support URLs.
  *
  * See svn_path_join() for further notes about joining paths.
- *
+ *
+ * New code should use svn_dirent_join_many() instead.
+ *
  * @deprecated Provided for backward compatibility with the 1.6 API.
  */
 SVN_DEPRECATED
@@ -139,7 +152,7 @@
  * @note If an empty string is passed, then an empty string will be 
returned.

  *
  * New code should use either svn_dirent_basename() (for local paths) or
- * svn_uri_basename() (for urls and repository paths).
+ * svn_uri_basename() (for urls) or svn_relpath_basename (for 
relative paths).

  *
  * @deprecated Provided for backward compatibility with the 1.6 API.
  */
@@ -154,7 +167,7 @@
  * The returned dirname will be allocated in @a pool.
  *
  * New code should use either svn_dirent_dirname() (for local paths) or
- * svn_uri_dirname() (for urls and repository paths).
+ * svn_uri_dirname() (for urls) or svn_relpath_dirname() (for 
relative paths).

  *
  * @deprecated Provided for backward compatibility with the 1.6 API.
  */
@@ -227,7 +240,7 @@
  * - pre  == and /pre
  *
  * New code should use either svn_dirent_split() (for local paths) or
- * svn_uri_split() (for urls and repository paths).
+ * svn_uri_split() (for urls) or svn_relpath_split() (for relative 
paths).

  *
  * @deprecated Provided for backward compatibility with the 1.6 API.
  */
@@ -266,6 +279,10 @@
  * The returned path may be statically allocated, equal to @a path, or
  * allocated from @a pool.
  *
+ * New code should use either svn_dirent_canonicalize() (for local 
paths) or

+ * svn_uri_canonicalize() (for urls) or svn_relpath_canonicalize() (for
+ * relative paths).
+ *
  * @deprecated Provided for backward compatibility with the 1.6 API.
  */
 SVN_DEPRECATED
@@ -275,6 +292,10 @@
 /** Return @c TRUE iff path is canonical. Use @a pool for temporary
  * allocations.
  *
+ * New code should use either svn_dirent_is_canonical() (for local 
paths) or

+ * svn_uri_is_canonical() (for urls) or svn_relpath_is_canonical() (for
+ * relative paths).
+ *
  * @since New in 1.5.
  * @deprecated Provided for backward compatibility with the 1.6 API.
  */
@@ -300,6 +321,10 @@
  * different resources), and (b) share a common ancestor in their path
  * component, i.e. 'protocol://' is not a sufficient ancestor.
  *
+ * New code should use either svn_dirent_get_longest_ancestor()
+ * (for local paths) or svn_uri_get_longest_ancestor() (for urls)
+ * or svn_relpath_get_longest_ancestor() (for relative paths).
+ *
  * @deprecated Provided for backward compatibility with the 1.6 API.
  */
 SVN_DEPRECATED
@@ -314,6 +339,8 @@
  * @a relative may be a URL, in which case 

Re: svn blame -g causing svnserve to hang mem usage to hit 2GB

2010-11-08 Thread Paul Burba
On Mon, Nov 8, 2010 at 9:13 AM, Paul Burba ptbu...@gmail.com wrote:
 On Thu, Nov 4, 2010 at 8:59 PM, Chris Tashjian ct...@thepond.com wrote:
 I posted this on the users list, but I'm confident that this is a bug.

 Background:
 For a while now (off and on for over a year, but more frequently in the last
 6+ months) we've been having problems with svn crashing, yet there's no
 error in the log file.  In talking to someone the users list it sounds like
 svn is actually just hanging.  Clients get the following response:

   svn: Can't connect to host 'svn': No connection could be made
   because the target machine actively refused it.

 Our repository has 129K revisions.  The format is 4 layout linear, it was
 created with svnadmin 1.4.x and has since had svnadmin upgrade run both in
 1.5 and 1.6.  We're currently running SlikSVN 1.6.13 (Win32), but I have
 previously had this problem dating back to versions of 1.5, both stock and
 from CollabNet.  The issue now happens numerous times per day and it looks
 like I've discovered why


 As a test I ran svn blame -g on a file with a bunch of revisions and
 watched memory usage on the server spin up to 2GB.

 Chris,

 By a bunch of revisions what exactly do you mean?  Many revisions
 which were the result of a merge?  Or simply many changes made
 directly to the file (not the result of a merge)?

 Paul - I'll see if I can get a test repo up with the error.  In the
 meantime, would a copy of the svn:mergeinfo help?

 Any luck?

Chris,

Don't sweat the replication effort too much, I think I'm on the trail
of this problem.  Using a copy of the old (pre-ASF) Subversion
repository I'm seeing unexpectedly high memory use when using log -g
on a file with a lot of merge history:

1.6.13.clientsvn blame ^/trunk/subversion/tests/cmdline/merge_tests.py
25 MB Peak Working Set Memory svnserve.exe

1.6.13.clientsvn blame ^/trunk/subversion/tests/cmdline/merge_tests.py -g
291 MB Peak Working Set Memory svnserve.exe

More soon...

Paul


RE: How to get the message out (or: why there were only 6 people at the ApacheCon meetup)

2010-11-08 Thread Bolstridge, Andrew

 -Original Message-
 From: hy...@hyrumwright.org [mailto:hy...@hyrumwright.org] On Behalf
Of Hyrum K. Wright
 Sent: 07 November 2010 02:34
 To: Subversion Development
 Subject: How to get the message out (or: why there were only 6 people
at the ApacheCon meetup)

[snip]

 My question: do we need to do this?  Is there a niche that isn't being
filled by the various corporate sponsors, which we
 (as a Subversion development community) are better served to do?  Do
people already know enough about 
 Subversion, such that we don't need to evangelize anymore?

I'm sure evangelical missions are still important - mainly to counter
the SVN is crap at merging, Mercurial/Git/a.n.otherDVCS is the ultimate
SCM that fixes all your problems type arguments that seems to be
increasingly popular. Even our Serena dimensions admin (terrible
'enterprisey' ALM SCM) knows about git but doesn't know what SVN'd give
him.

So, I'd say there are still loads of poor souls needing the word
bringing to them, and the FUD dispelling.





Re: [PATCH] To improve the documentation of svn_path.h

2010-11-08 Thread Kamesh Jayachandran



[[[
Improved the documentation of deprecated functions by providing links
to the deprecating functions.

* subversion/include/svn_path.h
  (svn_path_internal_style, svn_path_local_style,
   svn_path_join, svn_path_join_many,
   svn_path_basename, svn_path_dirname,
   svn_path_split, svn_path_canonicalize,
   svn_path_is_canonical, svn_path_get_longest_ancestor,
   svn_path_get_absolute, svn_path_split,
   svn_path_condense_targets, svn_path_is_child,
   svn_path_is_ancestor, svn_path_split_if_file,


Thanks Arwin for the patch 'svn_path_split_if_file' is deprectated but 
svn_{uri|dirent|relpath}_split do not seem like its deprecating 
function. So removed that portion from your patch.


Committed the patch at r1032610.

With regards
Kamesh Jayachandran



   svn_path_url_add_component)





[PATCH] Fix Windows test failures - Python test suite bug in quoting a trailing backslash

2010-11-08 Thread Julian Foad
Here's a patch to fix the Windows buildbot failures that started at my
r1031610.  The problem is our _quote_arg() function doesn't do the right
thing with a trailing backslash.  For a solution it seems better to
simply pass the args separately to subprocess.Popen() and let it do the
quoting, than to try to fix and maintain our own quoting function.  And
we can use the undocumented subprocess.list2cmdline() function for
generating a command-line string for display purposes.  (We could also
use that for generating a single-string argument to Popen, but we don't
need to because it does it for us if we pass a list of arguments.)

I tested this in a WinXP VM, and it seemed to work properly with Python
2.4.1 and 2.4.3 and 2.7.  (I ran 1.7-trunk's prop_tests.py 7 against an
installed svn 1.6.13, and it passed.)

[[[
Fix Windows command-line argument quoting in the Python test harness.
Arguments ending with a backslash were not correctly quoted.
This reverts r875257.

* subversion/tests/cmdline/svntest/main.py
  (_safe_arg_re, _quote_arg): Delete, as this didn't quote properly.
  (open_pipe): Pass the list of arguments directly to subprocess.Popen()
instead of trying to quote it ourselves. Use subprocess.list2cmdline()
to generate a command line for display.
  (spawn_process): Use subprocess.list2cmdline() instead of _quote_arg()
to generate a command line for display.
]]]

It reverts Paul's r875257, which was:

[[[
Fix test suite's use of subprocess on earlier versions of Python and thus
fix the djh-xp-vse2005 buildbot.

* subversion/tests/cmdline/svntest/main.py
  (open_pipe2): Quote arguments to subprocess.Popen().  Later versions of
  subprocess (2.5.2+ that I know of for sure) don't require this quoting, but
  versions  2.4.3 do.
]]]

I was unable to see exactly what the problem was that r875257 fixed.  I
would like to be able to say why it's OK to revert it, but I don't yet
know.

Can Paul or anyone comment or test or review?

Or shall I just commit this current patch and see if anyone has
problems?

- Julian




Re: [PATCH] Fix Windows test failures - Python test suite bug in quoting a trailing backslash

2010-11-08 Thread Julian Foad
Now with the patch attached.

And here's the email thread about the original change r875257 (aka
r35183): http://svn.haxx.se/dev/archive-2009-01/0316.shtml.

On Mon, 2010-11-08 at 16:20 +, Julian Foad wrote:
 Here's a patch to fix the Windows buildbot failures that started at my
 r1031610.  The problem is our _quote_arg() function doesn't do the right
 thing with a trailing backslash.  For a solution it seems better to
 simply pass the args separately to subprocess.Popen() and let it do the
 quoting, than to try to fix and maintain our own quoting function.  And
 we can use the undocumented subprocess.list2cmdline() function for
 generating a command-line string for display purposes.  (We could also
 use that for generating a single-string argument to Popen, but we don't
 need to because it does it for us if we pass a list of arguments.)
 
 I tested this in a WinXP VM, and it seemed to work properly with Python
 2.4.1 and 2.4.3 and 2.7.  (I ran 1.7-trunk's prop_tests.py 7 against an
 installed svn 1.6.13, and it passed.)
 
 [[[
 Fix Windows command-line argument quoting in the Python test harness.
 Arguments ending with a backslash were not correctly quoted.
 This reverts r875257.
 
 * subversion/tests/cmdline/svntest/main.py
   (_safe_arg_re, _quote_arg): Delete, as this didn't quote properly.
   (open_pipe): Pass the list of arguments directly to subprocess.Popen()
 instead of trying to quote it ourselves. Use subprocess.list2cmdline()
 to generate a command line for display.
   (spawn_process): Use subprocess.list2cmdline() instead of _quote_arg()
 to generate a command line for display.
 ]]]
 
 It reverts Paul's r875257, which was:
 
 [[[
 Fix test suite's use of subprocess on earlier versions of Python and thus
 fix the djh-xp-vse2005 buildbot.
 
 * subversion/tests/cmdline/svntest/main.py
   (open_pipe2): Quote arguments to subprocess.Popen().  Later versions of
   subprocess (2.5.2+ that I know of for sure) don't require this quoting, but
   versions  2.4.3 do.
 ]]]
 
 I was unable to see exactly what the problem was that r875257 fixed.  I
 would like to be able to say why it's OK to revert it, but I don't yet
 know.
 
 Can Paul or anyone comment or test or review?
 
 Or shall I just commit this current patch and see if anyone has
 problems?
 
 - Julian

Fix Windows command-line argument quoting in the Python test harness.
Arguments ending with a backslash were not correctly quoted.
This reverts r875257.

* subversion/tests/cmdline/svntest/main.py
  (_safe_arg_re, _quote_arg): Delete, as this didn't quote properly.
  (open_pipe): Pass the list of arguments directly to subprocess.Popen()
instead of trying to quote it ourselves. Use subprocess.list2cmdline()
to generate a command line for display.
  (spawn_process): Use subprocess.list2cmdline() instead of _quote_arg()
to generate a command line for display.
--This line, and those below, will be ignored--

Index: subversion/tests/cmdline/svntest/main.py
===
--- subversion/tests/cmdline/svntest/main.py	(revision 1032502)
+++ subversion/tests/cmdline/svntest/main.py	(working copy)
@@ -332,38 +332,12 @@ def run_command(command, error_expected,
   as lists of lines (including line terminators).  See run_command_stdin()
   for details.  If ERROR_EXPECTED is None, any stderr also will be printed.
 
   return run_command_stdin(command, error_expected, 0, binary_mode,
None, *varargs)
 
-# A regular expression that matches arguments that are trivially safe
-# to pass on a command line without quoting on any supported operating
-# system:
-_safe_arg_re = re.compile(r'^[A-Za-z\d\.\_\/\-\:\...@]+$')
-
-def _quote_arg(arg):
-  Quote ARG for a command line.
-
-  Simply surround every argument in double-quotes unless it contains
-  only universally harmless characters.
-
-  WARNING: This function cannot handle arbitrary command-line
-  arguments.  It can easily be confused by shell metacharacters.  A
-  perfect job would be difficult and OS-dependent (see, for example,
-  http://msdn.microsoft.com/library/en-us/vccelng/htm/progs_12.asp).
-  In other words, this function is just good enough for what we need
-  here.
-
-  arg = str(arg)
-  if _safe_arg_re.match(arg):
-return arg
-  else:
-if os.name != 'nt':
-  arg = arg.replace('$', '\$')
-return '%s' % (arg,)
-
 def open_pipe(command, bufsize=0, stdin=None, stdout=None, stderr=None):
   Opens a subprocess.Popen pipe to COMMAND using STDIN,
   STDOUT, and STDERR.  BUFSIZE is passed to subprocess.Popen's
   argument of the same name.
 
   Returns (infile, outfile, errfile, waiter); waiter
@@ -372,21 +346,13 @@ def open_pipe(command, bufsize=0, stdin=
 
   # On Windows subprocess.Popen() won't accept a Python script as
   # a valid program to execute, rather it wants the Python executable.
   if (sys.platform == 'win32') and (command[0].endswith('.py')):
 command.insert(0, 

Re: [PATCH] error leak on performance branch

2010-11-08 Thread Stefan Sperling
On Mon, Nov 08, 2010 at 06:56:16AM -0600, Hyrum K. Wright wrote:
 On Sun, Nov 7, 2010 at 11:58 AM, Stefan Sperling s...@elego.de wrote:
  [[[
  * subversion/libsvn_fs_util/caching.c
   (svn_fs__get_global_membuffer_cache): Fix a possible error leak.
  ]]]
 
  Index: subversion/libsvn_fs_util/caching.c
  ===
  --- subversion/libsvn_fs_util/caching.c (revision 1032308)
  +++ subversion/libsvn_fs_util/caching.c (working copy)
  @@ -62,6 +62,7 @@ svn_fs__get_global_membuffer_cache(void)
        /* auto-allocate cache*/
        apr_allocator_t *allocator = NULL;
        apr_pool_t *pool = NULL;
  +      svn_error_t *err;
 
        if (apr_allocator_create(allocator))
          return NULL;
  @@ -75,12 +76,17 @@ svn_fs__get_global_membuffer_cache(void)
        apr_allocator_max_free_set(allocator, 1);
        pool = svn_pool_create_ex(NULL, allocator);
 
  -      svn_cache__membuffer_cache_create
  -          (cache,
  -           (apr_size_t)cache_size,
  -           (apr_size_t)(cache_size / 16),
  -           ! svn_fs_get_cache_config()-single_threaded,
  -           pool);
 
 If we're choosing to ignore the error above, you can just wrap the
 entire call in an svn_error_clear().  No need to introduce and check a
 temp variable.

Ah, nice trick. Thanks.

  +      err = svn_cache__membuffer_cache_create
  +              (cache,
  +               (apr_size_t)cache_size,
  +               (apr_size_t)(cache_size / 16),
  +               ! svn_fs_get_cache_config()-single_threaded,
  +               pool);
  +      if (err)
  +        {
  +          svn_error_clear(err);
  +          return NULL;
  +        }
 
 Does this early return actually change functionality?  If so, this
 patch is about more than just fixing an error leak...

It doesn't change functionality.
Cache is NULL in this case, and we return it next:

 
      }
 
    return cache;
 


I'm not sure though if svn_cache__membuffer_cache_create() guarantees
that cache remains NULL in case of error. Maybe this should be
documented as such to allow callers to ignore errors this way.

New patch below, also fixing a space-before-paren and another
similar error leak.

[[[
* subversion/libsvn_fs_util/caching.c
 (svn_fs__get_global_membuffer_cache,
  svn_fs__get_global_file_handle_cache): Fix a possible error leak.
]]]

Index: subversion/libsvn_fs_util/caching.c
===
--- subversion/libsvn_fs_util/caching.c (revision 1032333)
+++ subversion/libsvn_fs_util/caching.c (working copy)
@@ -75,12 +75,12 @@ svn_fs__get_global_membuffer_cache(void)
   apr_allocator_max_free_set(allocator, 1);
   pool = svn_pool_create_ex(NULL, allocator);
 
-  svn_cache__membuffer_cache_create
-  (cache,
-   (apr_size_t)cache_size,
-   (apr_size_t)(cache_size / 16),
-   ! svn_fs_get_cache_config()-single_threaded,
-   pool);
+  svn_error_clear(svn_cache__membuffer_cache_create(
+cache,
+(apr_size_t)cache_size,
+(apr_size_t)(cache_size / 16),
+! svn_fs_get_cache_config()-single_threaded,
+pool));
 }
 
   return cache;
@@ -96,10 +96,10 @@ svn_fs__get_global_file_handle_cache(void)
   static svn_file_handle_cache_t *cache = NULL;
 
   if (!cache)
-svn_file_handle_cache__create_cache(cache,
-cache_settings.file_handle_count,
-!cache_settings.single_threaded,
-svn_pool_create(NULL));
+svn_error_clear(svn_file_handle_cache__create_cache(
+  cache, cache_settings.file_handle_count, 
+  !cache_settings.single_threaded,
+  svn_pool_create(NULL)));
 
   return cache;
 }



Re: [PATCH] Fix Windows test failures - Python test suite bug in quoting a trailing backslash

2010-11-08 Thread Paul Burba
On Mon, Nov 8, 2010 at 11:20 AM, Julian Foad julian.f...@wandisco.com wrote:
 Here's a patch to fix the Windows buildbot failures that started at my
 r1031610.  The problem is our _quote_arg() function doesn't do the right
 thing with a trailing backslash.  For a solution it seems better to
 simply pass the args separately to subprocess.Popen() and let it do the
 quoting, than to try to fix and maintain our own quoting function.  And
 we can use the undocumented subprocess.list2cmdline() function for
 generating a command-line string for display purposes.  (We could also
 use that for generating a single-string argument to Popen, but we don't
 need to because it does it for us if we pass a list of arguments.)

 I tested this in a WinXP VM, and it seemed to work properly with Python
 2.4.1 and 2.4.3 and 2.7.  (I ran 1.7-trunk's prop_tests.py 7 against an
 installed svn 1.6.13, and it passed.)

 [[[
 Fix Windows command-line argument quoting in the Python test harness.
 Arguments ending with a backslash were not correctly quoted.
 This reverts r875257.

 * subversion/tests/cmdline/svntest/main.py
  (_safe_arg_re, _quote_arg): Delete, as this didn't quote properly.
  (open_pipe): Pass the list of arguments directly to subprocess.Popen()
    instead of trying to quote it ourselves. Use subprocess.list2cmdline()
    to generate a command line for display.
  (spawn_process): Use subprocess.list2cmdline() instead of _quote_arg()
    to generate a command line for display.
 ]]]

 It reverts Paul's r875257, which was:

 [[[
 Fix test suite's use of subprocess on earlier versions of Python and thus
 fix the djh-xp-vse2005 buildbot.

 * subversion/tests/cmdline/svntest/main.py
  (open_pipe2): Quote arguments to subprocess.Popen().  Later versions of
  subprocess (2.5.2+ that I know of for sure) don't require this quoting, but
  versions  2.4.3 do.
 ]]]

 I was unable to see exactly what the problem was that r875257 fixed.  I
 would like to be able to say why it's OK to revert it, but I don't yet
 know.

 Can Paul or anyone comment or test or review?

 Or shall I just commit this current patch and see if anyone has
 problems?

Hi Julian,

+1 on commit this current patch and see if anyone has problems.

You've confirmed it works on Windows with 2.4.1, 2.4.3 and 2.7 (and
2.4 is the minimum we claim to support).  I can confirm it works with
2.6.5.

Paul


Re: svn blame -g causing svnserve to hang mem usage to hit 2GB

2010-11-08 Thread Paul Burba
On Mon, Nov 8, 2010 at 10:35 AM, Paul Burba ptbu...@gmail.com wrote:
 On Mon, Nov 8, 2010 at 9:13 AM, Paul Burba ptbu...@gmail.com wrote:
 On Thu, Nov 4, 2010 at 8:59 PM, Chris Tashjian ct...@thepond.com wrote:
 I posted this on the users list, but I'm confident that this is a bug.

 Background:
 For a while now (off and on for over a year, but more frequently in the last
 6+ months) we've been having problems with svn crashing, yet there's no
 error in the log file.  In talking to someone the users list it sounds like
 svn is actually just hanging.  Clients get the following response:

   svn: Can't connect to host 'svn': No connection could be made
   because the target machine actively refused it.

 Our repository has 129K revisions.  The format is 4 layout linear, it was
 created with svnadmin 1.4.x and has since had svnadmin upgrade run both in
 1.5 and 1.6.  We're currently running SlikSVN 1.6.13 (Win32), but I have
 previously had this problem dating back to versions of 1.5, both stock and
 from CollabNet.  The issue now happens numerous times per day and it looks
 like I've discovered why


 As a test I ran svn blame -g on a file with a bunch of revisions and
 watched memory usage on the server spin up to 2GB.

 Chris,

 By a bunch of revisions what exactly do you mean?  Many revisions
 which were the result of a merge?  Or simply many changes made
 directly to the file (not the result of a merge)?

 Paul - I'll see if I can get a test repo up with the error.  In the
 meantime, would a copy of the svn:mergeinfo help?

 Any luck?

 Chris,

 Don't sweat the replication effort too much, I think I'm on the trail
 of this problem.  Using a copy of the old (pre-ASF) Subversion
 repository I'm seeing unexpectedly high memory use when using log -g
 on a file with a lot of merge history:

 1.6.13.clientsvn blame ^/trunk/subversion/tests/cmdline/merge_tests.py
 25 MB Peak Working Set Memory svnserve.exe

 1.6.13.clientsvn blame ^/trunk/subversion/tests/cmdline/merge_tests.py -g
 291 MB Peak Working Set Memory svnserve.exe
   ^^^
That should have been 691 MB!  Sorry!


 More soon...

 Paul



Re: [PATCH] Fix Windows test failures - Python test suite bug in quoting a trailing backslash

2010-11-08 Thread Paul Burba
On Mon, Nov 8, 2010 at 12:05 PM, Paul Burba ptbu...@gmail.com wrote:
 On Mon, Nov 8, 2010 at 11:20 AM, Julian Foad julian.f...@wandisco.com wrote:
 Here's a patch to fix the Windows buildbot failures that started at my
 r1031610.  The problem is our _quote_arg() function doesn't do the right
 thing with a trailing backslash.  For a solution it seems better to
 simply pass the args separately to subprocess.Popen() and let it do the
 quoting, than to try to fix and maintain our own quoting function.  And
 we can use the undocumented subprocess.list2cmdline() function for
 generating a command-line string for display purposes.  (We could also
 use that for generating a single-string argument to Popen, but we don't
 need to because it does it for us if we pass a list of arguments.)

 I tested this in a WinXP VM, and it seemed to work properly with Python
 2.4.1 and 2.4.3 and 2.7.  (I ran 1.7-trunk's prop_tests.py 7 against an
 installed svn 1.6.13, and it passed.)

 [[[
 Fix Windows command-line argument quoting in the Python test harness.
 Arguments ending with a backslash were not correctly quoted.
 This reverts r875257.

 * subversion/tests/cmdline/svntest/main.py
  (_safe_arg_re, _quote_arg): Delete, as this didn't quote properly.
  (open_pipe): Pass the list of arguments directly to subprocess.Popen()
    instead of trying to quote it ourselves. Use subprocess.list2cmdline()
    to generate a command line for display.
  (spawn_process): Use subprocess.list2cmdline() instead of _quote_arg()
    to generate a command line for display.
 ]]]

 It reverts Paul's r875257, which was:

 [[[
 Fix test suite's use of subprocess on earlier versions of Python and thus
 fix the djh-xp-vse2005 buildbot.

 * subversion/tests/cmdline/svntest/main.py
  (open_pipe2): Quote arguments to subprocess.Popen().  Later versions of
  subprocess (2.5.2+ that I know of for sure) don't require this quoting, but
  versions  2.4.3 do.
 ]]]

 I was unable to see exactly what the problem was that r875257 fixed.  I
 would like to be able to say why it's OK to revert it, but I don't yet
 know.

 Can Paul or anyone comment or test or review?

 Or shall I just commit this current patch and see if anyone has
 problems?

 Hi Julian,

 +1 on commit this current patch and see if anyone has problems.

 You've confirmed it works on Windows with 2.4.1, 2.4.3 and 2.7 (and
 2.4 is the minimum we claim to support).  I can confirm it works with
 2.6.5.

Sorry Julian, scratch that last bit.  I'm not sure what I did, but I
obviously ran the wrong thing (too many trunk WCs apparently!).
Running the tests for another change with your patch still in place I
noticed a lot of failures.  Reverting my changes and running with just
your patch I still saw lots of problems, most of which are like this
failure of commit_tests.py 41:

[[[
CMD: svnadmin.exe create svn-test-work\repositories\commit_tests-41
--bdb-txn-nosync --fs-type=fsfs
TIME = 0.094000
CMD: svnadmin.exe dump svn-test-work\local_tmp\repos | svnadmin.exe
load svn-test-work\repositories\commit_tests-41 --ignore-uuid
TIME = 0.002000
CMD: svn.exe co
file:///C:/SVN/src-trunk-2/Release/subversion/tests/cmdline/svn-test-work/repositories/commit_tests-41
svn-test-work\working_copies\commit_tests-41 --config-dir
C:\SVN\src-trunk-2\Release\subversion\tests\cmdline\svn-test-work\local_tmp\config
--password rayjandom --no-auth-cache --username jrandom
TIME = 0.197000
Asvn-test-work\working_copies\commit_tests-41\A
Asvn-test-work\working_copies\commit_tests-41\A\B
Asvn-test-work\working_copies\commit_tests-41\A\B\lambda
Asvn-test-work\working_copies\commit_tests-41\A\B\E
Asvn-test-work\working_copies\commit_tests-41\A\B\E\alpha
Asvn-test-work\working_copies\commit_tests-41\A\B\E\beta
Asvn-test-work\working_copies\commit_tests-41\A\B\F
Asvn-test-work\working_copies\commit_tests-41\A\mu
Asvn-test-work\working_copies\commit_tests-41\A\C
Asvn-test-work\working_copies\commit_tests-41\A\D
Asvn-test-work\working_copies\commit_tests-41\A\D\gamma
Asvn-test-work\working_copies\commit_tests-41\A\D\G
Asvn-test-work\working_copies\commit_tests-41\A\D\G\pi
Asvn-test-work\working_copies\commit_tests-41\A\D\G\rho
Asvn-test-work\working_copies\commit_tests-41\A\D\G\tau
Asvn-test-work\working_copies\commit_tests-41\A\D\H
Asvn-test-work\working_copies\commit_tests-41\A\D\H\chi
Asvn-test-work\working_copies\commit_tests-41\A\D\H\omega
Asvn-test-work\working_copies\commit_tests-41\A\D\H\psi
Asvn-test-work\working_copies\commit_tests-41\iota
Checked out revision 1.
CMD: svn.exe mkdir -m msg --with-revprop bug=42
file:///C:/SVN/src-trunk-2/Release/subversion/tests/cmdline/svn-test-work/repositories/commit_tests-41/dir
--config-dir 
C:\SVN\src-trunk-2\Release\subversion\tests\cmdline\svn-test-work\local_tmp\config
--password rayjandom --no-auth-cache --username jrandom
TIME = 0.201000

Committed revision 2.
UNEXPECTED EXCEPTION:
Traceback (most recent call 

Re: svn blame -g causing svnserve to hang mem usage to hit 2GB

2010-11-08 Thread Paul Burba
On Mon, Nov 8, 2010 at 1:23 PM, Paul Burba ptbu...@gmail.com wrote:
 On Mon, Nov 8, 2010 at 10:35 AM, Paul Burba ptbu...@gmail.com wrote:
 On Mon, Nov 8, 2010 at 9:13 AM, Paul Burba ptbu...@gmail.com wrote:
 On Thu, Nov 4, 2010 at 8:59 PM, Chris Tashjian ct...@thepond.com wrote:
 I posted this on the users list, but I'm confident that this is a bug.

 Background:
 For a while now (off and on for over a year, but more frequently in the 
 last
 6+ months) we've been having problems with svn crashing, yet there's no
 error in the log file.  In talking to someone the users list it sounds like
 svn is actually just hanging.  Clients get the following response:

   svn: Can't connect to host 'svn': No connection could be made
   because the target machine actively refused it.

 Our repository has 129K revisions.  The format is 4 layout linear, it was
 created with svnadmin 1.4.x and has since had svnadmin upgrade run both 
 in
 1.5 and 1.6.  We're currently running SlikSVN 1.6.13 (Win32), but I have
 previously had this problem dating back to versions of 1.5, both stock and
 from CollabNet.  The issue now happens numerous times per day and it looks
 like I've discovered why


 As a test I ran svn blame -g on a file with a bunch of revisions and
 watched memory usage on the server spin up to 2GB.

 Chris,

 By a bunch of revisions what exactly do you mean?  Many revisions
 which were the result of a merge?  Or simply many changes made
 directly to the file (not the result of a merge)?

 Paul - I'll see if I can get a test repo up with the error.  In the
 meantime, would a copy of the svn:mergeinfo help?

 Any luck?

 Chris,

 Don't sweat the replication effort too much, I think I'm on the trail
 of this problem.  Using a copy of the old (pre-ASF) Subversion
 repository I'm seeing unexpectedly high memory use when using log -g
 on a file with a lot of merge history:

 1.6.13.clientsvn blame ^/trunk/subversion/tests/cmdline/merge_tests.py
 25 MB Peak Working Set Memory svnserve.exe

 1.6.13.clientsvn blame ^/trunk/subversion/tests/cmdline/merge_tests.py -g
 291 MB Peak Working Set Memory svnserve.exe
   ^^^
 That should have been 691 MB!  Sorry!


 More soon...

Hi Chris,

Ok, I think I got it.  Switching to a Subversion tr...@1032651 (debug)
build and using this repository as a test*:

http://svn.collab.net/tmp/subversion-data-backup/subversion-history-20091115.tar.bz2

  The peak working set memory of

'svn blame ^/trunk/subversion/tests/cmdline/merge_tests.py' was 21 MB
'svn blame ^/trunk/subversion/tests/cmdline/merge_tests.py -g' was 574 MB

That's comparable to what you saw with 1.6.13.

Applying some standard pool-fu to
libsvn_repos/rev_hunt.c:(find_merged_revisions|find_interesting_revisions),
see attached patch, and things look a *lot* better:

  The peak working set memory of

'svn blame ^/trunk/subversion/tests/cmdline/merge_tests.py' stays at 21 MB
'svn blame ^/trunk/subversion/tests/cmdline/merge_tests.py -g'
drops to 71 MB

A tidy 88% reduction in peak memory usage!

Running the test suite on this patch.  Assuming no problems I will be
committing and nominating for backport to 1.6.x.

log:
[[[
Fix blame -g server-side memory leaks.

See http://svn.haxx.se/dev/archive-2010-11/0102.shtml

* subversion/libsvn_repos/rev_hunt.c

  (find_interesting_revisions): Implement result/scratch two-pool paradigm.
   Don't needlessly allocate path_revision structures until we are sure
   we are going to keep it.  Rename local variable iter_pool to the
   de facto standard iterpool.

  (find_merged_revisions): Use a separate iterpool for each nested loop.
   Update call to find_interesting_revisions, passing, you guessed it, an
   iterpool.  Rename local variable iter_pool to the de facto standard
   iterpool.
]]]

Paul

* This is the old Tigris Subversion repository, see
http://svn.apache.org/repos/asf/subversion/README.
Index: subversion/libsvn_repos/rev_hunt.c
===
--- subversion/libsvn_repos/rev_hunt.c  (revision 1032800)
+++ subversion/libsvn_repos/rev_hunt.c  (working copy)
@@ -1085,47 +1085,49 @@
apr_hash_t *duplicate_path_revs,
svn_repos_authz_func_t authz_read_func,
void *authz_read_baton,
-   apr_pool_t *pool)
+   apr_pool_t *result_pool,
+   apr_pool_t *scratch_pool)
 {
-  apr_pool_t *iter_pool, *last_pool;
+  apr_pool_t *iterpool, *last_pool;
   svn_fs_history_t *history;
   svn_fs_root_t *root;
   svn_node_kind_t kind;
 
   /* We switch between two pools while looping, since we need information from
  the last iteration to be available. */
-  iter_pool = svn_pool_create(pool);
-  last_pool = svn_pool_create(pool);
+  iterpool = svn_pool_create(result_pool);
+  last_pool = svn_pool_create(result_pool);
 
   /* The path had better be a file in this revision. */
-  

Re: svn blame -g causing svnserve to hang mem usage to hit 2GB

2010-11-08 Thread Chris Tashjian


On 11/8/2010 8:54 PM, Paul Burba wrote:

On Mon, Nov 8, 2010 at 8:28 PM, Chris Tashjianct...@thepond.com  wrote:

Paul - 1 more question.  What happens when you run additional blame -g
commands?  Does the memory usage keep growing until it runs out of memory or
will it cap itself at some point?  In my tests it seems like memory wasn't
getting released very often.  Granted, memory usage spun up so fast, I'm not
positive that it really had much of a chance for that to happen.

Chris,

I was describing *peak* memory use.  The actual working set memory
drops from 71 MB to 7 MB once the blame -g is processed in my example.
  Not sure how familiar you are with APR pools, but all the pools that
get allocated to process the request should be destroyed (freed) when
the server is done.  If memory use is growing slowly after each blame
-g, then that isn't happening and we have a separate bug.  I just did
a little ad hoc testing and there doesn't appear to be a problem.
After several blame -g hits, the peak working set for my svnserve.exe
process always returns to around 7 MB:

7464 K
7652 K
7500 K
7596 K

If you discover anything contrary to this please let us know on the dev list.


I just restarted our svn server and ran blame -g against a file.  No one 
else is hitting the server right now and after 5 minutes mem usage is at 
681,208K and the peak was 681,316K.  (taskmgr screenshot: 
http://img215.imageshack.us/img215/2060/svnserve.jpg)




Re: svn blame -g causing svnserve to hang mem usage to hit 2GB

2010-11-08 Thread Paul Burba
On Mon, Nov 8, 2010 at 8:17 PM, Paul Burba ptbu...@gmail.com wrote:
 On Mon, Nov 8, 2010 at 1:23 PM, Paul Burba ptbu...@gmail.com wrote:
 On Mon, Nov 8, 2010 at 10:35 AM, Paul Burba ptbu...@gmail.com wrote:
 On Mon, Nov 8, 2010 at 9:13 AM, Paul Burba ptbu...@gmail.com wrote:
 On Thu, Nov 4, 2010 at 8:59 PM, Chris Tashjian ct...@thepond.com wrote:
 I posted this on the users list, but I'm confident that this is a bug.

 Background:
 For a while now (off and on for over a year, but more frequently in the 
 last
 6+ months) we've been having problems with svn crashing, yet there's no
 error in the log file.  In talking to someone the users list it sounds 
 like
 svn is actually just hanging.  Clients get the following response:

   svn: Can't connect to host 'svn': No connection could be made
   because the target machine actively refused it.

 Our repository has 129K revisions.  The format is 4 layout linear, it 
 was
 created with svnadmin 1.4.x and has since had svnadmin upgrade run both 
 in
 1.5 and 1.6.  We're currently running SlikSVN 1.6.13 (Win32), but I have
 previously had this problem dating back to versions of 1.5, both stock and
 from CollabNet.  The issue now happens numerous times per day and it looks
 like I've discovered why


 As a test I ran svn blame -g on a file with a bunch of revisions and
 watched memory usage on the server spin up to 2GB.

 Chris,

 By a bunch of revisions what exactly do you mean?  Many revisions
 which were the result of a merge?  Or simply many changes made
 directly to the file (not the result of a merge)?

 Paul - I'll see if I can get a test repo up with the error.  In the
 meantime, would a copy of the svn:mergeinfo help?

 Any luck?

 Chris,

 Don't sweat the replication effort too much, I think I'm on the trail
 of this problem.  Using a copy of the old (pre-ASF) Subversion
 repository I'm seeing unexpectedly high memory use when using log -g
 on a file with a lot of merge history:

 1.6.13.clientsvn blame ^/trunk/subversion/tests/cmdline/merge_tests.py
 25 MB Peak Working Set Memory svnserve.exe

 1.6.13.clientsvn blame ^/trunk/subversion/tests/cmdline/merge_tests.py -g
 291 MB Peak Working Set Memory svnserve.exe
   ^^^
 That should have been 691 MB!  Sorry!


 More soon...

 Hi Chris,

 Ok, I think I got it.  Switching to a Subversion tr...@1032651 (debug)
 build and using this repository as a test*:

 http://svn.collab.net/tmp/subversion-data-backup/subversion-history-20091115.tar.bz2

  The peak working set memory of

    'svn blame ^/trunk/subversion/tests/cmdline/merge_tests.py' was 21 MB
    'svn blame ^/trunk/subversion/tests/cmdline/merge_tests.py -g' was 574 MB

 That's comparable to what you saw with 1.6.13.

 Applying some standard pool-fu to
 libsvn_repos/rev_hunt.c:(find_merged_revisions|find_interesting_revisions),
 see attached patch, and things look a *lot* better:

  The peak working set memory of

    'svn blame ^/trunk/subversion/tests/cmdline/merge_tests.py' stays at 21 MB
    'svn blame ^/trunk/subversion/tests/cmdline/merge_tests.py -g'
 drops to 71 MB

 A tidy 88% reduction in peak memory usage!

 Running the test suite on this patch.  Assuming no problems I will be
 committing and nominating for backport to 1.6.x.

Nominated r1032808 for backport to 1.6.14.


Re: svn blame -g causing svnserve to hang mem usage to hit 2GB

2010-11-08 Thread Paul Burba
On Mon, Nov 8, 2010 at 9:09 PM, Chris Tashjian ct...@thepond.com wrote:

 On 11/8/2010 8:54 PM, Paul Burba wrote:

 On Mon, Nov 8, 2010 at 8:28 PM, Chris Tashjianct...@thepond.com  wrote:

 Paul - 1 more question.  What happens when you run additional blame -g
 commands?  Does the memory usage keep growing until it runs out of memory
 or
 will it cap itself at some point?  In my tests it seems like memory
 wasn't
 getting released very often.  Granted, memory usage spun up so fast, I'm
 not
 positive that it really had much of a chance for that to happen.

 Chris,

 I was describing *peak* memory use.  The actual working set memory
 drops from 71 MB to 7 MB once the blame -g is processed in my example.
  Not sure how familiar you are with APR pools, but all the pools that
 get allocated to process the request should be destroyed (freed) when
 the server is done.  If memory use is growing slowly after each blame
 -g, then that isn't happening and we have a separate bug.  I just did
 a little ad hoc testing and there doesn't appear to be a problem.
 After several blame -g hits, the peak working set for my svnserve.exe
 process always returns to around 7 MB:

 7464 K
 7652 K
 7500 K
 7596 K

 If you discover anything contrary to this please let us know on the dev
 list.

 I just restarted our svn server and ran blame -g against a file.  No one
 else is hitting the server right now and after 5 minutes mem usage is at
 681,208K and the peak was 681,316K.  (taskmgr screenshot:
 http://img215.imageshack.us/img215/2060/svnserve.jpg)

I just checked with a trunk build prior to r1032808 it while the
memory leak manifests itself while processing the blame -g request
(peak memory at 571 MB), the peak working set returns to 9 MB once the
blame is processed.  So it's not a problem on trunk.

I do see what you are describing on 1.6.x though.  Working memory
peaks at 591 MB and stays there!  With r1032808 memory only peaks at
91 MB, but stay there...so yup there is another bug.  But it will have
to wait till tomorrow for me :-)

Paul


Re: [Patch] Make svn_tristate_t compatible with svn_boolean_t

2010-11-08 Thread Greg Stein
On Thu, Nov 4, 2010 at 08:45, Hyrum K. Wright
hyrum_wri...@mail.utexas.edu wrote:
 On Thu, Nov 4, 2010 at 7:43 AM, Julian Foad julian.f...@wandisco.com wrote:
...
 Having said all that, +1 on removing the gratuitous inconsistency by
 applying this patch.

 Committed r1030909.

 Gah.  Can we please wait a little bit longer on this kind of stuff to
 allow people in other timezones a chance to weigh in?

I have raised this before, Julian. For making changes with some
impact, where feedback from the community is desired, then the
standard Apache rule is 72 hours. And even if we don't worry about
rules, it is simply *respectful* to give others a chance to speak up.

Last time, you bumped the format with something like FOUR hours
notice. That was really bad. I'm not sure about the extent of the
badness here (tho changing something as central as svn_types.h seems
pretty obvious as an input-required change), but given that another
member of the community has said woah. too quick, then you REALLY
need to slow down.

This isn't an attempt to slow down your work. This is an attempt
(bordering on requirement) for you to work with the rest of the
community on changes to our codebase.

-g


Re: Trouble building trunk: Undefined references to svn_repos_load_fs3() and svn_repos_get_fs_build_parser3()

2010-11-08 Thread Peter Samuelson

[Daniel Trebbien]
 I tried your suggestion of removing the subversion and libsvn1
 packages (I'm running Debian Sid)

FWIW, the only package you actually had to remove in order to prevent
linker interference is libsvn-dev.  That has the *.la files, *.so
symlinks, etc. that are used at link time.

Peter