On Fri, Jun 05, 2015 at 08:18:17AM -0400, Jeff King wrote: > On Fri, Jun 05, 2015 at 12:01:16PM +0000, steve.norman@xxxxxxxxxxxxxxxxxx wrote: > > > On Sunday, May 24, 2015 @ 10:01 AM Duy Nguyen [mailto:pclouds@xxxxxxxxx] did scribble: > > > > > In case you want to back away from option 2 because it starts to leak > > > raciness, which your old commit tried to fix in the first place. I > > > think the only other place that tests for lots of non-existent loose > > > objects is write_sha1_file (e.g. "tar -xf bigtarball.tar.gz; cd > > > bigtarball; git init; git add ."). But the number of calls should be > > > much smaller compared to index-pack and it does not use has_sha1_file, > > > it uses check_and_freshen_file() instead. > > > > > > There are other places where has_sha1_file() may return 0, but I think > > > the number of calls is even smaller to bother (shallow.c, > > > fetch-pack.c, apply.c, buik-checkin.c) > > > > Any updates / further thoughts on this? > > Sorry, I haven't had a chance to look at it further. It still on my todo > list. My plan is: > > 1. Devise some torture to tests to see whether my patch series is in > fact racy on Linux. I do not know that we needed further convincing that the patch series to stat() the objects/pack directory was flaky, but just as an extra data point in case somebody tries this approach later: it is indeed flaky. I've been running with it for a week or so, and I noticed that a simple clone of a small repository fails racily: $ git clone --bare --no-local . foo.git Cloning into bare repository 'child.git'... remote: Counting objects: 210, done. remote: Compressing objects: 100% (98/98), done. remote: Total 210 (delta 99), reused 210 (delta 99) Receiving objects: 100% (210/210), 68.00 KiB | 0 bytes/s, done. Resolving deltas: 100% (99/99), done. Checking connectivity... done. error: internal error: refs/heads/master is not a valid packed reference! Sometimes it works, and sometimes not. It looks like we're failing to re-scan the pack directory when we should (presumably because the open() and readdir() operations are not atomic). -Peff -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html