git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Duy Nguyen <pclouds@gmail.com>
To: David Turner <novalis@novalis.org>
Cc: Git Mailing List <git@vger.kernel.org>,
	kmaggg@gmail.com,
	Johannes Schindelin <Johannes.Schindelin@gmx.de>
Subject: Re: [PATCH v14 00/21] index-helper/watchman
Date: Tue, 12 Jul 2016 20:24:31 +0200	[thread overview]
Message-ID: <CACsJy8Br-rSTKjpt2ykn8YyFruy8CZoXWm287BtTRcAYY2DjVw@mail.gmail.com> (raw)
In-Reply-To: <1467532693-20017-1-git-send-email-novalis@novalis.org>

Just thinking out loud. I've been thinking about this more about this.
After the move from signal-based to unix socket for communication, we
probably are better off with a simpler design than the shm-alike one
we have now.

What if we send everything over a socket or a pipe? Sending 500MB over
a unix socket takes 253ms, that's insignificant when operations on an
index that size usually take seconds. If we send everything over
socket/pipe, we can trust data integrity and don't have to verify,
even the trailing SHA-1 in shm file.

So, what I have in mind is this, at read index time, instead of open a
socket, we run a separate program and communicate via pipes. We can
exchange capabilities if needed, then the program sends the entire
current index, the list of updated files back (and/or the list of dirs
to invalidate). The design looks very much like a smudge/clean filter.

For people who don't want extra daemon, they can write a short script
that saves indexes somewhere in tmpfs, and talk to watchman or
something else. I haven't written this script, but I don't think it
takes long to write one. Windows folks have total freedom to implement
a daemon, a service or whatever and use this program as front end. How
the service talks to this program is totally up to them. For people
who want to centralize everything, they can have just one daemon and
have the script to talk to this daemon.

I can see that getting rid of file-based stuff simplifies some
patches. We can still provide a daemon to do more advanced stuff (or
to make it work out of the box). But it's not a hard requirement and
we probably don't need to include one right now. And I think it makes
it easier to test as well because we can just go with some fake file
monitor service instead of real watchman.
--
Duy

On Sun, Jul 3, 2016 at 9:57 AM, David Turner <novalis@novalis.org> wrote:
> This addresses comments on v13:
> removed unnecessary no_mmap ifdef
> add an ifdef in unix-socket
> OS X fix for select()
> test improvement
>
> Thanks to all for suggestions.
>
> David Turner (10):
>   pkt-line: add gentle version of packet_write
>   index-helper: log warnings
>   unpack-trees: preserve index extensions
>   watchman: add a config option to enable the extension
>   index-helper: kill mode
>   index-helper: don't run if already running
>   index-helper: autorun mode
>   index-helper: optionally automatically run
>   index-helper: indexhelper.exitAfter config
>   mailmap: use main email address for dturner
>
> Nguyễn Thái Ngọc Duy (11):
>   read-cache: allow to keep mmap'd memory after reading
>   unix-socket.c: add stub implementation when unix sockets are not
>     supported
>   index-helper: new daemon for caching index and related stuff
>   index-helper: add --strict
>   daemonize(): set a flag before exiting the main process
>   index-helper: add --detach
>   read-cache: add watchman 'WAMA' extension
>   watchman: support watchman to reduce index refresh cost
>   index-helper: use watchman to avoid refreshing index with lstat()
>   update-index: enable/disable watchman support
>   trace: measure where the time is spent in the index-heavy operations
>
>  .gitignore                               |   2 +
>  .mailmap                                 |   1 +
>  Documentation/config.txt                 |  12 +
>  Documentation/git-index-helper.txt       |  86 +++++
>  Documentation/git-update-index.txt       |   6 +
>  Documentation/technical/index-format.txt |  22 ++
>  Makefile                                 |  22 ++
>  builtin/gc.c                             |   2 +-
>  builtin/update-index.c                   |  15 +
>  cache.h                                  |  25 +-
>  command-list.txt                         |   1 +
>  config.c                                 |   5 +
>  configure.ac                             |   8 +
>  contrib/completion/git-completion.bash   |   1 +
>  daemon.c                                 |   2 +-
>  diff-lib.c                               |   4 +
>  dir.c                                    |  25 +-
>  dir.h                                    |   6 +
>  environment.c                            |   2 +
>  git-compat-util.h                        |   1 +
>  index-helper.c                           | 469 +++++++++++++++++++++++++++
>  name-hash.c                              |   2 +
>  pkt-line.c                               |  18 ++
>  pkt-line.h                               |   2 +
>  preload-index.c                          |   2 +
>  read-cache.c                             | 531 ++++++++++++++++++++++++++++++-
>  refs/files-backend.c                     |   2 +
>  setup.c                                  |   4 +-
>  t/t1701-watchman-extension.sh            |  37 +++
>  t/t7063-status-untracked-cache.sh        |  22 ++
>  t/t7900-index-helper.sh                  |  79 +++++
>  t/test-lib-functions.sh                  |   4 +
>  test-dump-watchman.c                     |  16 +
>  unix-socket.h                            |  18 ++
>  unpack-trees.c                           |   1 +
>  watchman-support.c                       | 135 ++++++++
>  watchman-support.h                       |   7 +
>  37 files changed, 1578 insertions(+), 19 deletions(-)
>  create mode 100644 Documentation/git-index-helper.txt
>  create mode 100644 index-helper.c
>  create mode 100755 t/t1701-watchman-extension.sh
>  create mode 100755 t/t7900-index-helper.sh
>  create mode 100644 test-dump-watchman.c
>  create mode 100644 watchman-support.c
>  create mode 100644 watchman-support.h
>
> --
> 1.9.1
>



-- 
Duy

  parent reply	other threads:[~2016-07-12 18:25 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-07-03  7:57 [PATCH v14 00/21] index-helper/watchman David Turner
2016-07-03  7:57 ` [PATCH v14 01/21] read-cache: allow to keep mmap'd memory after reading David Turner
2016-07-03  7:57 ` [PATCH v14 02/21] pkt-line: add gentle version of packet_write David Turner
2016-07-03  7:57 ` [PATCH v14 03/21] unix-socket.c: add stub implementation when unix sockets are not supported David Turner
2016-07-03  7:57 ` [PATCH v14 04/21] index-helper: new daemon for caching index and related stuff David Turner
2016-07-03  7:57 ` [PATCH v14 05/21] index-helper: add --strict David Turner
2016-07-03  7:57 ` [PATCH v14 06/21] daemonize(): set a flag before exiting the main process David Turner
2016-07-03  7:57 ` [PATCH v14 07/21] index-helper: add --detach David Turner
2016-07-03  7:58 ` [PATCH v14 08/21] index-helper: log warnings David Turner
2016-07-03  7:58 ` [PATCH v14 09/21] read-cache: add watchman 'WAMA' extension David Turner
2016-07-03  7:58 ` [PATCH v14 10/21] watchman: support watchman to reduce index refresh cost David Turner
2016-07-03  7:58 ` [PATCH v14 11/21] index-helper: use watchman to avoid refreshing index with lstat() David Turner
2016-07-03  7:58 ` [PATCH v14 12/21] update-index: enable/disable watchman support David Turner
2016-07-03  7:58 ` [PATCH v14 13/21] unpack-trees: preserve index extensions David Turner
2016-07-03  7:58 ` [PATCH v14 14/21] watchman: add a config option to enable the extension David Turner
2016-07-03  7:58 ` [PATCH v14 15/21] index-helper: kill mode David Turner
2016-07-06  8:20   ` Johannes Schindelin
2016-07-06 15:33     ` Duy Nguyen
2016-07-03  7:58 ` [PATCH v14 16/21] index-helper: don't run if already running David Turner
2016-07-03  7:58 ` [PATCH v14 17/21] index-helper: autorun mode David Turner
2016-07-03  7:58 ` [PATCH v14 18/21] index-helper: optionally automatically run David Turner
2016-07-03  7:58 ` [PATCH v14 19/21] trace: measure where the time is spent in the index-heavy operations David Turner
2016-07-03 11:51 ` [PATCH v14 00/21] index-helper/watchman Johannes Schindelin
2016-07-04  6:40   ` Johannes Schindelin
2016-07-06 18:11 ` Junio C Hamano
2016-07-12 18:24 ` Duy Nguyen [this message]
2016-07-13 21:59   ` David Turner
2016-07-14 15:56     ` Duy Nguyen
2016-07-14 15:58       ` Duy Nguyen
2016-07-15  1:20       ` Ben Peart

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=CACsJy8Br-rSTKjpt2ykn8YyFruy8CZoXWm287BtTRcAYY2DjVw@mail.gmail.com \
    --to=pclouds@gmail.com \
    --cc=Johannes.Schindelin@gmx.de \
    --cc=git@vger.kernel.org \
    --cc=kmaggg@gmail.com \
    --cc=novalis@novalis.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.
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).