[libvirt] [PATCH v6 00/13] qemu: Add quorum support to libvirt

Matthias Gatto matthias.gatto at outscale.com
Thu Oct 29 13:43:07 UTC 2015

The purpose of these patches is to introduce quorum for libvirt
I've try to follow this proposal:

This feature ask for 6 task:

1) Allow a _virStorageSource to contain more than one backing store.

Because all the actual libvirt code use the backingStore field
as a pointer and we needs want to change that, I've decide to encapsulate
the backingStore field to simplifie the array manipulation.

2) Add the missing field a quorum need in _virStorageSource and
their respectives enums.

3) Parse and format the xml
Because a quorum allows to have more than one backing store at the same level
we need to change virDomainDiskDefFormat and virDomainDiskDefParseXML
to call virDomainDiskBackingStoreFormat and virDomainDiskBackingStoreParse
in a loop.
virDomainDiskBackingStoreFormat and virDomainDiskBackingStoreParse can
call themself recursively in a loop because a quorum can contain another

4) Build qemu string
As for the xml, we have to call the function which create quorum recursively.
But this task have the problem explained here:
The _virStorageSource missing some informations that can be passed to
a child, and therefore this version of quorum is incomplet.

5) Allow to hotplug/change a disk in a quorum
This part is not present in these patches because for this task
we have to use blockdev-add, and currently libvirt use
device_add for hotpluging that doesn't allow to hotplug quorum childs.

There is 3 way to handle this problem:
      1) create a virDomainBlockDevAdd function in libvirt witch call

      2) use blockdev-add instead of device_add in qemuMonitorJSONAddDevice

      3) write a hack which uses blockdev-add only when attaching a quorum child

        -Rebase on master
        -Add Documentation

        -Transforme the backingStore field in virStorageSource into
         an array of pointer instead of a pointer
	-Modify virStorageSourceSetBackingStore to allow it to expand
         the backingStore size.

        -Rebase on master

        -Rebase on master
        -patch 1-4/9: use patchs from John Ferlan 
        -patch 4/9: check return of virStorageSourceSetBackingStore
        -patch 5/9: report type of error on virStorageSourceSetBackingStore

v6 note:
	First at all, I'm sorry for the time between v5 and v6,
	I had other projects to work on and was unable to work at full time
	on libvirt, moreover I've try at first to support all snapshot and
	block jobs operations for quorum, but encounter a lot a problems.
	At the end I had a versions which was only handling some few operations,
	so I've block all unsupported operations for quorum,
	I plan to continue working on the quorum unsupported operations,
	and send it when it will be ready, but in the meantime I hope to upstream
	this serie of patch which should provide a very basic(but stable)
	quorum suport.

v6 modifications:
	-Rebase on master
	-Remove node-name patch
	-patch 06/13: Add virStorageSourceIsRAID
	-patch 10/13: Add virDomainDefHasRAID
	-patch 11-13/13: Block all unsupported operations

Matthias Gatto (13):
  virstoragefile: Add virStorageSourceGetBackingStore
  virstoragefile: Always use virStorageSourceGetBackingStore to get
    backing store
  virstoragefile: Add virStorageSourceSetBackingStore
  virstoragefile: Always use virStorageSourceSetBackingStore to set
    backing store
  virstoragefile: change backingStore to backingStores.
  virstoragefile: Add virStorageSourceIsRAID
  virstoragefile: Add quorum in virstoragefile
  domain_conf: Read and Write quorum config
  qemu: Add quorum support in qemuBuildDriveDevStr
  domain: add virDomainDefHasRAID
  qemu: Block snapshot operation with RAID
  qemu: qemuDomainGetBlockInfo quorum support
  qemu: qemuDiskPathToAlias quorum support

 docs/formatdomain.html.in             |  23 +++-
 docs/schemas/domaincommon.rng         |  21 +++-
 docs/schemas/storagecommon.rng        |   1 +
 docs/schemas/storagevol.rng           |   1 +
 src/conf/domain_conf.c                | 196 +++++++++++++++++++++++++---------
 src/conf/domain_conf.h                |   1 +
 src/conf/storage_conf.c               |  23 ++--
 src/libvirt_private.syms              |   4 +
 src/qemu/qemu_cgroup.c                |   4 +-
 src/qemu/qemu_command.c               |  94 ++++++++++++++++
 src/qemu/qemu_domain.c                |   2 +-
 src/qemu/qemu_driver.c                |  50 ++++++---
 src/qemu/qemu_migration.c             |   1 +
 src/qemu/qemu_monitor_json.c          |   4 +-
 src/security/security_dac.c           |   2 +-
 src/security/security_selinux.c       |   4 +-
 src/security/virt-aa-helper.c         |   2 +-
 src/storage/storage_backend.c         |  22 ++--
 src/storage/storage_backend_fs.c      |  38 ++++---
 src/storage/storage_backend_gluster.c |  11 +-
 src/storage/storage_backend_logical.c |  15 ++-
 src/storage/storage_driver.c          |   3 +-
 src/util/virstoragefile.c             | 118 +++++++++++++++++---
 src/util/virstoragefile.h             |  15 ++-
 tests/virstoragetest.c                |  18 ++--
 25 files changed, 523 insertions(+), 150 deletions(-)


More information about the libvir-list mailing list