Commit graph

40659 commits

Author SHA1 Message Date
Joey Hess
067a9c70c7
simplify code 2021-07-29 12:28:13 -04:00
Joey Hess
3e0b210039
remove unncessary debugs
Keeping the ones in Annex.InodeSentinal
2021-07-29 12:19:37 -04:00
mih
1e5c60132a Added a comment: Cause cannot (only) be a v7->v8 upgrade 2021-07-29 05:40:36 +00:00
Joey Hess
a306560374
use SQL.addInodeCaches
This avoids deadlock when opening the database handle calls
reconcileStaged.
2021-07-27 17:34:56 -04:00
Joey Hess
73e0cbbb19
fix problem populating pointer files
This is a result of an audit of every use of getInodeCaches,
to find places that misbehave when the annex object is not in the inode
cache, despite pointer files for the same key being in the inode cache.

Unfortunately, that is the case for objects that were in v7 repos that
upgraded to v8. Added a note about this gotcha to getInodeCaches.

Database.Keys.reconcileStaged, then annex.thin is set, would fail to
populate pointer files in this situation. Changed it to check if the
annex object is unmodified the same way inAnnex does, falling back to a
checksum if the inode cache is not recorded.

Sponsored-by: Dartmouth College's Datalad project
2021-07-27 14:26:49 -04:00
Joey Hess
de482c7eeb
move verifyKeyContent to Annex.Verify
The goal is that Database.Keys be able to use it; it can't use
Annex.Content.Presence due to an import loop.

Several other things also needed to be moved to Annex.Verify as a
conseqence.
2021-07-27 14:07:23 -04:00
Joey Hess
0ec5919bbe
comment 2021-07-27 13:45:33 -04:00
Joey Hess
ac59507809
Merge branch 'master' of ssh://git-annex.branchable.com 2021-07-27 13:16:22 -04:00
Joey Hess
14683da9eb
fix potential race in updating inode cache
Some uses of linkFromAnnex are inside replaceWorkTreeFile, which was
already safe, but others use it directly on the work tree file, which
was race-prone. Eg, if the work tree file was first removed, then
linkFromAnnex called to populate it, the user could have re-written it in
the interim.

This came to light during an audit of all calls of addInodeCaches,
looking for such races. All the other uses of it seem ok.

Sponsored-by: Brett Eisenberg on Patreon
2021-07-27 13:08:08 -04:00
Joey Hess
e4b2a067e0
fix potential race in updating inode cache
In Annex.Content, the object file was statted after pointer files were
populated. But if annex.thin is set, once the pointer files are
populated, the object file can potentially be modified via the hard
link. So, it was possible, though seemingly very unlikely, for the inode
of the modified object file to be cached.

Command.Fix and Command.Fsck had similar problems, statting the work
tree files after they were in place. Changed them to stat the temp file
that gets moved into place. This does rely on .git/annex being on the
same filesystem. If it's not, the cached inode will not be the same as
the one that the temp file gets moved to. Result will be that git-annex
will later need to do an expensive verification of the content of the
worktree files. Note that the cross-filesystem move of the temp file
already is a larger amount of extra work, so this seems acceptable.

Sponsored-by: Luke Shumaker on Patreon
2021-07-27 12:29:10 -04:00
mih
c3e74710f9 Added a comment: Fixed in 8.20210715-g3b5a3e168 2021-07-27 12:00:35 +00:00
Joey Hess
3b5a3e168d
check if object is modified before starting to send it
Fix bug that caused some transfers to incorrectly fail with "content
changed while it was being sent", when the content was not changed.

While I don't know how to reproduce the problem that several people
reported, it is presumably due to the inode cache somehow being stale.
So check isUnmodified', and if it's not modified, include the file's
current inode cache in the set to accept, when checking for modification
after the transfer.

That seems like the right thing to do for another reason: The failure
says the file changed while it was being sent, but if the object file was
changed before the transfer started, that's wrong. So it needs to check
before allowing the transfer at all if the file is modified.

(Other calls to sameInodeCache or elemInodeCaches, when operating on inode
caches from the database, could also be problimatic if the inode cache is
somehow getting stale. This does not address such problems.)

Sponsored-by: Dartmouth College's Datalad project
2021-07-26 17:33:49 -04:00
Joey Hess
ae015c2ab9
comment 2021-07-26 17:09:14 -04:00
Joey Hess
4637592325
fix a place where the inode cache could potentially have gotten stale
When git-annex lock repopulates the object file by copying an associated
file that still has its content, it negected to update the inode cache.

I was not able to actually get this code to successfully repopulate the
object file; the associated file gets replaced with a dangling pointer
before unlock is able to do that. (By what I'm not sure..
reconcileStaged?) Which might be itself a bug, but
anyway this makes me doubtful that this was really leading to a stale
inode cache. Still, in case there is some situation in which it does
work, fixed it to update the inode cache.
2021-07-26 14:12:58 -04:00
Joey Hess
6bbd606390
comment 2021-07-26 13:59:07 -04:00
Joey Hess
f195f3b541
more inode cache debugging 2021-07-26 12:57:35 -04:00
Joey Hess
e676cd43c0
propagate debugging into remote's Annex monad
This is needed to make the debugging added in
0073384850 actually be displayed when
running git-annex get from a local remote.
2021-07-26 11:40:51 -04:00
Joey Hess
1fc6e6a65f
close this frustrating todo due to lack of followup and/or being fixed 2021-07-26 11:16:58 -04:00
Joey Hess
5a7e76d5c1
comment 2021-07-26 11:13:12 -04:00
Joey Hess
0073384850
add debugging in sameInodeCache 2021-07-26 10:58:07 -04:00
mih
9490ca5a26 Added a comment: strace logs 2021-07-26 07:10:22 +00:00
Joey Hess
645b045e02
comment 2021-07-22 14:14:25 -04:00
Joey Hess
801a5ddb9b
comment 2021-07-22 14:01:12 -04:00
Joey Hess
2ab19be3f6
comment 2021-07-22 13:34:27 -04:00
Joey Hess
f8376821c7
comment 2021-07-22 13:28:23 -04:00
mih
f4a35892cf Added a comment: Carification 2021-07-22 14:59:23 +00:00
mih
5a7ca6f72c Added a comment: Reproducible with 8.20210715-g39d747936 2021-07-22 14:54:40 +00:00
Joey Hess
39d7479366
comment 2021-07-21 11:06:03 -04:00
neil.okamoto@6ca5b1b6563bc71ce13ec235852d23e6ac86e331
9da4a7d5b2 Added a comment 2021-07-21 07:13:02 +00:00
neil.okamoto@6ca5b1b6563bc71ce13ec235852d23e6ac86e331
24c88e8167 Added a comment 2021-07-20 23:22:29 +00:00
Joey Hess
455e182e21
comment 2021-07-19 12:39:17 -04:00
Joey Hess
3d50b47ded
sync, merge: Added --allow-unrelated-histories option
Which is the same as the git merge option.

After last commit, this turns out to be needed in the test suite, and when
doing git-annex import from special remote, followed by a git-annex merge.

Sponsored-by: Svenne Krap on Patreon
2021-07-19 12:14:26 -04:00
Joey Hess
b6bea0d3f2
remove direct mode remnant of merging unrelated histories
sync, merge, post-receive: Avoid merging unrelated histories, which used to
be allowed only to support direct mode repositories.

(However, sync does still merge unrelated histories when importing trees
from special remotes, and the assistant still merges unrelated histories
always.)

See 556b2ded2b for why this was added
back in 2016, for direct mode.

This is a behavior change, which might break something that was relying
on sync merging unrelated histories, but git had a good reason to
prevent it, since it's easy to foot shoot with it, and git-annex should
follow suit.

Sponsored-by: Noam Kremen on Patreon
2021-07-19 11:41:26 -04:00
Joey Hess
33a80d083a
sync --quiet
* sync: When --quiet is used, run git commit, push, and pull without
  their ususual output.
* merge: When --quiet is used, run git merge without its usual output.

This might also make --quiet work better for some other commands
that make commits, like git-annex adjust.

Sponsored-by: Kevin Mueller on Patreon
2021-07-19 11:28:47 -04:00
Joey Hess
f84bd8e921
Merge branch 'master' of ssh://git-annex.branchable.com 2021-07-19 11:24:45 -04:00
Joey Hess
fccb51ac09
comment 2021-07-19 10:29:12 -04:00
Atemu
99f136c2bc 2021-07-18 22:36:15 +00:00
remyabel
6517d057a0 2021-07-18 04:25:29 +00:00
anarcat
6d4baa4943 Added a comment: same problem on debian bullseye 2021-07-18 02:02:43 +00:00
Joey Hess
30eed6cf97
Merge branch 'master' of ssh://git-annex.branchable.com 2021-07-17 17:42:57 -04:00
Atemu
cf708a8871 Added a comment 2021-07-16 22:47:44 +00:00
Joey Hess
c9b9a93509
close 2021-07-16 16:28:22 -04:00
Joey Hess
acbf711e21
comment 2021-07-16 15:16:56 -04:00
Joey Hess
635e7f3e26
split annexLocations
To avoid mistakes like commit 0ccbed4f6f,
be explicit about the two variants of this.

Incidentially avoids a small amount of overhead in calling reverse.

Sponsored-by: Shae Erisson on Patreon
2021-07-16 14:17:56 -04:00
Joey Hess
aa33c928cb
Merge branch 'master' of ssh://git-annex.branchable.com 2021-07-16 14:02:41 -04:00
Joey Hess
dc4e79c582
I understand this now, marking confirmed 2021-07-16 14:02:12 -04:00
alt
a4f31f583c Added a comment 2021-07-16 12:37:47 +00:00
Atemu
a4947c65ec Added a comment 2021-07-16 11:21:43 +00:00
guardcat
498e9d74e1 Added a comment: appendix 2021-07-16 06:34:53 +00:00
guardcat
dc56673246 Added a comment: Fixing problem 2021-07-16 06:21:23 +00:00