I'm seeing that checkout does not always sleep for long enough for
timestamp-based change detection to be reliable:
svnadmin create repo
svn -mm import repo/format file://`pwd`/repo/f
svn co file://`pwd`/repo wc
echo x > wc/f
svn st wc
For some checkouts status shows the modification of wc/f, for other
checkouts it does not.
The problem is that my filesystem has about 4ms timestamp resolution
while svn_io_sleep_for_timestamps() only sleeps for 1ms. I can
determine the resolution experimentally using:
echo x > f && stat f | grep Modify && echo y > f && stat f | grep Modify
often that prints the same timestamp twice, but when the timestamps
differ they typically differ by about 4ms:
Modify: 2014-03-24 16:40:17.566569826 +0000
Modify: 2014-03-24 16:40:17.570569785 +0000
In order to avoid missing changes I need to change
svn_io_sleep_for_timestamps:
Index: subversion/libsvn_subr/io.c
===================================================================
--- subversion/libsvn_subr/io.c (revision 1580884)
+++ subversion/libsvn_subr/io.c (working copy)
@@ -1315,7 +1315,7 @@ svn_io_sleep_for_timestamps(const char *path, apr_
/* Sleep for at least 1 millisecond.
(t < 1000 will be round to 0 in apr) */
- apr_sleep(1000);
+ apr_sleep(4000);
return;
}
I'm running a standard 64-bit Debian/stable kernel with working copies
on an ext4 filesystem on a local SSD. I believe the 4ms is related to
the kernel's CONFIG_HZ=250 setting (it also has CONFIG_NO_HZ=y). Now I
could build a custom kernel and increase the resolution but I think
Subversion should support what is essentially a standard Linux setup. I
think we should increase the sleep to at least 10ms on the basis that
Linux kernels built with CONFIG_HZ=100 are not unusual. This does
penalise systems with true nanosecond resolution as they will sleep 9ms
more than necessary.
I've also got an ext3 filesystem on a spinning disk but that doesn't
show the problem because timestamps are always whole seconds and so
svn_io_sleep_for_timestamps uses a different code path.
--
Philip
Received on 2014-03-24 18:27:53 CET