On Mon, Dec 01, 2008 at 05:44:14PM +0000, Daniel P. Berrange wrote:
On Mon, Dec 01, 2008 at 06:26:03PM +0100, Daniel Veillard wrote:
> On Sun, Nov 30, 2008 at 11:27:14PM +0000, Daniel P. Berrange wrote:
> I hope it's worth the effort, it's a lot of complexity added.
> One of the things which worries me is that detecting errors will be
> hard, you end up with a locked server that can be far from trivial
> to debug.
> I'm really wondering how we could automate testing or at least ease the
> debug,
It occurred to me that a static analysis tool like CIL really ought to
be able to check correctness fairly easily. Rich has discussed this a
little before
http://et.redhat.com/~rjones/cil-analysis-of-libvirt/
Basically since we have a known set of functions which lock the object
and CIL can give us the code flow within a method, we ought to be able
to write something that looks at each call of virDomainFindByUUID,
and then traces the code paths to functiuon return, and validates that
the unlock call was made. It could likewise check for people calling
things before acquiring the lock.
Would be an interesting project..... :-)
Trying out Rich's demo code I got it to generate before & after control
flow diagrams of the 'domain create' functiuon n the QEMU driver
http://fedorapeople.org/~berrange/libvirt/qemudDomainCreateBefore.png
http://fedorapeople.org/~berrange/libvirt/qemudDomainCreateAfter.png
The main problem I had was that CIL doesn't underderstand the 'bool'
data type, so I had to hack gnulib/lib/c-ctype.{h,c}, src/cgroup.c
and src/xmlrpc.{h,c} to do a s/bool/char/.
Be nice to get rid of these directly in our source tree, or find a compile
flag to automatically turn 'bool' into 'char' ?
Daniel
--
|: Red Hat, Engineering, London -o-
http://people.redhat.com/berrange/ :|
|:
http://libvirt.org -o-
http://virt-manager.org -o-
http://ovirt.org :|
|:
http://autobuild.org -o-
http://search.cpan.org/~danberr/ :|
|: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|