A bit more info, following up to my previous mail:

In the transcript in my previous mail, at the end I move the corrupt file out 
of the way and do 'svn up' to restore a good copy from the repository.  FWIW, 
the restoration worked:

  $ cp main.org real-main.org
  $ cp was-local-main.org main.org
  $ svn status -q
  M       main.org
  $ cp real-main.org main.org
  $ svn status -q
  $ 

So, the original bug is still there, but at least the obvious method of 
recovering manually works as intended: the working copy now correctly detects 
the modified file as modified.

Best regards,
-Karl

> This is with stock SVN version 1.9.6 (r1800392) as packaged in Debian
> GNU/Linux 'testing' distro, compiled Jul 22 2017, 06:41:45 on
> x86_64-pc-linux-gnu.  (I dist-upgraded from the Debian package tree this
> morning, FWIW.)
> 
> I think I've encountered a data corruption bug due to a race condition
> somewhere in the working copy library.  I don't have a reliable
> reproduction recipe, but here's what I did:
> 
>   1) Start an SVN commit.
> 
>   2) While the commit is in progress, edit and save a
>      change to one of the files that's being committed.
> 
>   3) The commit completes successfully, or "successfully", but...
> 
> ...now the repository has the file contents from before my edit of (2),
> the working copy has the file contents from *after* my edit of (2), but
> SVN reports no local modifications when I do 'svn status'.
> That's... bad, right? :-)
> 
> The transcript below, from after the above steps, gives more detail.
> What the transcript shows should be impossible:
> 
>   $ svn up
>   Updating '.':
>   At revision 6916.
>   $ svn status -q
>   ### no output, so no local mods that SVN is aware of ###
>   $ svn info org/main.org
>   Path: org/main.org
>   Name: main.org
>   Working Copy Root Path: /home/kfogel/private
>   URL: https://svn.red-bean.com/kfogel-private/trunk/org/main.org
>   Relative URL: ^/trunk/org/main.org
>   Repository Root: https://svn.red-bean.com/kfogel-private
>   Repository UUID: c51825e8-60e0-0310-a34c-dea7275b9f40
>   Revision: 6916
>   Node Kind: file
>   Schedule: normal
>   Last Changed Author: kfogel
>   Last Changed Rev: 6916
>   Last Changed Date: 2017-07-27 01:01:45 -0500 (Thu, 27 Jul 2017)
>   Text Last Updated: 2017-07-27 01:01:36 -0500 (Thu, 27 Jul 2017)
>   Checksum: ab3e79907b1107753ec961826fb22d9975bc6e4e
>   
>   $ svn ls -v org/main.org
>      6916 kfogel          35258 Jul 27 01:01 main.org
>   $ svn cat -r6916 org/main.org > org/main.org-from-repository-r6916
>   $ sha1sum org/main.org
>   25d8f1383a453908782a1e550dad84b0bcafc0c9  org/main.org
>   $ sha1sum org/main.org-from-repository-r6916
>   ab3e79907b1107753ec961826fb22d9975bc6e4e  org/main.org-from-repository-r6916
>   $ diff -u org/main.org org/main.org-from-repository-r6916
>   --- org/main.org    2017-07-27 01:01:36.259540030 -0500
>   +++ org/main.org-from-repository-r6916      2017-07-27 01:03:19.472775400 
> -0500
>   @@ -9,6 +9,7 @@
>        To: Karl Fogel <kfo...@opentechstrategies.com>
>        Date: Wed, 26 Jul 2017 20:29:40 -0400
>        Message-ID: 
> <camufnfbmgrdf+x1bkka4ho4jft3xbfb-jjd7lumdjrefgq5...@mail.gmail.com>
>   +  - Erie Meyer email
>      - Baltimore Hotel fix
>      - Record United ORD<->LGA flight information
>        United Confirmation Number FGD887
>   $ svn --version
>   svn, version 1.9.6 (r1800392)
>      compiled Jul 22 2017, 06:41:45 on x86_64-pc-linux-gnu
>   
>   Copyright (C) 2017 The Apache Software Foundation.
>   This software consists of contributions made by many people;
>   see the NOTICE file for more information.
>   Subversion is open source software, see http://subversion.apache.org/
>   
>   The following repository access (RA) modules are available:
>   
>   * ra_svn : Module for accessing a repository using the svn network protocol.
>     - with Cyrus SASL authentication
>     - handles 'svn' scheme
>   * ra_local : Module for accessing a repository on local disk.
>     - handles 'file' scheme
>   * ra_serf : Module for accessing a repository via WebDAV protocol using 
> serf.
>     - using serf 1.3.9 (compiled with 1.3.9)
>     - handles 'http' scheme
>     - handles 'https' scheme
>   
>   The following authentication credential caches are available:
>   
>   * Plaintext cache in /home/kfogel/.subversion
>   * Gnome Keyring
>   * GPG-Agent
>   * KWallet (KDE)
>   
>   $ svn ci -m "Nothing to commit, because SVN mistakenly thinks there are no 
> local mods."
>   ### no commit happens ###
>   $ cd org
>   $ svn status main.org
>   $ mv main.org was-local-main.org
>   $ svn up
>   Updating '.':
>   Restored 'main.org'
>   At revision 6916.
>   $ diff -u main.org was-local-main.org
>   --- main.org        2017-07-27 01:19:02.779501081 -0500
>   +++ was-local-main.org      2017-07-27 01:01:36.259540030 -0500
>   @@ -9,7 +9,6 @@
>        To: Karl Fogel <kfo...@opentechstrategies.com>
>        Date: Wed, 26 Jul 2017 20:29:40 -0400
>        Message-ID: 
> <camufnfbmgrdf+x1bkka4ho4jft3xbfb-jjd7lumdjrefgq5...@mail.gmail.com>
>   -  - Erie Meyer email
>      - Baltimore Hotel fix
>      - Record United ORD<->LGA flight information
>        United Confirmation Number FGD887
>   $ 
> 
> Of course, it would be very difficult to reproduce this -- the file save
> probably has to happen at exactly the wrong moment during the commit.
> But maybe it's possible to find it just knowing that it's possible.  In
> the meantime, I've saved a copy of the relevant top-level .svn/
> directory and of the working copy subdirectory in which the bug occurred
> (from right before the "cd org" step above), in case those would help.
> 
> I'm not subscribed to dev@ these days, so please keep me CC'd on any
> followups.
> 
> Best regards,
> -Karl

Reply via email to