Awesome! Thanks for looking in to this over the weekend guys.  I look forward 
to 1.8.19.

Regards,
David

-----Original Message-----
From: Stefan Fuhrmann [mailto:stef...@apache.org] 
Sent: Sunday, July 30, 2017 10:14 AM
To: Bert Huijben <b...@qqmail.nl>; David Engel <den...@magnitude.com>; 
users@subversion.apache.org
Subject: Re: Checksum mismatch bug in 1.8.18

Hi David,

thanks for the report; the issue turned out to be quite serious.
The underlying bug has been present since at least as early as
1.8.0 but only surfaced with the added SHA1-collision detection
code in 1.8.18.

Under certain circumstances, yet-to-be-committed data would be
cached under the wrong key.  The impact ranges from bogus errors
as you experienced them to silent repository corruption that only
a 'svnadmin verify' run would detect.  So far, no such corruption
has been demonstrated but it remains a plausible scenario.

Luckily, the problem seems to be mostly restricted to 'svnadmin
load', with the "rep sharing" enable for the respective repo.
'svnadmin load -M 0' will also not have that issue.

I fixed the code and the fix should be shipped with the upcoming
1.8.19 release.

-- Stefan^2.

On 29.07.2017 14:37, Bert Huijben wrote:
> This specific error message was added in the last release, so yes it is new 
> in 
> the last versions. The last 1.9.x version also added it and I'm surprised 
> that 
> you see the error on 1.8 and not 1.9 (or vice versa).
> 
> It tries to tell you that you have two files with an identical SHA-1 hash, 
> but 
> different contents. A case that we accidentally didn't catch before, that 
> might 
> have caused some data loss under extreme circumstances.
> 
> This scenario is pretty unlikely to trigger, unless you specifically try to 
> do 
> that. I'll try to verify what exactly is in your dump file to see if you 
> really 
> hit this scenario, or that we have a bug in our code that tries to catch this 
> scenario. Assuming you properly verified with 1.9.6 (and not 1.9.5 or 
> earlier) I 
> assume that this is a bug in 1.8.18, as other scenarios are really extremely 
> unlikely.
> 
> I'm not sure I'll have time to look into this before Monday though, so 
> perhaps 
> one of the other developers beats me to it.
> 
>                  Bert
> 
> *From:*David Engel [mailto:den...@magnitude.com]
> *Sent:* zaterdag 29 juli 2017 00:01
> *To:* users@subversion.apache.org
> *Subject:* Checksum mismatch bug in 1.8.18
> 
> Hi,
> 
> I think I'm running into a bug in svnadmin in the latest 1.8 release 
> (1.8.18).  
> It is not present in 1.8.17 nor 1.9.5 nor 1.9.6.  I'm guessing it's related 
> to 
> the recent changes around strict repsharing.  I'm not subscribed to the 
> mailing 
> list, so please CC me on any responses.
> 
> Here are the relevant details:
> 
> OS: Windows 10 and Windows 2012 R2
> 
> Subversion release: 1.8.18
> 
> Both SlikSVN release:
> 
> svnadmin, version 1.8.18-SlikSvn-1.8.18-X64 (SlikSvn/1.8.18) X64
> 
>     compiled Jul 17 2017, 13:03:37 on x86_64-microsoft-windows6.2.9200
> 
> And Collabnet release:
> 
> svnadmin, version 1.8.18 (r1800620)
> 
>     compiled Jul  7 2017, 05:51:59 on x86_64-microsoft-windows6.2.9200
> 
> Performing an svnadmin load results in the following error:
> 
> ...
> 
> <<< Started new transaction, based on original revision 650
> 
>       * editing path : 
> Dev/Common/Utils/External/StampVerData/MetaBuilderVersion.inf ... done.
> 
>       * editing path : 
> Dev/Common/Utils/External/StampVerData/MetaBuilderVersionDBG.inf ... done.
> 
>       * editing path : 
> Dev/Common/Utils/External/StampVerData/OracleVersion.inf 
> ...svnadmin: E160000: SHA1 of reps '-1 0 45 132 
> a6ea37d29094deece56250ebe167ce46 
> 6a2d6bc4c7e58c0d2627a1b0dd5b23e542aec4d1 650-i2/_8' and '-1 136 45 132 
> a6ea37d29094deece56250ebe167ce46 6a2d6bc4c7e58c0d2627a1b0dd5b23e542aec4d1 
> 650-i2/_8' matches (6a2d6bc4c7e58c0d2627a1b0dd5b23e542aec4d1) but contents 
> differ
> 
> svnadmin: E160004: Filesystem is corrupt
> 
> svnadmin: E200014: Checksum mismatch while reading representation:
> 
>     expected:  a6ea37d29094deece56250ebe167ce46
> 
>       actual:  5f696f5d0755f3bcb5e927bdfba4bfa8
> 
> In order to reproduce the error, you can use the attached VersionStamps3 
> repository dump file.  It was taken with the same version of svnadmin from a 
> multi-GB repository that's been around for over a decade and pruned 
> (svndumpfilter) to a small set of files and revisions in one folder while 
> still 
> encountering the error.  I first encountered the error another place very 
> quickly in an incremental load on top of a repo that was loaded from 1.8.14, 
> but 
> that one was on a revision north of 120,000+.  This is way easier to 
> reproduce.  
> I tried filtering the dump further and dropping empty revisions, but the 
> error 
> did not occur in those cases.  The error also did not occur using 1.8.17, 
> 1.9.5., and 1.9.6.  It also did not occur in 1.8.18 if I set 
> enable-rep-sharing 
> = false before performing the load.
> 
> Repro.bat script:
> 
> @echo off
> 
> :defineCommands
> 
> rem You might need to adjust these lines to point to your
> 
> rem compiled-from-source Subversion binaries, if using those:
> 
> for %%i in (svn.exe) do set SVN="%%~$PATH:i"
> 
> for %%i in (svnadmin.exe) do set SVNADMIN="%%~$PATH:i"
> 
> :defineUrls
> 
> rem Only supported access method: file:// <file:///>. If http:// or svn://, 
> then
> 
> rem you'll have to configure it yourself first.
> 
> set URL=file:///%CD%/repos
> 
> set URL=%URL:\=/%
> 
> echo Base url for repo: %URL%
> 
> :cleanAllDirsAndCreateRepo
> 
> if exist repos rmdir /s /q repos
> 
> if exist import-me rmdir /s /q import-me
> 
> if exist wc rmdir /s /q wc
> 
> %SVNADMIN% create repos
> 
> pause
> 
> :prepareGreekTree
> 
> echo Making a Tree for import...
> 
> mkdir import-me\Dev\Common\Utils\External
> 
> echo Importing it...
> 
> cd import-me
> 
> %SVN% import -q -m "Initial import." %URL%
> 
> cd ..
> 
> rem This is where your reproduction recipe goes.
> 
> svnadmin --version
> 
> svnadmin load repos < VersionStamps3
> 
> goto :eof
> 
> Thanks,
> 
> David
> 

Reply via email to