All of lore.kernel.org
 help / color / mirror / Atom feed
From: Junio C Hamano <gitster@pobox.com>
To: Michael Haggerty <mhagger@alum.mit.edu>
Cc: Stefan Beller <sbeller@google.com>,
	ronniesahlberg@gmail.com, jrnieder@gmail.com,
	sunshine@sunshineco.com, git@vger.kernel.org,
	Ronnie Sahlberg <sahlberg@google.com>
Subject: Re: [PATCH 6/7] push.c: add an --atomic argument
Date: Mon, 29 Dec 2014 12:33:37 -0800	[thread overview]
Message-ID: <xmqq7fxayz4u.fsf@gitster.dls.corp.google.com> (raw)
In-Reply-To: <549D0B78.402@alum.mit.edu> (Michael Haggerty's message of "Fri, 26 Dec 2014 08:17:12 +0100")

Michael Haggerty <mhagger@alum.mit.edu> writes:

> I'd like to discuss the big picture around this feature. I don't think
> that any of these questions are blockers, with the possible exception of
> the question of whether "--atomic" should fall back to non-atomic if the
> server doesn't support atomic pushes.
>
> 1. Should "--atomic" someday become the default?
>
> You seem to imply that "--atomic" might become the default sometime in
> the future. (I realize that this patch series does not propose to change
> the default but let's talk about it anyway.) In the real world, the most
> common reason for an "--atomic" push to fail would be that somebody else
> has pushed to a branch since our last update, resulting in a non-ff
> error. Would I find out about such an error before or after I have
> transferred my objects to the server?

That question is pretty much rhetorical, as certain rejections you
cannot fundamentally implement without having the data at hand.

> If I only find out at the end of the transfer, then it could be a pretty
> frustrating experience pushing a lot of references to a server over a
> slow connection.

We'd like to have a long overdue protocol update for fetch and push
soonish anyawy (perhaps in the first half of 2015) and part of that
should include unified logic for common ancestor negotiation between
fetch and push [*1*].  We should be able to ease that with an
optimization similar to quickfetch done on the fetch side once that
happens.

> Even *if* "--atomic" becomes the default, we would certainly want to
> support a "--no-atomic" (or "--non-atomic"?) option to get the old
> behavior. It might be a good idea to add that option now, so that
> forward-looking script writers can start explicitly choosing "--atomic"
> vs. "--no-atomic".

Perhaps.  But on the other hand, pushing multiple refs at the same
time is a sign that they are related and need to go together.  The
reason why one but not others fails would be an indication that
there is somebody else pushing into the same repository and the
pusher and the other party are stepping on each other's toes, which
should be resolved primarily by inter-developer communication, not
with "--no-atomic" workaround.

> 2. Is this an option that users will want to specify via the command line?
>
> For scripts that want to insist on "atomic" updates, it is no problem to
> specify "--atomic" on the command line.
>
> But supposing that "--atomic" is a good default for some people, it
> would be awkward for them to have to specify it on every "git push"
> invocation. It therefore might be nice to have a configuration setting
> to choose whether "--atomic" is the default.
>
> Also (see above) it might be useful to set "--atomic" only for
> particular servers (for example, only for those to which you have a fast
> connection). This suggests that the "atomic/non-atomic" configuration
> should be settable on a per-remote basis.

I think you are hinting to have remote.atomicPush = {yes,no} that is
weaker than remote.$nick.atomicPush = {yes,no} or something like
that.  I agree that would be a good direction to go.

> 3. What should happen if the server doesn't support atomic pushes?

If you asked for atomic push explicitly and if the server cannot
support it, push should fail.

If the only reason we are doing atomic is because in some future we
flipped the default (i.e. no remote.*.atomicPush or --atomic option
from the command line), then it might be OK to continue with a
warning.

I however think that the automatic demotion is too much complexity
for such a simple option.  "Please be atomic if you can but I'd take
non-atomic one if you do not want to give me atomic one" that is
responded by "I'd do non-atomic then, as you are perfectly happy
without" is not very useful---such a pusher should just say "I
accept non-atomic", which is what "--no-atomic" is for.


[Footnotes]

*1* Two other big ones are syntax change to have an explicit
    extension packets instead of hiding the capability after NUL,
    and resolving the "who speaks first" issue.

  parent reply	other threads:[~2014-12-29 20:34 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-12-19 19:38 [PATCHv6 0/7] atomic pushes Stefan Beller
2014-12-19 19:38 ` [PATCH 1/7] receive-pack.c: add protocol support to negotiate atomic-push Stefan Beller
2014-12-22 22:52   ` Eric Sunshine
2014-12-23  2:09     ` Stefan Beller
2014-12-24  7:33   ` Michael Haggerty
2014-12-30 16:47     ` Junio C Hamano
2014-12-19 19:38 ` [PATCH 2/7] send-pack: Rename ref_update_to_be_sent to check_to_send_update Stefan Beller
2014-12-19 19:38 ` [PATCH 3/7] send-pack.c: add --atomic command line argument Stefan Beller
2014-12-22 22:58   ` Eric Sunshine
2014-12-19 19:38 ` [PATCH 4/7] receive-pack.c: receive-pack.c: use a single ref_transaction for atomic pushes Stefan Beller
2014-12-23  1:31   ` Eric Sunshine
2014-12-19 19:38 ` [PATCH 5/7] receive-pack: move execute_commands_non_atomic before execute_commands Stefan Beller
2014-12-22 18:19   ` Junio C Hamano
2014-12-24  0:30     ` Stefan Beller
2014-12-19 19:39 ` [PATCH 6/7] push.c: add an --atomic argument Stefan Beller
2014-12-26  7:17   ` Michael Haggerty
2014-12-29 18:14     ` Stefan Beller
2014-12-29 20:33     ` Junio C Hamano [this message]
2014-12-19 19:39 ` [PATCH 7/7] t5543-atomic-push.sh: add basic tests for atomic pushes Stefan Beller
2014-12-22 18:24 ` [PATCHv6 0/7] " 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=xmqq7fxayz4u.fsf@gitster.dls.corp.google.com \
    --to=gitster@pobox.com \
    --cc=git@vger.kernel.org \
    --cc=jrnieder@gmail.com \
    --cc=mhagger@alum.mit.edu \
    --cc=ronniesahlberg@gmail.com \
    --cc=sahlberg@google.com \
    --cc=sbeller@google.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.