git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Michael Haggerty <mhagger@alum.mit.edu>
To: Junio C Hamano <gitster@pobox.com>
Cc: David Turner <dturner@twopensource.com>,
	git@vger.kernel.org, Ronnie Sahlberg <ronniesahlberg@gmail.com>
Subject: Re: [PATCH v6 1/7] refs.c: add err arguments to reflog functions
Date: Thu, 09 Jul 2015 08:47:51 +0200	[thread overview]
Message-ID: <559E1917.6000205@alum.mit.edu> (raw)
In-Reply-To: <xmqqr3oiy3pm.fsf@gitster.dls.corp.google.com>

On 07/08/2015 07:11 PM, Junio C Hamano wrote:
> Michael Haggerty <mhagger@alum.mit.edu> writes:
> 
>> I think your v7 of this patch goes too far, by turning a failure to
>> write to the reflog into a failure of the whole transaction. The problem
>> is that this failure comes too late, in the commit phase of the
>> transaction. Aborting at this late stage can leave some references
>> changed and others rolled back, violating the promise of atomicity.
> 
> Yeah, that sounds problematic.
> 
>> The old code reported a failure to write the reflog to stderr but didn't
>> fail the transaction. I think that behavior is more appropriate. The
>> reflog is of lower importance than the references themselves. Junio, do
>> you agree?
> 
> That is actually a loaded question.
> 
> Do I agree that the current (i.e. before this change) behaviour is
> more appropriate given the current choice of representation of refs
> and reflogs on the filesystem, treating a failure to update reflog
> as lower importance event and accept it as a limitation that it
> cannot abort the whole transaction atomically?  Compared to leaving
> the repository in a half-updated state where some refs and their
> logs are updated already, other remaining proposed updates are
> ignored, and the transaction claims to have failed even though some
> things have already changed and we cannot rollback, I would say that
> is a better compromise to treat reflog update as a lower importance.
> 
> Do I agree that reflog writing should stay to be best-effort in the
> longer term?  Not really.  If we are moving the ref API in the
> direction where we can plug a backend that is different from the
> traditional filesystem based one for storing refs, I think the
> backend should also be responsible for storing logs for the refs it
> stores, and if the backend wants to promise atomicity, then we
> should be able to fail the whole transaction when updates to refs
> could proceed but updates to the log of one of these updated refs
> cannot.  So I do not agree to cast in stone "the reflog is of lower
> importance" as a general rule.

Junio,

You make a good distinction. I was describing a compromise that we have
to make now due to the limitations of the current ref/reflog backend.
But I agree 100% that a future storage backend that can do correct
rollback of refs *and* reflogs can fail a transaction if the reflog
updates cannot be committed.

Thanks,
Michael

-- 
Michael Haggerty
mhagger@alum.mit.edu

  reply	other threads:[~2015-07-09  6:48 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-06-29 20:17 [PATCH v6 0/7] refs backend preamble David Turner
2015-06-29 20:17 ` [PATCH v6 1/7] refs.c: add err arguments to reflog functions David Turner
2015-07-06 15:53   ` Michael Haggerty
2015-07-07 22:41     ` David Turner
2015-07-08 10:59       ` Michael Haggerty
2015-07-08 17:11         ` Junio C Hamano
2015-07-09  6:47           ` Michael Haggerty [this message]
2015-06-29 20:17 ` [PATCH v6 2/7] cherry-pick: treat CHERRY_PICK_HEAD and REVERT_HEAD as refs David Turner
2015-07-06 16:00   ` Michael Haggerty
2015-06-29 20:17 ` [PATCH v6 3/7] bisect: treat BISECT_HEAD as a ref David Turner
2015-06-29 20:17 ` [PATCH v6 4/7] refs: Break out check for reflog autocreation David Turner
2015-06-29 20:17 ` [PATCH v6 5/7] refs: new public ref function: safe_create_reflog David Turner
2015-07-06 16:21   ` Michael Haggerty
2015-07-07 23:18     ` David Turner
2015-07-08 11:04       ` Michael Haggerty
2015-06-29 20:17 ` [PATCH v6 6/7] git-reflog: add create and exists functions David Turner
2015-06-30  7:34   ` Eric Sunshine
2015-06-30 15:57     ` David Turner
2015-06-30 16:07     ` Junio C Hamano
2015-06-30 18:20       ` Eric Sunshine
2015-06-30 19:48         ` Junio C Hamano
2015-06-30 21:19           ` David Turner
2015-06-30 21:28             ` Junio C Hamano
2015-07-06 16:51   ` Michael Haggerty
2015-07-08  0:49     ` David Turner
2015-07-08 13:16       ` Michael Haggerty
2015-07-08 20:12         ` David Turner
2015-06-29 20:17 ` [PATCH v6 7/7] git-stash: use git-reflog instead of creating files David Turner
2015-06-29 21:03   ` Junio C Hamano
2015-06-29 20:31 ` [PATCH v6 0/7] refs backend preamble Junio C Hamano
2015-06-29 20:48   ` David Turner

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=559E1917.6000205@alum.mit.edu \
    --to=mhagger@alum.mit.edu \
    --cc=dturner@twopensource.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=ronniesahlberg@gmail.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).