[svn.haxx.se] · SVN Dev · SVN Users · SVN Org · TSVN Dev · TSVN Users · Subclipse Dev · Subclipse Users · this month's index

RE: svn commit: r40025 - trunk/subversion/libsvn_wc

From: Bert Huijben <rhuijben_at_sharpsvn.net>
Date: Sat, 17 Oct 2009 02:35:28 +0200

> -----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?)

        Bert

------------------------------------------------------
http://subversion.tigris.org/ds/viewMessage.do?dsForumId=462&dsMessageId=2408404
Received on 2009-10-17 02:35:52 CEST

This is an archived mail posted to the Subversion Dev mailing list.