git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Alex Vandiver <alex@chmrr.net>
To: git@vger.kernel.org
Subject: Race condition in git push --mirror can cause silent ref rewinding
Date: Wed, 02 Jul 2014 17:10:13 -0400	[thread overview]
Message-ID: <53B47535.3020101@chmrr.net> (raw)

Heya,

We recently ran into a particularly troubling race condition, discovered
in git 2.0.0.  The setup for it is as follows:

The repository is a bare repository, which developers push to via ssh;
it mirrors its changes out onto github.  In its config:

    [remote "github"]
        url = git@github.com:bestpractical/rt.git
        fetch = +refs/*:refs/*
        mirror = yes

It has a post-receive hook which does:

    sudo -u git -H /usr/bin/git push github


We recently saw a situation where a push of a new branch caused a
simultaneous update of a different branch (by a different user) to be
rewound.  From the reflog of the created branch (4.2/html-gumbo-loading):

    0000000000000000000000000000000000000000
1aefd600fcbb5ded14376f77d77a14758668fb39 Wallace Reis
<wreis@bestpractical.com> 1404326443 -0400       push

And the updated branch (4.2-trunk), which was rewound:

    44dc8ad0e4603e3f674b7c00deacc122ca52707a
1e743b6225d502ad1a265929fb873f4c0bf4f8a5 Kevin Falcone
<falcone@bestpractical.com> 1404326446 -0400    push
    1e743b6225d502ad1a265929fb873f4c0bf4f8a5
44dc8ad0e4603e3f674b7c00deacc122ca52707a git <git@bestpractical.com>
1404326446 -0400        update by push

It is my belief that this comes because the "--mirror" argument causes
the local refs to be treated as tracking refs -- and thus updates all of
them during the push.  I believe the race condition is thus:

  1. User A starts a push --mirror; git records the values of the refs

  2. User B updates a ref, commit mail goes out, etc

  3. User A's push completes, updates "tracking" branch to value at (1).


Needless to say, silently losing commits which appeared for all purposes
to be pushed successfully (neither User A nor User B sees anything out
of the ordinary) is extremely troubling.

 - Alex

             reply	other threads:[~2014-07-02 21:43 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-07-02 21:10 Alex Vandiver [this message]
2014-07-02 22:20 ` Race condition in git push --mirror can cause silent ref rewinding Junio C Hamano
2014-07-02 23:10   ` Alex Vandiver
2014-07-14  4:09     ` Alex Vandiver

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=53B47535.3020101@chmrr.net \
    --to=alex@chmrr.net \
    --cc=git@vger.kernel.org \
    /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).