[svn.haxx.se] · SVN Dev · SVN Users · SVN Org · TSVN Dev · TSVN Users · Subclipse Dev · Subclipse Users · this month's index

RE: ALARM !!! recover from database crash

From: <OttoA.External_at_infineon.com>
Date: 2005-08-18 15:06:09 CEST


  sorry I don't criticizes you

  I just complain about subversion

  just to provide more details:

  I use subversion to autocommit changes of ~30 B2B/EAI servers around the world
  (development/test/production). the data is mostly xml data.
  in addition a lot of developers using this software to store their work
  I have done the normal job of an administrator to do a backup every night
  (I understand that a backup one second before a raid crash would be better
  but I don't found an option in the raid array to send an email to me
  saying "I'll fail at 10:06am please do an backup until 10:05am" :-) )

  Currently I have 6 days downtime and I got the answer
  "I have to remove the repository and start from beginning"
   -> (this is not right in detail but it sounds to me like this)
  the problem is that the xml data I cannot just do
  "stop the production servers ... do some nasty changes on the file system level
  (deleting, moving files around or something else)... setup a new workplace
  ... and restart the server"
  I'm afraid that I create some nasty bugs during this operation on my
  production environment

Mit freundlichen Grüßen

   Andreas Otto


-----Original Message-----
From: Ryan Schmidt [mailto:subversion-2005@ryandesign.com]
Sent: Thursday, August 18, 2005 12:45 PM
To: Otto Andreas (IT OS PA external)
Cc: users@subversion.tigris.org
Subject: Re: ALARM !!! recover from database crash

On 18.08.2005, at 09:59, Andreas Otto wrote:

>>> after a crash of our raid5 array I recover the svn database from
>>> an old backup.
>>> the problem is that the old state was !not! the state of the last
>>> check-in:
>>> some examples:
>>> host:>svn update
>>> svn: Reference to non-existent revision '2544' in filesystem
>>> '/path/to/svn/repositories/db'
>>> host:>svn commit -m new
>>> Sending MqSeries.config
>>> Sending WebMethods.config
>>> Transmitting file data ..svn: Commit failed (details follow):
>>> svn: Base checksum mismatch on '/applications/OpMenu/
>>> WebMethods.config':
>>> expected: e83613d37b51b9a182dace8b33bb860b
>>> actual: 8bc484dc39ad9face27831e60e60a6a1
>>> I'm not interested to get the !latest! level working ...
>>> I'm just fine to get anything working (e.g. start to check-in the
>>> current level to the HEAD release , even if the HEAD release is old)
>> An answer I gave someone else recently will probably help you:
>> http://svn.haxx.se/users/archive-2005-08/0347.shtml
> I don't understand the answer.
> From my point of view it is a normal behavior for a SW to recover
> from
> an old backup release.
> if I read this email I get the conclusion that it is not possible
> !!!
> I thing it is a business-critical design-error of subversion
> what I want:
> 1. install an old backup
> 2. perhaps run a svnadmin ??? command to clean up
> 3. continue to work
> for me everything is perfect because I have a working old release
> including the history the old HEAD in the .svn directory of
> a checkout and the current changes in the working directory
> and subversion say I'm not able to recover !!!!!!!
> I'm not able to recover with the information below !!!!

Is there a specific problem with my instructions, or a more general "I don't want to do it that way" / "Subversion should handle it for me"? I did take great care in writing the instructions, going so far as to reproduce the original poster's environment on my own machine before responding, and he said my instructions got him back on track, so if there's something specific that's not working about them, maybe I can help.

As to whether Subversion could handle this better, I'm not sure how.
Subversion is a complicated system, and it has to be able to rely on a number of things in order to do its job. One thing it relies on is that the .svn directories aren't tampered with; another is that when when you go to check in a working copy, then the repository is still the same one that you checked out from. In your situation, you restored an old backup, so the repository is not the same one the working copy was made from.

Say the repository is at revision 2600, and you check out a working copy of it. A lot of things get stored in the working copy's .svn directories which make a note of the way this part of the repository looked at revision 2600. When you commit changes, the Subversion client transmits to the server a message that basically says "I want to commit some changes. Here are the differences between revision 2600 and the new stuff; please apply them." The repository then says "Ah yes, I know revision 2600. Your changes seem in order. The new revision number is 2605."

But if you then have to restore a backup of the repository from, say, revision 2500, now you have a problem when you try to commit that same working copy. The commit request arrives at the server, and the server has to say "Differences from revision 2600? Sorry, I've never heard of that revision, so there's nothing to which your diff could reasonably apply." The working copy doesn't contain a complete history of every change made up to revision 2600. That's not its job; that's the repository's job. All the working copy knows is how the repository looked *at* a particular revision, and if the server has forgotten how that revision looked, as in your case, then that breaks things.

Let this serve as a lesson that you should ensure that you always have very current backups of your repository. Set up a post-commit hook that dumps the just-committed revision to an incremental dump file. If you allow revprop changes, set up a post-revprop-change hook to either back up the affected revisions again or write the svn propset commands to a text file, to be executed manually in the event a database restore is necessary. Optionally, do a weekly or monthly full dump and clean out the incrementals up to that point, to keep it from getting out of hand. You can also copy (or, for BDB repositories, hot-copy) the raw repository files for another level of security.

To unsubscribe, e-mail: users-unsubscribe@subversion.tigris.org
For additional commands, e-mail: users-help@subversion.tigris.org
Received on Thu Aug 18 15:19:52 2005

This is an archived mail posted to the Subversion Users mailing list.

This site is subject to the Apache Privacy Policy and the Apache Public Forum Archive Policy.