Question

I have a read access to remote Subversion repository and i want to clone it via svnsync. The synchronization starts ok and progress well, but near the end i get error that looks like:

Transmitting file data ...svnsync: File not found: transaction '12893-qyy', path
 '/project_name/trunk/path/to/file.cpp'

I can sucessfully check out the revision in question, previous revision and next revision. All files are in place. I have checked log for file in question - it's folder is moved into this place in previous revision.

Is it any way i can force svnsync to ignore this error and continue sync? I don't have admin access to repository so i can't fix it.

UPDATED: Answering comments: i have checked same subversion client as server use (1.6.6), latest stable (1.6.17) and beta version (1.7). All gives exactly same error. Also, i can successfully checkout 'broken' repository: latest revision, revision in question (12893), revision before it (12892) and revision after it (12894) without any errors.

UPDATED: Answering more comments: svn log shows that in revision 12892 folder 'to' was moved from /repo/other_project/trunk/source_path into /repo/project_name/trunk/path

Was it helpful?

Solution

Given that you can checkout revisions before and after this I would guess that you do not have any repository corruption. svnsync works by "replaying" transactions as opposed to mirroring data or something like that. As such, there can be bugs that prevent it from replaying a transaction. I would guess something about that commit has triggered a bug. You can run svn log -c 12893 -v to look at the revision in more detail. I would guess it has something in it like a 'R'eplace that is causing the problem. You could gather info and send it to users@subversion.apache.org so that it could be analyzed and hopefully fixed.

Here are some other ideas:

  • How is the source repository accessed? file:// http:// etc. If it is http:// you could try changing from using the default HTTP library of Neon to Serf and see if it still has the problem. You can do that by adding --config-option=servers:global:http-library=serf to the svnsync command when you run it. It is worth a try.

  • See if you can dump the revision. svnadmin dump -r12892:12893 --incremental reposname > dumpfile

  • If you can dump the revision, then load you can manually load it into the target repository using svnadmin load.

  • If you can load the revision, then you can manually fix the properties for svnsync so that it know it did that revision. svn ps --revprop -r0 svn:sync-last-merged-rev 123893 url://to/mirror

UPDATED: The problem was solved by using new svnrdump utility from subversion 1.7 RC2.

OTHER TIPS

To add to the responses above, the last resort that fixed my issue was to use the svndumpfilter command to exclude the nodes that were corrupt.

Each time I tried to load the specific revision after using svnrdump, I was getting the following error;

... svnadmin: E160004: Filesystem is corrupt svnadmin: E200014: Checksum mismatch while reading representation: expected: 77ec72e82afddd1cb8d2c63760cf4dbb actual: f34fb5883dffffec3cd59a69f8a2cb99

If you have created the dump of the revision as rev12892.dmp, then you can exclude a path, eg. "/project_name/trunk/path" as follows;

svndumpfilter exclude /project_name/trunk/path < rev12892.dmp > pruned_dump_file

See the svn redbook for details about the svndumpfilter command : http://svnbook.red-bean.com/en/1.7/svn.ref.svndumpfilter.commands.c.exclude.html

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top