From: Michael Haggerty <mhagger@alum.mit.edu>
To: "Junio C Hamano" <gitster@pobox.com>,
"Nguyễn Thái Ngọc Duy" <pclouds@gmail.com>
Cc: git@vger.kernel.org, "Ævar Arnfjörð Bjarmason" <avarab@gmail.com>,
"Eric Sunshine" <sunshine@sunshineco.com>
Subject: Re: [PATCH v4] gc: save log from daemonized gc --auto and print it next time
Date: Wed, 16 Sep 2015 11:28:38 +0200 [thread overview]
Message-ID: <55F93646.9050709@alum.mit.edu> (raw)
In-Reply-To: <xmqq1te0ykaj.fsf@gitster.mtv.corp.google.com>
On 09/14/2015 07:37 PM, Junio C Hamano wrote:
> Junio C Hamano <gitster@pobox.com> writes:
>
>> Thanks, will queue.
>
> Ehh, I spoke a bit too early.
>
>>> diff --git a/builtin/gc.c b/builtin/gc.c
>>> index bcc75d9..2c3aaeb 100644
>>> --- a/builtin/gc.c
>>> +++ b/builtin/gc.c
>>> @@ -43,9 +43,20 @@ static struct argv_array prune_worktrees = ARGV_ARRAY_INIT;
>>> static struct argv_array rerere = ARGV_ARRAY_INIT;
>>>
>>> static char *pidfile;
>>> +static struct strbuf log_filename = STRBUF_INIT;
>>> +static int daemonized;
>>>
>>> static void remove_pidfile(void)
>>> {
>>> + if (daemonized && log_filename.len) {
>>> + struct stat st;
>>> +
>>> + close(2);
>>> + if (stat(log_filename.buf, &st) ||
>>> + !st.st_size ||
>>> + rename(log_filename.buf, git_path("gc.log")))
>>> + unlink(log_filename.buf);
>>> + }
>
> Unfortuantely we cannot queue this as-is, as we let the tempfile API
> to automatically manage the pidfile since ebebeaea (gc: use tempfile
> module to handle gc.pid file, 2015-08-10), and you cannot piggy-back
> the log file finalization to this function that no longer exists.
>
> Besides, it is obviously wrong to remove this log file in a function
> whose name is remove_pidfile() ;-)
>
> Adding a new function to tempfile API that puts the file to a final
> place if it is non-empty and otherwise remove it, and using that to
> create this "gc.log" file, would be the cleanest from the point of
> view of _this_ codepath. I however do not know if that is too
> specific for the need of this codepath or "leave it if non-empty,
> but otherwise remove as it is uninteresting" is fairly common thing
> we would want and it is a good addition to the API set.
>
> Michael, what do you think?
I'm not sure what behavior you want. At one point you say "puts the file
to a final place if it is non-empty" but later you say "leave it if
non-empty". Should the file be written directly, or should it be written
to a lockfile and renamed into place only when complete?
Technically I don't see a problem implementing either behavior. POSIX
allows [1] calls to stat() and rename() from a signal handler. There is
a minor technical difficulty that commit_lock_file() allocates memory
via get_locked_file_path(), but this would be surmountable by
pre-allocating the memory for the locked file path and storing it in the
lock_file object.
This doesn't seem like a common thing to want (as in, this might be the
only caller), but it probably makes sense to build it into the
tempfile/lockfile API nevertheless, because implementing it externally
would require a lot of other code to be duplicated.
Another possibility that might work (maybe without requiring changes to
tempfile/lockfile): don't worry about deleting the log file if it is
empty, but make observers treat an empty log file the same as an absent one.
Michael
[1]
http://pubs.opengroup.org/onlinepubs/9699919799/functions/V2_chap02.html#tag_15_04_03
--
Michael Haggerty
mhagger@alum.mit.edu
next prev parent reply other threads:[~2015-09-16 9:35 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-07-08 12:28 Since gc.autodetach=1 you can end up with auto-gc on every command with no user notification Ævar Arnfjörð Bjarmason
2015-07-08 12:47 ` Duy Nguyen
2015-08-22 2:12 ` [PATCH v3] gc: save log from daemonized gc --auto and print it next time Nguyễn Thái Ngọc Duy
2015-08-25 17:49 ` Junio C Hamano
2015-08-31 10:17 ` Duy Nguyen
2015-09-13 1:36 ` [PATCH v4] " Nguyễn Thái Ngọc Duy
2015-09-14 17:24 ` Junio C Hamano
2015-09-14 17:37 ` Junio C Hamano
2015-09-16 9:28 ` Michael Haggerty [this message]
2015-09-16 16:00 ` Junio C Hamano
2015-09-17 9:40 ` Michael Haggerty
2015-09-17 13:08 ` Duy Nguyen
2015-09-17 14:48 ` Junio C Hamano
2015-09-19 5:13 ` [PATCH v5] " Nguyễn Thái Ngọc Duy
2015-09-21 16:43 ` Junio C Hamano
2015-09-19 5:14 ` [Alt. PATCH " Nguyễn Thái Ngọc Duy
2015-09-21 16:19 ` Junio C Hamano
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=55F93646.9050709@alum.mit.edu \
--to=mhagger@alum.mit.edu \
--cc=avarab@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=pclouds@gmail.com \
--cc=sunshine@sunshineco.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.