On 27.05.2013 15:40, Tobias Bading wrote:
> On 27.05.2013 12:43, Branko Čibej wrote:
>> On 27.05.2013 09:59, Tobias Bading wrote:
>>> Quick update:
>>> The problem is definitely timestamp related. "touch 3449_spurious"
>>> fixes a "corrupt" working copy, i.e. "svn status" and "svn diff" work
>>> properly afterwards. I'll try to figure out why my machine is living
>>> in its own timeline. All I can say after reading just a few lines of
>>> python code is that I don't have
>>> SVN_I_LOVE_CORRUPTED_WORKING_COPIES_SO_DISABLE_SLEEP_FOR_TIMESTAMPS
>>> hard-wired to 'yes' :-).
>> Well, that's a relief, at least.
>>
>> Can you please get two pieces of information:
>>
>> 1) run the "mount" command and past the line representing the ext4
>> filesystem where your working copy lives
>
> /dev/sdb1 on / type ext4 (rw,relatime,errors=remount-ro)
>
>> 2) Get the ext4 superblock info, using "sudo tune2fs -l /dev/something";
>> the mount output will tell you which /dev/something
>
> tune2fs 1.41.11 (14-Mar-2010)
> Filesystem volume name: <none>
> Last mounted on: /
> Filesystem UUID: dcabb217-5e67-45ee-bbd1-bc78b9755514
> Filesystem magic number: 0xEF53
> Filesystem revision #: 1 (dynamic)
> Filesystem features: has_journal ext_attr resize_inode dir_index
> filetype needs_recovery extent flex_bg sparse_super large_file
> huge_file uninit_bg dir_nlink extra_isize
> Filesystem flags: signed_directory_hash
> Default mount options: (none)
> Filesystem state: clean
> Errors behavior: Continue
> Filesystem OS type: Linux
> Inode count: 15269888
> Block count: 61049088
> Reserved block count: 3052452
> Free blocks: 26233604
> Free inodes: 13780922
> First block: 0
> Block size: 4096
> Fragment size: 4096
> Reserved GDT blocks: 1009
> Blocks per group: 32768
> Fragments per group: 32768
> Inodes per group: 8192
> Inode blocks per group: 512
> RAID stride: 32730
> Flex block group size: 16
> Filesystem created: Tue Jul 5 15:41:05 2011
> Last mount time: Mon May 27 09:14:16 2013
> Last write time: Mon Apr 29 09:44:35 2013
> Mount count: 18
> Maximum mount count: 27
> Last checked: Mon Apr 29 09:44:35 2013
> Check interval: 15552000 (6 months)
> Next check after: Sat Oct 26 09:44:35 2013
> Lifetime writes: 1283 GB
> Reserved blocks uid: 0 (user root)
> Reserved blocks gid: 0 (group root)
> First inode: 11
> Inode size: 256
> Required extra isize: 28
> Desired extra isize: 28
> Journal inode: 8
> First orphan inode: 4072404
> Default directory hash: half_md4
> Directory Hash Seed: 3cc06f24-54d0-4435-94d0-d8ce07f75445
> Journal backup: inode blocks
>
>
>
> Further tests:
> After the failed test, 'ls -l --full-time 3449_spurious' prints the
> timestamp '2013-05-27 14:27:35.069850993 +0200'.
> At this point, 'svn status 3449_spurious' claims that 3449_spurious is
> unmodified. (This is what caused the test failure).
>
> After a 'touch -d "2013-05-27 14:27:35.069850" 3449_spurious', 'ls -l
> --full-time 3449_spurious' prints the timestamp '2013-05-27
> 14:27:35.069850000 +0200' and 'svn status 3449_spurious' still claims
> that the file is unmodified.
>
> After a 'touch -d "2013-05-27 14:27:35.069851" 3449_spurious', 'svn
> status 3449_spurious' admits that the file has been modified.
>
> This makes sense I guess, because apr_finfo_t has microsecond
> resolution, whereas stat(2) (and ext4 obviously) have nanosecond
> resolution. What doesn't make sense to me is why I have to patch
> svn_io_sleep_for_timestamps to sleep a whole second. Waiting e.g. 0.1
> seconds is not sufficient.
>
> I tested a 'touch t1 ; touch t2 ; ... ; touch t50' and then 'ls -l
> --full-time', which shows identical timestamps for all 50 files. Isn't
> that a bit... odd?
Hmmmm .... there's a difference between the /resolution/ of the
timestamp (in the filesystem) and the /precision/ of either the
timestamp or the system clock.
In this case, judging from your "touch" test, it would appear that the
system clock has a much lower precision than one would expect.
Can you try this: run the following command for a couple of seconds, it
should give you an idea about the system clock precision.
{ while true; do date '+%M:%S.%N'; done; } | uniq
--
Branko Čibej
Director of Subversion | WANdisco | www.wandisco.com
Received on 2013-05-27 16:01:59 CEST