git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Junio C Hamano <gitster@pobox.com>
To: "Shawn O. Pearce" <spearce@spearce.org>,
	Johannes Schindelin <Johannes.Schindelin@gmx.de>
Cc: git@vger.kernel.org, PJ Hyett <pjhyett@gmail.com>
Subject: Re: Bad objects error since upgrading GitHub servers to 1.6.1
Date: Tue, 27 Jan 2009 17:44:48 -0800	[thread overview]
Message-ID: <7vfxj4yzjj.fsf@gitster.siamese.dyndns.org> (raw)
In-Reply-To: <7vk58gz04l.fsf@gitster.siamese.dyndns.org> (Junio C. Hamano's message of "Tue, 27 Jan 2009 17:32:10 -0800")

Junio C Hamano <gitster@pobox.com> writes:

> The extra "we also have these" advertisement happened as a result of this
> discussion:
>
>     http://thread.gmane.org/gmane.comp.version-control.git/95072/focus=95256
>
> I think I know what is going on.
>
> Consider this sequence of events.
>
>  (0) Alice creates a project and pushes to public.
>
>     alice$ cd $HOME/existing-tarball-extract
>     alice$ git init
>     alice$ git add .
>     alice$ git push /pub/alice.git master
>     
>
>  (1) Bob forks it.
>
>     bob$ git clone --bare --reference /pub/alice.git /pub/bob.git

I need another /pub/alice.git here, I think, but I hope I got the point
across to people who are capable of helping us to resolve this issue.

>
>  (2) Bob clones his.
>
>     bob$ cd $HOME && git clone /pub/bob.git bob
>
>  (3) Alice works more and pushes
>
>     alice$ edit foo
>     alice$ git add foo
>     alice$ git commit -a -m 'more'
>     alice$ git push /pub/alice.git master
>
>  (4) Bob works more and tries to push to his.
>
>     bob$ cd $HOME/bob
>     bob$ edit bar
>     bob$ git add bar
>     bob$ git commit -a -m 'yet more'
>     bob$ git push /pub/bob.git master
>
> Now, the new server advertises the objects reachable from alice's branch
> tips as usable cut-off points for pack-objects bob will run when sending.
>
> And new builtin-send-pack.c has new code that feeds "extra" refs as
>
> 	^SHA1\n
>
> to the pack-objects process.
>
> The latest commit Alice created and pushed into her repository is one such
> commit.
>
> But the problem is that Bob does *NOT* have it.  His "push" will run pack
> object telling it that objects reachable from Alice's top commit do not
> have to be sent, which was the whole point of doing this new "we also have
> these" advertisement, but instead of ignoring that unknown commit,
> pack-objects would say "Huh?  I do not even know that commit" and dies.
>
> This can and should be solved by client updates, as 1.6.1 server can work
> with older client just fine.

Here is a *wrong* fix that should work most of the time.  It will
certainly appear to fix the issue in the above reproduction recipe.
You may want to ask your users to try this to see if it makes their
symptom disappear.

When we receive ".have" advertisement, this wrong fix checks if that
object is available locally, and it ignores it otherwise.

This won't be acceptable as the official fix.  We should be doing the
full connectivity check; in other words, not just "do we have it", but "do
we have it *and* is it reachable from any of our own refs".

 connect.c |    3 +++
 1 files changed, 3 insertions(+), 0 deletions(-)

diff --git c/connect.c w/connect.c
index 2f23ab3..8026850 100644
--- c/connect.c
+++ w/connect.c
@@ -43,6 +43,9 @@ int check_ref_type(const struct ref *ref, int flags)
 
 static void add_extra_have(struct extra_have_objects *extra, unsigned char *sha1)
 {
+	if (!has_sha1_file(sha1))
+		return;
+
 	ALLOC_GROW(extra->array, extra->nr + 1, extra->alloc);
 	hashcpy(&(extra->array[extra->nr][0]), sha1);
 	extra->nr++;

  parent reply	other threads:[~2009-01-28  1:46 UTC|newest]

Thread overview: 43+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-01-27 23:04 Bad objects error since upgrading GitHub servers to 1.6.1 PJ Hyett
2009-01-27 23:10 ` PJ Hyett
2009-01-27 23:37   ` Johannes Schindelin
2009-01-27 23:39     ` Shawn O. Pearce
2009-01-27 23:51       ` Junio C Hamano
2009-01-28  0:15         ` PJ Hyett
2009-01-28  0:34         ` PJ Hyett
2009-01-28  1:06           ` Junio C Hamano
2009-01-28  1:32             ` Junio C Hamano
2009-01-28  1:38               ` [PATCH] send-pack: Filter unknown commits from alternates of the remote Björn Steinbrink
2009-01-28  1:47                 ` Junio C Hamano
2009-01-28  3:33                 ` Junio C Hamano
2009-01-28  3:58                   ` Björn Steinbrink
2009-01-28  4:13                     ` Junio C Hamano
2009-01-28  4:32                     ` Junio C Hamano
2009-01-28  1:44               ` Junio C Hamano [this message]
2009-01-28  1:57                 ` Bad objects error since upgrading GitHub servers to 1.6.1 PJ Hyett
2009-01-28  2:02                   ` Shawn O. Pearce
2009-01-28  3:09                     ` Junio C Hamano
2009-01-28  3:30                       ` Shawn O. Pearce
2009-01-28  3:52                         ` Stephen Bannasch
2009-01-28  3:57                           ` Shawn O. Pearce
2009-01-28  5:44                           ` Junio C Hamano
2009-01-28  4:38                         ` Junio C Hamano
2009-01-28  4:41                           ` Shawn O. Pearce
2009-01-28  7:14                             ` Junio C Hamano
2009-01-28  7:41                               ` Junio C Hamano
2009-01-28  7:51                                 ` [PATCH 1/2] send-pack: do not send unknown object name from ".have" to pack-objects Junio C Hamano
2009-01-28 15:45                                 ` Bad objects error since upgrading GitHub servers to 1.6.1 Linus Torvalds
2009-01-28 19:00                                   ` Junio C Hamano
2009-01-28  7:55                               ` Jeff King
2009-01-28  8:05                                 ` Junio C Hamano
2009-01-28  8:17                                   ` Jeff King
2009-01-28 16:16                                     ` Shawn O. Pearce
2009-01-28 18:16                                       ` Jeff King
2009-01-28 18:26                                       ` Junio C Hamano
2009-01-28  8:22                                   ` Junio C Hamano
2009-01-28  9:24                                     ` Jeff King
2009-01-28 16:09                               ` Shawn O. Pearce
2009-01-28 16:38                                 ` Nicolas Pitre
2009-01-28 18:11                                 ` Jeff King
2009-01-28  1:00   ` Linus Torvalds
2009-01-28  1:15     ` Björn Steinbrink

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=7vfxj4yzjj.fsf@gitster.siamese.dyndns.org \
    --to=gitster@pobox.com \
    --cc=Johannes.Schindelin@gmx.de \
    --cc=git@vger.kernel.org \
    --cc=pjhyett@gmail.com \
    --cc=spearce@spearce.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).