Re: [RFC] t5516 "75 - deny fetch unreachable SHA1, allowtipsha1inwant=true" flaky?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



I think the following happens:
1. The remote upload-pack finds out "not our ref"
2. The remote send a response and close the pipe
3. fetch-pack still tries to write commands to the remote upload-pack
4. Because the connection has already been closed, writing will fail
with EPIPE which is detected by write_or_die() -> check_pipe()
resulting in die(141)

The reason for the test to succeed, i.e. git-fetch fails with 128 (or
1?), in most cases must be because it manages to write everything
before the context switch to the remote upload-pack occurs.

What is actually the wanted outcome? Should git-fetch try to continue
to see if the already received response is enough to continue as
normal?

Best regards,
Fredrik

2015-10-24 15:08 GMT+02:00 Lars Schneider <larsxschneider@xxxxxxxxx>:
> Hi,
>
> while working on the Git CI integration I noticed that t5516 "75 - deny fetch
> unreachable SHA1, allowtipsha1inwant=true" (introduced in 68ee628) seems to be
> flaky on TravisCI. I get the following output in verbose mode:
>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> expecting success:
>         mk_empty testrepo &&
>         (
>             cd testrepo &&
>             git config uploadpack.allowtipsha1inwant $configallowtipsha1inwant &&
>             git commit --allow-empty -m foo &&
>             git commit --allow-empty -m bar &&
>             git commit --allow-empty -m xyz
>         ) &&
>         SHA1_1=$(git --git-dir=testrepo/.git rev-parse HEAD^^) &&
>         SHA1_2=$(git --git-dir=testrepo/.git rev-parse HEAD^) &&
>         SHA1_3=$(git --git-dir=testrepo/.git rev-parse HEAD) &&
>         (
>             cd testrepo &&
>             git reset --hard $SHA1_2 &&
>             git cat-file commit $SHA1_1 &&
>             git cat-file commit $SHA1_3
>         ) &&
>         mk_empty shallow &&
>         (
>             cd shallow &&
>             test_must_fail git fetch ../testrepo/.git $SHA1_3 &&
>             test_must_fail git fetch ../testrepo/.git $SHA1_1 &&
>             git --git-dir=../testrepo/.git config uploadpack.allowreachablesha1inwant true &&
>             git fetch ../testrepo/.git $SHA1_1 &&
>             git cat-file commit $SHA1_1 &&
>             test_must_fail git cat-file commit $SHA1_2 &&
>             git fetch ../testrepo/.git $SHA1_2 &&
>             git cat-file commit $SHA1_2 &&
>             test_must_fail git fetch ../testrepo/.git $SHA1_3
>         )
>
> Initialized empty Git repository in /home/travis/build/larsxschneider/git/t/trash directory.t5516-fetch-push/testrepo/.git/
> [master (root-commit) a6b22ca] foo
>  Author: A U Thor <author@xxxxxxxxxxx>
> [master 5e26403] bar
>  Author: A U Thor <author@xxxxxxxxxxx>
> [master 64ea4c1] xyz
>  Author: A U Thor <author@xxxxxxxxxxx>
> HEAD is now at 5e26403 bar
> tree 4b825dc642cb6eb9a060e54bf8d69288fbee4904
> author A U Thor <author@xxxxxxxxxxx> 1112912053 -0700
> committer C O Mitter <committer@xxxxxxxxxxx> 1112912053 -0700
> foo
> tree 4b825dc642cb6eb9a060e54bf8d69288fbee4904
> parent 5e26403b4485d7a44fd8b65dc3f71e21c0dd6fad
> author A U Thor <author@xxxxxxxxxxx> 1112912053 -0700
> committer C O Mitter <committer@xxxxxxxxxxx> 1112912053 -0700
> xyz
> Initialized empty Git repository in /home/travis/build/larsxschneider/git/t/trash directory.t5516-fetch-push/shallow/.git/
> fatal: git upload-pack: not our ref 64ea4c133d59fa98e86a771eda009872d6ab2886
> test_must_fail: died by signal: git fetch ../testrepo/.git 64ea4c133d59fa98e86a771eda009872d6ab2886
> not ok 75 - deny fetch unreachable SHA1, allowtipsha1inwant=true
> <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
>
> "git fetch ../testrepo/.git $SHA1_3" seems to die as follows:
> 1. fetch-pack.c:408 goto done;
> 2. fetch-pack.c:447 done:
> 3. fetch-pack.c:229 static void send_request... (send "0009done\n" --> 9 bytes)
> 4. write_or_die.c:74 write_or_die
> 5. wrapper.c:331 write_in_full
> 6. wrapper.c:281 xwrite
> 7. wrapper.c:287 write --> just dies with exit code 141?!
> (use 4688abf to match the line numbers)
>
> You can find the full logs about the CI run here:
> https://travis-ci.org/larsxschneider/git/jobs/86984110
>
> I repeatedly executed this test to demonstrate the flakiness:
> failed after 100 attempts: https://travis-ci.org/larsxschneider/git/jobs/87181753
> failed after 1876 attempts: https://travis-ci.org/larsxschneider/git/jobs/87181754
> (all executed on bbd2929 from https://github.com/larsxschneider/git)
>
> Unfortunately I was not able to make it fail on my local machine (OS X 10.9)
> nor on my VM (Ubuntu 14.10). Travis CI uses Ubuntu 12.04 LTS Server Edition 64
> bit with a AUFS file system.
>
> Has anyone an idea what might causes these failures or can give me pointers how
> to investigate it?
>
> Thank you,
> Lars
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]