Thread (7 messages) flat view 7 messages, 3 authors, 2016-06-15

Re: gc considered dangerous

From: Johannes Schindelin <hidden>
Date: 2016-06-15 22:46:07

Hi,

On Sun, 8 Feb 2009, Robin Rosenberg wrote:
söndag 08 februari 2009 15:56:38 skrev Johannes Schindelin:
quoted
On Sun, 8 Feb 2009, Robin Rosenberg wrote:
quoted
I've seen this. Running git gc on Windows, while having Elipse open 
can kill your object database.
You had me really scared with the mail subject!
Losing a repo *is* scary., especially if your boss is the one losing it. 
That should simply not happen unless there is a disk failure. 
Fortunately I believe the two lost branches did not contain anything 
useful.
If you care about your data, you don't use Windows, IMHO.
quoted
quoted
if gc doesn't find a new optimal pack it tries to rewrite a new pack 
with the same id. So it rm's the idx file (fine) and the the pack 
file (not ok) and gives up,
I disagree with your notion that it is fine to kill the existing idx 
file until the new one has been written successfully.
Then you misunderstood me. I meant that the repack script thought it was 
fine.
quoted
My preliminary guess is that this code in pack-write.c needs to use the 
lock file paradigm:
quoted
        if (!index_name) {
		[...]
        } else {
                unlink(index_name);
                fd = open(index_name, O_CREAT|O_EXCL|O_WRONLY, 0600);
        }
Yeah, it needs to check that it can actually delete both files before 
actually doing it.
Nope.  It needs to avoid unlinking until it knows what it did was fine.
Then again if it wants to replace a file with a new one just like it, 
It might have the same name, but that does not mean that it is bytewise 
identical.  The name depends on the uncompressed objects.
Isn't that the only case I see where we can lose data?
No, you said so yourself: Eclipse prevents the pack from being deleted.  
There are a gazillion idiotic programs on Windows who think they should 
lock random files.

So you could hit the very same issue even if your repository has twenty 
packs, and therefore could do with some gc'ing.

Ciao,
Dscho
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help