On Fri, Oct 16, 2009 at 20:35, Bert Huijben <bert_at_qqmail.nl> wrote:
>> -----Original Message-----
>> From: Bert Huijben [mailto:rhuijben_at_sharpsvn.net]
>> Sent: vrijdag 16 oktober 2009 23:24
>> To: 'Paul Burba'; dev_at_subversion.tigris.org
>> Cc: svn_at_subversion.tigris.org; gstein_at_gmail.com
>> Subject: RE: svn commit: r40025 - trunk/subversion/libsvn_wc
>>
>> > -----Original Message-----
>> > From: Paul Burba [mailto:ptburba_at_gmail.com]
>> > Sent: vrijdag 16 oktober 2009 18:54
>> > To: dev_at_subversion.tigris.org
>> > Cc: svn_at_subversion.tigris.org
>> > Subject: Re: svn commit: r40025 - trunk/subversion/libsvn_wc
>>
>> <snip 25 Kbyte patch>
>>
>> >
>> > Hi Bert,
>> >
>> > While testing a patch I noticed merge_tests.py 3 was failing. After
>> > confirming it wasn't due to my changes I went looking for the culprit
>> > and it appears to be r40025. The test fails when a file child *and*
>> > directory child of a subtree are deleted and then committed. The
>> > commit appears to succeed but the deleted file still shows as
>> deleted,
>> > e.g.:
>> >
>> > trunk.release.build>svn st -v
>> > 1 1 jrandom .
>> > 1 1 jrandom A
>> > 1 1 jrandom A\mu
>> > 1 1 jrandom A\B
>> > 1 1 jrandom A\B\lambda
>> > 1 1 jrandom A\B\E
>> > 1 1 jrandom A\B\E\alpha
>> > 1 1 jrandom A\B\E\beta
>> > 1 1 jrandom A\B\F
>> > 1 1 jrandom A\C
>> > 1 1 jrandom A\D
>> > 1 1 jrandom A\D\gamma
>> > 1 1 jrandom A\D\G
>> > 1 1 jrandom A\D\G\rho
>> > 1 1 jrandom A\D\G\pi
>> > 1 1 jrandom A\D\G\tau
>> > 1 1 jrandom A\D\H
>> > 1 1 jrandom A\D\H\chi
>> > 1 1 jrandom A\D\H\omega
>> > 1 1 jrandom A\D\H\psi
>> > 1 1 jrandom iota
>> >
>> > trunk.release.build>svn del A\B\E A\B\lambda
>> > D A\B\E\alpha
>> > D A\B\E\beta
>> > D A\B\E
>> > D A\B\lambda
>> >
>> > trunk.release.build>svn ci -m "delete"
>> > Deleting A\B\E
>> > Deleting A\B\lambda
>> >
>> > Committed revision 2.
>> >
>> > trunk.release.build>svn st -v
>> > 1 1 jrandom .
>> > 1 1 jrandom A
>> > 1 1 jrandom A\mu
>> > 1 1 jrandom A\B
>> > D 1 1 jrandom A\B\lambda
>> > 1 1 jrandom A\B\F
>> > 1 1 jrandom A\C
>> > 1 1 jrandom A\D
>> > 1 1 jrandom A\D\gamma
>> > 1 1 jrandom A\D\G
>> > 1 1 jrandom A\D\G\rho
>> > 1 1 jrandom A\D\G\pi
>> > 1 1 jrandom A\D\G\tau
>> > 1 1 jrandom A\D\H
>> > 1 1 jrandom A\D\H\chi
>> > 1 1 jrandom A\D\H\omega
>> > 1 1 jrandom A\D\H\psi
>> > 1 1 jrandom iota
>> >
>> > Both the file and directory deletes actually happened:
>> >
>> > trunk.release.build>svn log -v -r2
>> > -------------------------------------------------------------------
>> --
>> > ---
>> > r2 | pburba | 2009-10-16 12:46:27 -0400 (Fri, 16 Oct 2009) | 1 line
>> > Changed paths:
>> > D /A/B/E
>> > D /A/B/lambda
>> >
>> >
>> > -------------------------------------------------------------------
>> --
>> > ---
>> >
>> > trunk.release.build>svn up
>> > C A\B\lambda
>> > At revision 2.
>> > Summary of conflicts:
>> > Tree conflicts: 1
>> >
>> > The test *only* fails with a release build. Could you do me a favor
>> > and try running the test with a release build and see if it fails for
>> > you?
>> >
>> > There seems to be something wrong with the initial checkout (obvious
>> > given the r40025 changes only libsvn_wc/update_editor.c). If I
>> > perform the checkout using a debug build and then manually perform
>> the
>> > deletes and commit with a release build, then the commit works
>> > correctly.
>> >
>> > This is still failing for me as of trunk_at_40079. Assuming you can
>> > replicate this any insight is appreciated.
>> >
>> > Paul
>> >
>>
>>
>> Strange issue this failure, but thanks for the release mode hint.
>
> After a lot of debugging I found the root cause of this issue and the issue
> itself is unrelated to the patch in r40025. It just happens to trigger the
> error because it had some pool and loggy changes, which reordered and
> splitted some loggy operations in multiple wq items.
>
>
>
> Our working queue handling in wc_db.c works with 'wri_paths', which is a raw
> estimation of in which wcroot a path is located.
>
> The problem in this specific testcase is that the wri_path points to a
> different wcroot before and after the working queue item is processed.
>
> workingqueue.c has a simple loop.
>
> Fetch work item and id from wri_path.
>
> <process item>
>
> Delete work item with id from wri_path.
>
>
> In this specific case the wq operation is deleting the directory after
> committing. Which changes the calculation of the wcroot to the parent. Which
> accidentally has a wq item with the same id. (Handling the commit
> processiong of A\B\lambda).
>
>
> I'm not going to fix this issue on this hour (It's 2:30 AM here), so if
> somebody else wants to fix this? (gstein?)
Sure, I'll get it fixed asap. Thanks for digging into this!
Cheers,
-g
------------------------------------------------------
http://subversion.tigris.org/ds/viewMessage.do?dsForumId=462&dsMessageId=2408430
Received on 2009-10-17 04:54:54 CEST