[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Monotone-devel] cvssync freeze
From: |
William Uther |
Subject: |
[Monotone-devel] cvssync freeze |
Date: |
Thu, 15 Mar 2007 00:09:53 +1100 |
Hi all,
Again, this is probably most relevant to Christof Petig... I've
just committed a test to the n.v.m.cvssync.refactor branch that
causes a freeze in mtn_cvs pull. The test is skipped just before the
line that freezes.
I've traced the problem back to mtn_automate::get_sync_info(). I
generate a revision in mtn that has cvs: attributes, as well as a
cert with sync info. The cert appears to only contain cvs revision
info for some of the files. This manifests itself in
cvs_repository::update() during a pull because the 'last' variable,
that should contain the last cvs revision we synced with, is empty.
That then causes the "Inconsistency" on line 450 to show up. That in
turn fails an invariant which when thrown doesn't close all the
various pipes correctly and leads to the freeze.
So there are at least two problems here:
i) Either mtn_automate::get_sync_info() should be falling back to
file attributes when the cert doesn't contain the info it needs, or
Whatever writes the sync info into the cert needs to add sync
info for all files in the revision. (I suspect the first option here
is better - it is backwards compatible with people who have already
hit this problem, and it is more space efficient.)
and,
ii) Failing an invariant should cause a clean windup, not a freeze
where the child and parent process are each waiting on the other.
Which of the solutions to i) do you think is better?
Cheers,
Will :-}
- [Monotone-devel] cvssync freeze,
William Uther <=