git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Dennis Kaarsemaker <dennis@kaarsemaker.net>
To: Junio C Hamano <gitster@pobox.com>,
	David Turner <dturner@twopensource.com>
Cc: git@vger.kernel.org, pclouds@gmail.com
Subject: Re: [PATCH v9 00/19] index-helper/watchman
Date: Tue, 10 May 2016 19:44:01 +0200	[thread overview]
Message-ID: <1462902241.11954.10.camel@kaarsemaker.net> (raw)
In-Reply-To: <1462901304.11954.5.camel@kaarsemaker.net>

On di, 2016-05-10 at 19:28 +0200, Dennis Kaarsemaker wrote:
> On ma, 2016-05-09 at 15:32 -0700, Junio C Hamano wrote:
> > 
> > Junio C Hamano <gitster@pobox.com> writes:
> > 
> > > 
> > > 
> > > David Turner <dturner@twopensource.com> writes:
> > > 
> > > > 
> > > > 
> > > > On Mon, 2016-05-09 at 14:40 -0700, Junio C Hamano wrote:
> > > > > 
> > > > > 
> > > > > Hmmm, I seem to be getting
> > > > > 
> > > > >     $ cat t/trash*7900*/err
> > > > >     fatal: Already running
> > > > > 
> > > > > after running t7900 and it fails at #5, after applying
> > > > > "index-helper: optionally automatically run"
> > The symptom looks pretty similar to $gmane/293461 reported earlier.
> > Here is how "t7900-index-helper.sh -i -v -x -d" ends.
> > 
> > 
> > expecting success:
> >         test_when_finished "git index-helper --kill" &&
> >         rm -f .git/index-helper.sock &&
> >         git status &&
> >         test_path_is_missing .git/index-helper.sock &&
> >         test_config indexhelper.autorun true &&
> >         git status &&
> >         test -S .git/index-helper.sock &&
> >         git status 2>err &&
> >         test -S .git/index-helper.sock &&
> >         test_must_be_empty err &&
> >         git index-helper --kill &&
> >         test_config indexhelper.autorun false &&
> >         git status &&
> >         test_path_is_missing .git/index-helper.sock
> > 
> > + test_when_finished git index-helper --kill
> > + test 0 = 0
> > + test_cleanup={ git index-helper --kill
> >                 } && (exit "$eval_ret"); eval_ret=$?; :
> > + rm -f .git/index-helper.sock
> > + git status
> > On branch master
> > Untracked files:
> >   (use "git add <file>..." to include in what will be committed)
> > 
> >         err
> > 
> > nothing added to commit but untracked files present (use "git add"
> > to
> > track)
> > + test_path_is_missing .git/index-helper.sock
> > + test -e .git/index-helper.sock
> > + test_config indexhelper.autorun true
> > + config_dir=
> > + test indexhelper.autorun = -C
> > + test_when_finished test_unconfig  'indexhelper.autorun'
> > + test 0 = 0
> > + test_cleanup={ test_unconfig  'indexhelper.autorun'
> >                 } && (exit "$eval_ret"); eval_ret=$?; { git index-
> > helper --kill
> >                 } && (exit "$eval_ret"); eval_ret=$?; :
> > + git config indexhelper.autorun true
> > + git status
> > error: last command exited with $?=141
> > not ok 5 - index-helper autorun works
> > #
> > #               test_when_finished "git index-helper --kill" &&
> > #               rm -f .git/index-helper.sock &&
> > #               git status &&
> > #               test_path_is_missing .git/index-helper.sock &&
> > #               test_config indexhelper.autorun true &&
> > #               git status &&
> > #               test -S .git/index-helper.sock &&
> > #               git status 2>err &&
> > #               test -S .git/index-helper.sock &&
> > #               test_must_be_empty err &&
> > #               git index-helper --kill &&
> > #               test_config indexhelper.autorun false &&
> > #               git status &&
> > #               test_path_is_missing .git/index-helper.sock
> > #
> Here are the relevant bits of a strace, pid 22200 is the second git
> status, 222197 is the index helper. 22122 is the test script
> 
> 22200 socket(PF_LOCAL, SOCK_STREAM, 0)  = 7
> 22200 connect(7, {sa_family=AF_LOCAL, sun_path=".git/index-
> helper.sock"}, 110 <unfinished ...>
> 22197 <... poll resumed> )              = 1
> 22197 accept(7, 0, NULL)                = 8
> 22197 fcntl(8, F_GETFL)                 = 0x2 (flags O_RDWR)
> 22197 fcntl(8, F_SETFL, O_RDWR)         = 0
> 22197 read(8,  <unfinished ...>
> 22200 <... connect resumed> )           = 0
> 22200 rt_sigaction(SIGPIPE, {SIG_IGN, [PIPE], SA_RESTORER|SA_RESTART,
> 0x7fcc463fdd40}, {SIG_DFL, [PIPE], SA_RESTORER|SA_RESTART,
> 0x7fcc463fdd40}, 8) = 0
> 22200 write(7, "000fpoke 22200 ", 15 <unfinished ...>
> 22197 <... read resumed> 0x7ffc4e4b9b20, 4) = 4
> 22197 read(8, 0x7ffc4e4b9c70, 11)       = 11
> 22197 write(8, 0x18b08b0, 6)            = 6
> 22197 close(8)                          = 0
> 22197 poll([?] 0x7ffc4e4b9b80, 1, 600000 <unfinished ...>
> 22200 <... write resumed> )             = 15
> 22200 write(7, "0000", 4)               = -1 EPIPE (Broken pipe)
> 22200 --- SIGPIPE {si_signo=SIGPIPE, si_code=SI_USER, si_pid=22200,
> si_uid=1000} ---
> 22200 rt_sigaction(SIGPIPE, {SIG_DFL, [PIPE], SA_RESTORER|SA_RESTART,
> 0x7fcc463fdd40}, {SIG_IGN, [PIPE], SA_RESTORER|SA_RESTART,
> 0x7fcc463fdd40}, 8) = 0
> 22200 tgkill(22200, 22200, SIGPIPE)     = 0   
> 22200 --- SIGPIPE {si_signo=SIGPIPE, si_code=SI_TKILL, si_pid=22200,
> si_uid=1000} ---
> 22200 +++ killed by SIGPIPE +++
> 22122 <... wait4 resumed> [{WIFSIGNALED(s) && WTERMSIG(s) ==
> SIGPIPE}], 0, NULL) = 22200 
> 22122 --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_KILLED,
> si_pid=22200, si_status=SIGPIPE, si_utime=0, si_stime=0} ---
> 
> Looks like the index helper closes the socket, but git status still
> wants to write to it. The index-helper also doesn't seem to read all
> data from the socket.

This dodgy hack to make the index helper read that empty pkt-line
before closing the socket seems to work around the issue enough to make
the test pass

diff --git a/index-helper.c b/index-helper.c
index 9743481..fa072de 100644
--- a/index-helper.c
+++ b/index-helper.c
@@ -385,6 +385,8 @@ static void loop(int fd, int idle_in_seconds)
                         * close up.
                         */
                }
+               bytes_read = packet_read(client_fd, NULL, NULL, buf,
+                                        sizeof(buf), flags);
                close(client_fd);
        }
 
And this even dodgier hack breaks the race on a physical machine, so
the test reliably fails everywher:

diff --git a/read-cache.c b/read-cache.c
index e8593bc..848a1fe 100644
--- a/read-cache.c
+++ b/read-cache.c
@@ -1836,6 +1836,7 @@ static int poke_and_wait_for_reply(int fd)
 
        strbuf_addf(&buf, "poke %d %s", getpid(), requested_capabilities);
        packet_write(fd, buf.buf, buf.len);
+       sleep(5);
        packet_flush(fd);
 
        /* Now wait for a reply */

But at this point I'll have to claim ignorance on whether reading the
empty pkt-line is a fix or just hiding the problem.

-- 
Dennis Kaarsemaker
www.kaarsemaker.net

  reply	other threads:[~2016-05-10 17:44 UTC|newest]

Thread overview: 39+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-05-09 20:48 [PATCH v9 00/19] index-helper/watchman David Turner
2016-05-09 20:48 ` [PATCH v9 01/19] read-cache.c: fix constness of verify_hdr() David Turner
2016-05-09 20:48 ` [PATCH v9 02/19] read-cache: allow to keep mmap'd memory after reading David Turner
2016-05-09 20:48 ` [PATCH v9 03/19] index-helper: new daemon for caching index and related stuff David Turner
2016-05-10 10:13   ` SZEDER Gábor
2016-05-10 10:31     ` Duy Nguyen
2016-05-10 11:12       ` SZEDER Gábor
2016-05-10 11:31         ` Duy Nguyen
2016-05-10 17:19     ` David Turner
2016-05-09 20:48 ` [PATCH v9 04/19] index-helper: add --strict David Turner
2016-05-09 20:48 ` [PATCH v9 05/19] index-helper: log warnings David Turner
2016-05-09 20:48 ` [PATCH v9 06/19] daemonize(): set a flag before exiting the main process David Turner
2016-05-09 20:48 ` [PATCH v9 07/19] index-helper: add --detach David Turner
2016-05-09 20:48 ` [PATCH v9 08/19] read-cache: add watchman 'WAMA' extension David Turner
2016-05-09 20:48 ` [PATCH v9 09/19] watchman: support watchman to reduce index refresh cost David Turner
2016-05-09 20:48 ` [PATCH v9 10/19] index-helper: use watchman to avoid refreshing index with lstat() David Turner
2016-05-09 20:48 ` [PATCH v9 11/19] update-index: enable/disable watchman support David Turner
2016-05-09 20:48 ` [PATCH v9 12/19] unpack-trees: preserve index extensions David Turner
2016-05-09 20:48 ` [PATCH v9 13/19] watchman: add a config option to enable the extension David Turner
2016-05-09 20:48 ` [PATCH v9 14/19] index-helper: kill mode David Turner
2016-05-09 20:48 ` [PATCH v9 15/19] index-helper: don't run if already running David Turner
2016-05-09 20:48 ` [PATCH v9 16/19] index-helper: autorun mode David Turner
2016-05-09 20:48 ` [PATCH v9 17/19] index-helper: optionally automatically run David Turner
2016-05-09 20:48 ` [PATCH v9 18/19] trace: measure where the time is spent in the index-heavy operations David Turner
2016-05-09 20:48 ` [PATCH v9 19/19] untracked-cache: config option David Turner
2016-05-09 21:40 ` [PATCH v9 00/19] index-helper/watchman Junio C Hamano
2016-05-09 22:15   ` David Turner
2016-05-09 22:22     ` Junio C Hamano
2016-05-09 22:32       ` Junio C Hamano
2016-05-09 23:12         ` David Turner
2016-05-09 23:46           ` Ramsay Jones
2016-05-10 12:45           ` Duy Nguyen
2016-05-10 12:57             ` Duy Nguyen
2016-05-10 17:28         ` Dennis Kaarsemaker
2016-05-10 17:44           ` Dennis Kaarsemaker [this message]
2016-05-10 11:52       ` Dennis Kaarsemaker
2016-05-10 15:35         ` Ramsay Jones
2016-05-10 20:30           ` Junio C Hamano
2016-05-10 22:09             ` Ramsay Jones

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

  List information: http://vger.kernel.org/majordomo-info.html

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1462902241.11954.10.camel@kaarsemaker.net \
    --to=dennis@kaarsemaker.net \
    --cc=dturner@twopensource.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=pclouds@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.
Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

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 read-only IMAP folder(s) and NNTP newsgroup(s).