[libvirt] [PATCH 06/10] Add initial docs about the lock managers

Daniel Veillard veillard at redhat.com
Fri May 27 08:57:08 UTC 2011


On Thu, May 19, 2011 at 07:24:21AM -0400, Daniel P. Berrange wrote:
> ---
>  docs/internals/locking.html.in |  257 ++++++++++++++++++++++++++++++++++++++++
>  docs/sitemap.html.in           |    4 +
>  2 files changed, 261 insertions(+), 0 deletions(-)
>  create mode 100644 docs/internals/locking.html.in
> 
> diff --git a/docs/internals/locking.html.in b/docs/internals/locking.html.in
> new file mode 100644
> index 0000000..3790ef0
> --- /dev/null
> +++ b/docs/internals/locking.html.in
> @@ -0,0 +1,257 @@
> +<html>
> +  <body>
> +    <h1>Resource Lock Manager</h1>
> +
> +    <ul id="toc"></ul>
> +
> +    <p>
> +      This page describes the design of the resource lock manager
> +      that is used for locking disk images, to ensure exclusive
> +      access to content.
> +    </p>
> +
> +    <h2><a name="goals">Goals</a></h2>
> +
> +    <p>
> +      The high level goal is to prevent the same disk image being
> +      used by more than one QEMU instance at a time (unless the
> +      disk is marked as sharable, or readonly). The scenarios
> +      to be prevented are thus:
> +    </p>
> +
> +    <ol>
> +      <li>
> +        Two different guests running configured to point at the
> +        same disk image.
> +      </li>
> +      <li>
> +        One guest being started more than once on two different
> +        machines due to admin mistake
> +      </li>
> +      <li>
> +        One guest being started more than once on a single machine
> +        due to libvirt driver bug on a single machine.
> +      </li>
> +    </ol>
> +
> +    <h2><a name="requirement">Requirements</a></h2>
> +
> +    <p>
> +      The high level goal leads to a set of requirements
> +      for the lock manager design
> +    </p>
> +
> +    <ol>
> +      <li>
> +        A lock must be held on a disk whenever a QEMU process
> +        has the disk open
> +      </li>
> +      <li>
> +        The lock scheme must allow QEMU to be configured with
> +        readonly, shared write, or exclusive writable disks
> +      </li>
> +      <li>
> +        A lock handover must be performed during the migration
> +        process where 2 QEMU processes will have the same disk
> +        open concurrently.
> +      </li>
> +      <li>
> +        The lock manager must be able to identify and kill the
> +        process accessing the resource if the lock is revoked.
> +      </li>
> +      <li>
> +        Locks can be acquired for arbitrary VM related resources,
> +        as determined by the management application.
> +      </li>
> +    </ol>
> +
> +    <h2><a name="design">Design</a></h2>
> +
> +    <p>
> +      Within a lock manager the following series of operations
> +      will need to be supported.
> +    </p>
> +
> +    <ul>
> +      <li>
> +        <strong>Register object</strong>
> +        Register the identity of an object against which
> +        locks will be acquired
> +      </li>
> +      <li>
> +        <strong>Add resource</strong>
> +        Associate a resource with an object for future
> +        lock acquisition / release
> +      </li>
> +      <li>
> +        <strong>Acquire locks</strong>
> +        Acquire the locks for all resources associated
> +        with the object
> +      </li>
> +      <li>
> +        <strong>Release locks</strong>
> +        Release the locks for all resources associated
> +        with the object
> +      </li>
> +      <li>
> +        <strong>Inquire locks</strong>
> +        Get a representation of the state of the locks
> +        for all resources associated with the object
> +      </li>
> +    </ul>
> +
> +    <h2><a name="impl">Plugin Implementations</a></h2>
> +
> +    <p>
> +      Lock manager implementations are provided as LGPLv2+
> +      licensed, dlopen()able library modules. The plugins
> +      will be loadable from the following location:

  Well unless they compile with a different prefix, right ?

         will usually be loadable ....

> +    </p>
> +
> +    <pre>
> +/usr/{lib,lib64}/libvirt/lock_manager/$NAME.so
> +</pre>
> +
> +    <p>
> +      The lock manager plugin must export a single ELF
> +      symbol named <code>virLockDriverImpl</code>, which is
> +      a static instance of the <code>virLockDriver</code>
> +      struct. The struct is defined in the header file
> +    </p>
[...]
> +    <p>
> +      The following psuedo code illustrates the common

 pseudo

> +      patterns of operations invoked on the lock
> +      manager plugin callbacks.

  Shouldn't we point to the README in the src/locking subdir here ?

> +    </p>
> +
> +    <h3><a name="usageLockAcquire">Lock acquisition</a></h3>
> +

  small nits, ACK overall

Daniel

-- 
Daniel Veillard      | libxml Gnome XML XSLT toolkit  http://xmlsoft.org/
daniel at veillard.com  | Rpmfind RPM search engine http://rpmfind.net/
http://veillard.com/ | virtualization library  http://libvirt.org/




More information about the libvir-list mailing list