From: Jeff King <peff@peff.net>
To: Daniel Santos <daniel.santos@pobox.com>
Cc: Johannes Schindelin <johannes.schindelin@gmx.de>, git@vger.kernel.org
Subject: Re: [PATCH] git: add --no-optional-locks option
Date: Fri, 22 Sep 2017 12:04:14 -0400 [thread overview]
Message-ID: <20170922160413.nbqhmszvdfrvz3u4@sigill.intra.peff.net> (raw)
In-Reply-To: <c474bf47-5049-1425-d03c-2417eb53549e@pobox.com>
On Fri, Sep 22, 2017 at 01:42:10AM -0500, Daniel Santos wrote:
> > But taking the index lock may conflict with other operations
> > in the repository. Especially ones that the user is doing
> > themselves, which _aren't_ opportunistic. In other words,
> > "git status" knows how to back off when somebody else is
> > holding the lock, but other commands don't know that status
> > would be happy to drop the lock if somebody else wanted it.
>
> Interestingly, this usually slaps me when performing an _interactive_
> rebase. It occurred to me that if I'm performing an interaction
> operation, it doesn't seem unreasonable for git wait up to 125ms or so
> for the lock and then prompting the user to ask if they want to continue
> waiting for the lock.
Yes, lock timeouts would help with this situation, though not eliminate
it entirely (and we've been adding some lock timeouts in a few places
for related situations).
We generally avoid prompting, especially when a command can just be
reissued. It sounds like "git rebase" gets into a funny state if it
cannot grab the index lock. That's something that should be fixed. Even
if it bails, you should be able to move forward with "rebase --continue"
or similar.
> That is not necessarily the case. I don't actually know git on the
> inside, but I would ask you to consider a read-write lock and a hybrid
> of one and three.
>
> I don't know what dotlocks are, but I'm certain that you can implement a
> rw lock using lock files and no other IPC, although it does increase the
> complexity. The way this works is that `git status' acquires a read
> lock and does its thing. If it has real changes, instead of discarding
> them it attempts to upgrade to a write lock. If that fails, you throw
> it away, otherwise you write them and release.
By dotlocks, I just mean our strategy of creating O_EXCL "index.lock"
files.
You're right that it can be done using two such locks, and communicating
via the lockfile contents. So my "impossible" was overstating it. I do
stand by my contention that it's much more complex than the existing
scheme. :)
More importantly, though, it changes the locking contract completely
between old and new versions (and between other implementations).
There's probably only a small minority of users who might use two
implementations to simultaneously access the same repository, but it is
a use case we try to support. I think we'd have to require a
repository-version bump to tell programs to use the new scheme.
-Peff
next prev parent reply other threads:[~2017-09-22 16:04 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-09-21 4:32 [PATCH] git: add --no-optional-locks option Jeff King
2017-09-21 4:55 ` Junio C Hamano
2017-09-21 5:08 ` Jeff King
2017-09-21 5:29 ` Junio C Hamano
2017-09-21 18:25 ` Johannes Sixt
2017-09-22 4:25 ` Jeff King
2017-09-22 11:22 ` Jeff Hostetler
2017-09-22 15:04 ` Jeff King
2017-09-22 20:09 ` Stefan Beller
2017-09-22 21:25 ` Jeff King
2017-09-22 21:41 ` Stefan Beller
2017-09-23 3:34 ` Jeff King
2017-09-25 18:51 ` Stefan Beller
2017-09-27 6:44 ` Jeff King
2017-09-22 6:42 ` Daniel Santos
2017-09-22 16:04 ` Jeff King [this message]
2017-09-24 11:31 ` Kaartic Sivaraam
2017-09-25 16:17 ` Johannes Schindelin
2017-09-26 14:44 ` Jeff Hostetler
2017-09-25 16:10 ` Johannes Schindelin
2017-09-25 17:00 ` Jeff King
[not found] ` <79ed4c34-1727-7c1e-868a-1206902638ad@gmail.com>
2017-09-27 6:40 ` Jeff King
2017-09-27 13:50 ` Kaartic Sivaraam
2017-09-27 16:28 ` Jeff King
2017-09-27 6:54 ` [PATCH v2] " Jeff King
2017-09-28 16:15 ` Johannes Schindelin
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=20170922160413.nbqhmszvdfrvz3u4@sigill.intra.peff.net \
--to=peff@peff.net \
--cc=daniel.santos@pobox.com \
--cc=git@vger.kernel.org \
--cc=johannes.schindelin@gmx.de \
/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).