From: David Tweed <hidden> Date: 2016-06-15 22:44:10
Make git prune remove temporary packs that look like write failures
Write errors when repacking (eg, due to out-of-space conditions)
can leave temporary packs lying around which no existing
codepath removes and which aren't obvious to the casual user.
Unfortunately the only way to tell in builtin-prune that a tmp_pack file is
of this sort is that it hasn't been modified recently. We assume a pack
which hasn't been modified within 10 minutes is of this sort and
delete it, printing a notification to help debugging. (Nicolas Pitre
suggested this functionality should be activated only by --prune.)
Signed-off-by: David Tweed (david.tweed@gmail.com)
---
I KNOW this initial RFC is mailer whitespace damaged. Finally version won't be.
In principle this is a really trivial patch, but I'm being cautious because I
don't like the fact that I don't know (and AFAICS can't reliably check) that
the files being deleting are definitely dead. An alternative would
be to make prune just print out that the suspicious packs are
there and let the user delete them manually. (My itch is that once
a write-failure pack gets created, nothing in git operations tells the
user that a generally multimegabyte file hidden in .git occupying space.)
builtin-prune.c | 34 ++++++++++++++++++++++++++++++++++
1 files changed, 34 insertions(+), 0 deletions(-)
From: Nicolas Pitre <hidden> Date: 2016-06-15 22:44:10
On Mon, 4 Feb 2008, David Tweed wrote:
In principle this is a really trivial patch, but I'm being cautious because I
don't like the fact that I don't know (and AFAICS can't reliably check) that
the files being deleting are definitely dead. An alternative would
be to make prune just print out that the suspicious packs are
there and let the user delete them manually. (My itch is that once
a write-failure pack gets created, nothing in git operations tells the
user that a generally multimegabyte file hidden in .git occupying space.)
The lifelessness of a temporary pack is the same as for loose objects,
hence the same rule should apply in both cases. Just asking the user to
delete them manually isn't too nice either. A prune operation is
already said to be dangerous and should be performed only when no other
activities are occurring in the same repository. That should cover the
case of dead temporary pack files just as well.
Nicolas
Please have spaces after the "if" and before the "{" (just imitate the
style of the rest of the file).
Also, 10 minutes grace period for any ongoing fetch or repack seems a bit
arbitrary. Maybe default to 10 minutes, and introduce
prune.packGracePeriod?
(Which reminds me that it might be useful to add a
prune.looseObjectsGracePeriod to avoid having to type --expire= all the
time?)
Ciao,
Dscho
Please have spaces after the "if" and before the "{" (just imitate the
style of the rest of the file).
Also, 10 minutes grace period for any ongoing fetch or repack seems a bit
arbitrary. Maybe default to 10 minutes, and introduce
prune.packGracePeriod?
In response to this and to Nico's earlier mail, I _think_ the usage
with repack is completely safe. What I'm not sure about is that other
things like git-svn create temporary packs with usage/semantics I'm
not sure about. I'm happy to delete immediately if those who
understand the interactions in the whole of git say that's acceptable
when the user specifically calls git-prune.
--
cheers, dave tweed__________________________
david.tweed@gmail.com
Rm 124, School of Systems Engineering, University of Reading.
"while having code so boring anyone can maintain it, use Python." --
attempted insult seen on slashdot
Please have spaces after the "if" and before the "{" (just imitate the
style of the rest of the file).
Also, 10 minutes grace period for any ongoing fetch or repack seems a bit
arbitrary. Maybe default to 10 minutes, and introduce
prune.packGracePeriod?
(Which reminds me that it might be useful to add a
prune.looseObjectsGracePeriod to avoid having to type --expire= all the
time?)
Please use the same parameter for both. There is no need to have
separate settings.
Nicolas
Please have spaces after the "if" and before the "{" (just imitate the
style of the rest of the file).
Also, 10 minutes grace period for any ongoing fetch or repack seems a
bit arbitrary. Maybe default to 10 minutes, and introduce
prune.packGracePeriod?
(Which reminds me that it might be useful to add a
prune.looseObjectsGracePeriod to avoid having to type --expire= all
the time?)
Please use the same parameter for both. There is no need to have
separate settings.
From: Johannes Schindelin <hidden> Date: 2016-06-15 22:44:10
Hi,
On Mon, 4 Feb 2008, David Tweed wrote:
In response to this and to Nico's earlier mail, I _think_ the usage with
repack is completely safe.
It would have been nicer of you to defend that, instead of sending me off
to look for myself. Having looked for myself, I am not convinced at all.
And it would have been surprising: if your patch would play nicely with a
repack in progress, then it would fail to remove the temporary packs left
by a crashed repack.
Ciao,
Dscho
From: David Tweed <hidden> Date: 2016-06-15 22:44:10
Ugh:
On Feb 4, 2008 5:39 PM, David Tweed [off-list ref] wrote:
You're right (and I didn't intend to suggest otherwise) that it would
be safe when running a "git prune" concurrently with a separate "git
s/safe/unsafe/
repack".
--
cheers, dave tweed__________________________
david.tweed@gmail.com
Rm 124, School of Systems Engineering, University of Reading.
"while having code so boring anyone can maintain it, use Python." --
attempted insult seen on slashdot
From: David Tweed <hidden> Date: 2016-06-15 22:44:10
On Feb 4, 2008 5:21 PM, Johannes Schindelin [off-list ref] wrote:
On Mon, 4 Feb 2008, David Tweed wrote:
quoted
In response to this and to Nico's earlier mail, I _think_ the usage with
repack is completely safe.
It would have been nicer of you to defend that, instead of sending me off
to look for myself. Having looked for myself, I am not convinced at all.
I probably ought to have put the underlines around the "I". I'm
convinced, but since this is deleting things I'm more cautious than I
would be, say, parsing options.
And it would have been surprising: if your patch would play nicely with a
repack in progress, then it would fail to remove the temporary packs left
by a crashed repack.
I should been more careful what I said: I only use repack via "git gc"
which calls the repack as a subcommand. If the repack fails then the
whole process dies and you've got a dead tmp pack. The _next_ time you
call "git gc" it will do the repack, finish and then call "git prune"
(assuming --prune) and delete the temporary pack. Used in this way, I
have tried and I cannot see an execution path where this can go wrong.
You're right (and I didn't intend to suggest otherwise) that it would
be safe when running a "git prune" concurrently with a separate "git
repack".
However, I'm not familiar with what things like git-svn, cvs, etc, do.
Given that I've seen patches adding "git gc" periodically during
various imports, I wanted to someone who knows that area to confirm
the patch isn't violating any assumptions.
--
cheers, dave tweed__________________________
david.tweed@gmail.com
Rm 124, School of Systems Engineering, University of Reading.
"while having code so boring anyone can maintain it, use Python." --
attempted insult seen on slashdot
From: Nicolas Pitre <hidden> Date: 2016-06-15 22:44:10
On Mon, 4 Feb 2008, David Tweed wrote:
However, I'm not familiar with what things like git-svn, cvs, etc, do.
Given that I've seen patches adding "git gc" periodically during
various imports, I wanted to someone who knows that area to confirm
the patch isn't violating any assumptions.
If they're prunning old objects already, they can prune old temporary
pack files assuming the same level of (non) risk.
Nicolas
From: David Tweed <hidden> Date: 2016-06-15 22:44:10
On Feb 4, 2008 5:47 PM, Nicolas Pitre [off-list ref] wrote:
On Mon, 4 Feb 2008, David Tweed wrote:
If they're prunning old objects already, they can prune old temporary
pack files assuming the same level of (non) risk.
Thanks. I'll leave it a day or so, then post a final patch without the
modification time check.
--
cheers, dave tweed__________________________
david.tweed@gmail.com
Rm 124, School of Systems Engineering, University of Reading.
"while having code so boring anyone can maintain it, use Python." --
attempted insult seen on slashdot