Commit graph

24182 commits

Author SHA1 Message Date
Joey Hess
82a239675f
narrow the race where a file gets modified before update-index
Check just before running update-index if the worktree file's content is
still the same, don't update it when it's been modified. This narrows
the race window a lot, from possibly minutes or hours, to seconds or
less.

(Use replaceFile so that the worktree update happens atomically,
allowing the InodeCache of the new worktree file to itself be gathered
w/o any other race.)

This doesn't eliminate the race; it can still occur in the window before
update-index runs. When annex.queue is large, a lot of files will be
statted by the checks, and so the window may still be large enough to be a
problem.

When only a few files are being processed, the window is as small as it
is in the race where a modification gets overwritten by git-annex when
it updates the worktree. Or maybe as small as whatever race git
checkout/pull/merge may have when the worktree gets modified during it.
Still, I've kept a todo about this race.

This commit was supported by the NSF-funded DataLad project.
2018-08-16 15:56:43 -04:00
Joey Hess
82cfcfc838
better index file refresh method
Use git update-index --refresh, since it's a little bit more
efficient and the user can be told to run it if a locked index prevents
git-annex from running it.

This also fixes the problem where an annexed file was deleted in the index
and a get of another file that uses the same key caused the index update to
add back the deleted file. update-index will not add back the deleted file.

Documented in tips/unlocked_files.mdwn the gotcha that the index update
may conflict with other operations. I can't see any way to possibly avoid
that conflict.

One new todo about a race that causes a modification to be accidentially
staged.

Note that the assistant only flushes the git command queue when it
commits a modification. I have not tested the assistant with v6 unlocked
files, but assume most users of the assistant won't care if the index
shows a file as modified for a while.

This commit was supported by the NSF-funded DataLad project.
2018-08-16 14:16:24 -04:00
duncan_bayne
7e9d6c4ef1 Added a comment: RTFM 2018-08-16 04:25:27 +00:00
Joey Hess
4c5a9965c1
remove invalid todo item
I tested it, and it's ok. I think I was adding it under a filename that
produced a different key.
2018-08-15 13:34:48 -04:00
Joey Hess
24ed323208
response 2018-08-15 11:43:50 -04:00
https://launchpad.net/~liori
a6927da198 2018-08-15 14:07:31 +00:00
Joey Hess
e891e78032
devblog 2018-08-14 16:24:13 -04:00
Joey Hess
48e9e12961
finally fixed v6 get/drop git status
After updating the worktree for an add/drop, update git's index, so git
status will not show the files as modified.

What actually happens is that the index update removes the inode
information from the index. The next git status (or similar) run
then has to do some work. It runs the clean filter.

So, this depends on the clean filter being reasonably fast and on git
not leaking memory when running it. Both problems were fixed in
a96972015d, but only for git 2.5. Anyone
using an older git will see very expensive git status after an add/drop.

This uses the same git update-index queue as other parts of git-annex, so
the actual index update is fairly efficient. Of course, updating the index
does still have some overhead. The annex.queuesize config will control how
often the index gets updated when working on a lot of files.

This is an imperfect workaround... Added several todos about new
problems this workaround causes. Still, this seems a lot better than the
old behavior.

This commit was supported by the NSF-funded DataLad project.
2018-08-14 16:23:58 -04:00
Joey Hess
06fd4657db
response 2018-08-14 13:41:02 -04:00
jarno
3b155dd32d Added a comment 2018-08-14 16:03:39 +00:00
Joey Hess
63cfc1a615
Merge branch 'master' of ssh://git-annex.branchable.com 2018-08-14 11:08:44 -04:00
Joey Hess
66a4483dfa
response 2018-08-14 11:02:55 -04:00
hoabg102@4a7a5918bc078f792113da142cf8c6d825a1825c
f0779bc9f1 2018-08-14 10:22:06 +00:00
Joey Hess
d8a8f2df70
full plan 2018-08-13 17:51:02 -04:00
Joey Hess
86df0d6e1b
even better idea 2018-08-13 17:43:16 -04:00
Joey Hess
df5823cea0
update 2018-08-13 17:29:33 -04:00
Joey Hess
bc7d431a6a
status 2018-08-13 16:37:23 -04:00
Joey Hess
c9866c7612
devblog 2018-08-13 16:19:15 -04:00
Joey Hess
f1dfed4d5a
response 2018-08-13 12:44:34 -04:00
webanck
cd62ab20a3 Added a comment: Similar issue again 2018-08-13 14:18:17 +00:00
webanck
55d7660576 removed 2018-08-13 14:16:09 +00:00
webanck
3829f2de16 Added a comment: Similar issue again 2018-08-13 14:11:48 +00:00
Mara
a2bb955467 Added a comment: Also with embedcreds=yes 2018-08-13 12:28:10 +00:00
Mara
3e8eadade4 2018-08-13 10:46:08 +00:00
duncan_bayne
6ce59ccfe5 2018-08-12 06:19:36 +00:00
duncan_bayne
b5910dac68 2018-08-12 06:18:36 +00:00
duncan_bayne
874dd3febf 2018-08-12 06:17:56 +00:00
jarno
159154d2b2 2018-08-11 12:26:00 +00:00
Joey Hess
d0dfee1519
Merge branch 'master' of ssh://git-annex.branchable.com 2018-08-10 16:17:29 -04:00
Joey Hess
29a3174f11
devblog 2018-08-10 16:17:05 -04:00
yarikoptic
b47fef55f0 Added a comment: my 1c 2018-08-10 19:17:17 +00:00
Joey Hess
816e0e356b
devblog 2018-08-09 18:35:28 -04:00
Joey Hess
147a793f4b
one way to use this 2018-08-09 18:22:21 -04:00
Joey Hess
a96972015d
massive v6 add speed/memory improvement
v6 add: Take advantage of improved SIGPIPE handler in git 2.5 to speed up
the clean filter by not reading the file content from the pipe. This also
avoids git buffering the whole file content in memory.

When built with an older git, still consumes stdin. If built with a newer
git and used with an older one, it breaks, but that's acceptable --
checking the git version every time would make repeated smudge runs slow.

This commit was supported by the NSF-funded DataLad project.
2018-08-09 18:17:46 -04:00
Joey Hess
74551a430a
soften 2018-08-09 16:03:43 -04:00
Joey Hess
6de8bbaad9
followup 2018-08-09 16:01:48 -04:00
Joey Hess
63a81cd20a
response 2018-08-09 15:49:36 -04:00
Joey Hess
1f8e6d7e3a
hm 2018-08-09 15:44:01 -04:00
Joey Hess
0e04d9cfab
Merge branch 'master' of ssh://git-annex.branchable.com 2018-08-09 15:07:17 -04:00
Joey Hess
7b9762b6af
document converting from git to annex and back 2018-08-09 15:06:51 -04:00
yarikoptic
a18b9cb8be Added a comment: may be one more gitattribute to instruct on either conversion is desired for the file? 2018-08-09 18:59:56 +00:00
Joey Hess
adcca7ecd7
one more thought 2018-08-09 13:14:52 -04:00
Joey Hess
5b56ca32c6
typo 2018-08-09 13:10:31 -04:00
Joey Hess
42fcf59921
rethink and Q 2018-08-09 13:06:25 -04:00
Joey Hess
78ade9e6cf
a plan 2018-08-09 12:38:00 -04:00
Joey Hess
6eeeb2eea8
same root cause for this too 2018-08-09 12:15:38 -04:00
Joey Hess
29a52e1518
understand now 2018-08-09 12:08:30 -04:00
Joey Hess
7ed987f6ca
and 2018-08-09 12:05:51 -04:00
Joey Hess
fc2ffb414f
followup 2018-08-09 12:04:07 -04:00
yarikoptic
2a7484bdc6 initial report about failure to commit 2018-08-08 20:07:27 +00:00